View Javadoc

1   package com.atlassian.vcache.internal.memcached;
2   
3   import com.atlassian.marshalling.jdk.JavaSerializationMarshalling;
4   import com.atlassian.vcache.DirectExternalCache;
5   import com.atlassian.vcache.ExternalCacheSettings;
6   import com.atlassian.vcache.internal.RequestContext;
7   import com.atlassian.vcache.internal.RequestMetrics;
8   import com.atlassian.vcache.internal.core.DefaultRequestContext;
9   import com.atlassian.vcache.internal.core.Sha1ExternalCacheKeyGenerator;
10  import com.atlassian.vcache.internal.core.metrics.DefaultMetricsCollector;
11  import com.atlassian.vcache.internal.core.metrics.MetricsCollector;
12  import com.atlassian.vcache.internal.test.AbstractUnreliableDirectExternalCacheIT;
13  import net.spy.memcached.AddrUtil;
14  import net.spy.memcached.BinaryConnectionFactory;
15  import net.spy.memcached.MemcachedClient;
16  import org.junit.BeforeClass;
17  
18  import java.io.IOException;
19  import java.time.Duration;
20  
21  public class MemcachedDirectExternalCacheIT extends AbstractUnreliableDirectExternalCacheIT {
22      private static MemcachedClient client;
23      private static MemcachedClient offlineClient; // Points to a non-responsive memcached
24      private final RequestContext requestContext = new DefaultRequestContext(() -> "tenant-id");
25      private final MetricsCollector metricsCollector = new DefaultMetricsCollector(() -> requestContext);
26  
27      @BeforeClass
28      public static void init_client() throws IOException {
29          client = new MemcachedClient(
30                  new BinaryConnectionFactory(),
31                  AddrUtil.getAddresses(System.getProperty("memcached.svr")));
32  
33          offlineClient = new MemcachedClient(
34                  new BinaryConnectionFactory(),
35                  AddrUtil.getAddresses("localhost:4")); // Unassigned port
36      }
37  
38      @Override
39      protected DirectExternalCache<String> createOfflineCache(String name, ExternalCacheSettings settings) {
40          return createCache(name, settings, offlineClient);
41      }
42  
43      @Override
44      protected DirectExternalCache<String> createCache(String name, ExternalCacheSettings settings) {
45          return createCache(name, settings, client);
46      }
47  
48      private DirectExternalCache<String> createCache(String name, ExternalCacheSettings settings, MemcachedClient client) {
49          return metricsCollector.wrap(
50                  new MemcachedDirectExternalCache<>(
51                          Utils.defaultServiceSettingsBuilder(() -> client, Duration.ofSeconds(1)).build(),
52                          () -> requestContext,
53                          new Sha1ExternalCacheKeyGenerator("it-test-42"),
54                          name,
55                          JavaSerializationMarshalling.pair(String.class),
56                          settings));
57      }
58  
59      @Override
60      protected RequestMetrics requestMetrics() {
61          return metricsCollector.obtainRequestMetrics(requestContext);
62      }
63  }