1 package com.atlassian.vcache.internal.guava;
2
3 import com.atlassian.marshalling.api.MarshallingPair;
4 import com.atlassian.marshalling.jdk.StringMarshalling;
5 import com.atlassian.vcache.DirectExternalCache;
6 import com.atlassian.vcache.ExternalCacheSettings;
7 import com.atlassian.vcache.StableReadExternalCache;
8 import com.atlassian.vcache.internal.RequestContext;
9 import com.atlassian.vcache.internal.RequestMetrics;
10 import com.atlassian.vcache.internal.core.DefaultRequestContext;
11 import com.atlassian.vcache.internal.core.Sha1ExternalCacheKeyGenerator;
12 import com.atlassian.vcache.internal.core.cas.IdentifiedData;
13 import com.atlassian.vcache.internal.core.metrics.DefaultMetricsCollector;
14 import com.atlassian.vcache.internal.core.metrics.MetricsCollector;
15 import com.atlassian.vcache.internal.test.AbstractStableReadExternalCacheIT;
16 import com.google.common.cache.Cache;
17
18 import java.time.Duration;
19 import java.util.HashMap;
20 import java.util.Map;
21 import java.util.Optional;
22
23 public class GuavaStableReadExternalCacheIT extends AbstractStableReadExternalCacheIT {
24 private RequestContext requestContext = new DefaultRequestContext(() -> "tenant-id");
25 private Sha1ExternalCacheKeyGenerator keyGenerator = new Sha1ExternalCacheKeyGenerator("it-test");
26 private Optional<MarshallingPair<String>> marshalling = Optional.of(StringMarshalling.pair());
27 private final MetricsCollector metricsCollector = new DefaultMetricsCollector(() -> requestContext);
28
29 private Map<String, Cache<String, IdentifiedData>> delegates = new HashMap<>();
30
31 @Override
32 protected StableReadExternalCache<String> createCache(String name, ExternalCacheSettings settings, Duration lockTimeout) {
33
34 delegates.putIfAbsent(name, GuavaUtils.buildDelegate(settings));
35
36 return metricsCollector.wrap(
37 new GuavaStableReadExternalCache<>(
38 name,
39 delegates.get(name),
40 () -> requestContext,
41 keyGenerator,
42 marshalling,
43 metricsCollector,
44 lockTimeout));
45 }
46
47 @Override
48 protected DirectExternalCache<String> obtainDirectCache(String name, ExternalCacheSettings settings) {
49 return new GuavaDirectExternalCache<>(
50 name,
51 delegates.get(name),
52 () -> requestContext,
53 keyGenerator,
54 marshalling,
55 Duration.ofSeconds(1));
56 }
57
58 @Override
59 protected RequestMetrics requestMetrics() {
60 return metricsCollector.obtainRequestMetrics(requestContext);
61 }
62 }