View Javadoc

1   package com.atlassian.vcache.internal.memcached;
2   
3   import com.atlassian.marshalling.jdk.StringMarshalling;
4   import com.atlassian.vcache.DirectExternalCache;
5   import com.atlassian.vcache.ExternalCacheSettings;
6   import com.atlassian.vcache.StableReadExternalCache;
7   import com.atlassian.vcache.internal.RequestContext;
8   import com.atlassian.vcache.internal.RequestMetrics;
9   import com.atlassian.vcache.internal.core.DefaultRequestContext;
10  import com.atlassian.vcache.internal.core.Sha1ExternalCacheKeyGenerator;
11  import com.atlassian.vcache.internal.core.metrics.DefaultMetricsCollector;
12  import com.atlassian.vcache.internal.core.metrics.MetricsCollector;
13  import com.atlassian.vcache.internal.test.AbstractStableReadExternalCacheIT;
14  import net.spy.memcached.AddrUtil;
15  import net.spy.memcached.BinaryConnectionFactory;
16  import net.spy.memcached.MemcachedClient;
17  import org.junit.BeforeClass;
18  
19  import java.io.IOException;
20  import java.time.Duration;
21  
22  public class MemcachedStableReadExternalCacheIT extends AbstractStableReadExternalCacheIT {
23      private static MemcachedClient client;
24      private 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  
34      @Override
35      protected StableReadExternalCache<String> createCache(String name, ExternalCacheSettings settings, Duration lockTimeout) {
36          return metricsCollector.wrap(
37                  new MemcachedStableReadExternalCache<>(
38                          () -> client,
39                          () -> requestContext,
40                          new Sha1ExternalCacheKeyGenerator("it-test"),
41                          name,
42                          StringMarshalling.pair(),
43                          settings,
44                          metricsCollector,
45                          lockTimeout));
46      }
47  
48      @Override
49      protected DirectExternalCache<String> obtainDirectCache(String name, ExternalCacheSettings settings) {
50          return new MemcachedDirectExternalCache<>(
51                  () -> client,
52                  () -> requestContext,
53                  new Sha1ExternalCacheKeyGenerator("it-test"),
54                  name,
55                  StringMarshalling.pair(),
56                  settings,
57                  Duration.ofSeconds(1));
58      }
59  
60      @Override
61      protected RequestMetrics requestMetrics() {
62          return metricsCollector.obtainRequestMetrics(requestContext);
63      }
64  }