View Javadoc

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  }