View Javadoc

1   package com.atlassian.vcache.internal.legacy;
2   
3   import com.atlassian.cache.Cache;
4   import com.atlassian.cache.CacheFactory;
5   import com.atlassian.cache.CacheSettings;
6   import com.atlassian.cache.CacheSettingsBuilder;
7   import com.atlassian.cache.memory.MemoryCacheManager;
8   import com.atlassian.marshalling.api.MarshallingPair;
9   import com.atlassian.marshalling.jdk.StringMarshalling;
10  import com.atlassian.vcache.DirectExternalCache;
11  import com.atlassian.vcache.ExternalCacheSettings;
12  import com.atlassian.vcache.StableReadExternalCache;
13  import com.atlassian.vcache.internal.RequestContext;
14  import com.atlassian.vcache.internal.RequestMetrics;
15  import com.atlassian.vcache.internal.core.DefaultRequestContext;
16  import com.atlassian.vcache.internal.core.Sha1ExternalCacheKeyGenerator;
17  import com.atlassian.vcache.internal.core.cas.IdentifiedData;
18  import com.atlassian.vcache.internal.core.metrics.DefaultMetricsCollector;
19  import com.atlassian.vcache.internal.core.metrics.MetricsCollector;
20  import com.atlassian.vcache.internal.test.AbstractStableReadExternalCacheIT;
21  
22  import java.time.Duration;
23  import java.util.Optional;
24  import java.util.concurrent.TimeUnit;
25  
26  public class LegacyStableReadExternalCacheIT extends AbstractStableReadExternalCacheIT {
27      private RequestContext requestContext = new DefaultRequestContext("tenant-id");
28      private CacheFactory cacheFactory = new MemoryCacheManager();
29      private Sha1ExternalCacheKeyGenerator keyGenerator = new Sha1ExternalCacheKeyGenerator("it-test");
30      private Optional<MarshallingPair<String>> marshalling = Optional.of(StringMarshalling.pair());
31      private final MetricsCollector metricsCollector = new DefaultMetricsCollector(() -> requestContext);
32  
33      @Override
34      protected StableReadExternalCache<String> createCache(String name, ExternalCacheSettings settings, Duration lockTimeout) {
35          final CacheSettings legacySettings = new CacheSettingsBuilder()
36                  .remote()
37                  .maxEntries(settings.getEntryCountHint().get())
38                  .expireAfterWrite(settings.getDefaultTtl().get().toNanos(), TimeUnit.NANOSECONDS)
39                  .build();
40  
41          final Cache<String, IdentifiedData> delegate = cacheFactory.getCache(name, null, legacySettings);
42          return metricsCollector.wrap(
43                  new LegacyStableReadExternalCache<>(
44                          delegate,
45                          () -> requestContext,
46                          keyGenerator,
47                          marshalling,
48                          new LegacyServiceSettingsBuilder().lockTimeout(lockTimeout).build(),
49                          metricsCollector));
50      }
51  
52      @Override
53      protected DirectExternalCache<String> obtainDirectCache(String name, ExternalCacheSettings settings) {
54          final Cache<String, IdentifiedData> delegate = cacheFactory.getCache(name);
55          return new LegacyDirectExternalCache<>(
56                  delegate,
57                  () -> requestContext,
58                  keyGenerator,
59                  marshalling,
60                  new LegacyServiceSettingsBuilder().build());
61      }
62  
63      @Override
64      protected RequestMetrics requestMetrics() {
65          return metricsCollector.obtainRequestMetrics(requestContext);
66      }
67  }