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 }