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.AbstractUnreliableStableReadExternalCacheIT;
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 AbstractUnreliableStableReadExternalCacheIT {
23 private static MemcachedClient client;
24 private static MemcachedClient offlineClient;
25 private RequestContext requestContext = new DefaultRequestContext(() -> "tenant-id");
26 private final MetricsCollector metricsCollector = new DefaultMetricsCollector(() -> requestContext);
27
28 @BeforeClass
29 public static void init_client() throws IOException {
30 client = new MemcachedClient(
31 new BinaryConnectionFactory(),
32 AddrUtil.getAddresses(System.getProperty("memcached.svr")));
33
34 offlineClient = new MemcachedClient(
35 new BinaryConnectionFactory(),
36 AddrUtil.getAddresses("localhost:4"));
37 }
38
39 @Override
40 protected StableReadExternalCache<String> createCache(String name, ExternalCacheSettings settings, Duration lockTimeout) {
41 return createCache(name, settings, lockTimeout, client);
42 }
43
44 private StableReadExternalCache<String> createCache(String name, ExternalCacheSettings settings, Duration lockTimeout, MemcachedClient client) {
45 return metricsCollector.wrap(
46 new MemcachedStableReadExternalCache<>(
47 Utils.defaultServiceSettingsBuilder(() -> client, lockTimeout).build(),
48 () -> requestContext,
49 new Sha1ExternalCacheKeyGenerator("it-test"),
50 name,
51 StringMarshalling.pair(),
52 settings,
53 metricsCollector));
54 }
55
56 @Override
57 protected StableReadExternalCache<String> createOfflineCache(String name, ExternalCacheSettings settings, Duration lockTimeout) {
58 return createCache(name, settings, lockTimeout, offlineClient);
59 }
60
61 @Override
62 protected DirectExternalCache<String> obtainDirectCache(String name, ExternalCacheSettings settings) {
63 return new MemcachedDirectExternalCache<>(
64 Utils.defaultServiceSettingsBuilder(() -> client, Duration.ofSeconds(1)).build(),
65 () -> requestContext,
66 new Sha1ExternalCacheKeyGenerator("it-test"),
67 name,
68 StringMarshalling.pair(),
69 settings);
70 }
71
72 @Override
73 protected RequestMetrics requestMetrics() {
74 return metricsCollector.obtainRequestMetrics(requestContext);
75 }
76 }