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 }