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.ehcache.EhCacheManager;
8 import com.atlassian.cache.ehcache.replication.rmi.RMICacheReplicatorConfigFactory;
9 import com.atlassian.marshalling.api.MarshallingPair;
10 import com.atlassian.marshalling.jdk.StringMarshalling;
11 import com.atlassian.vcache.DirectExternalCache;
12 import com.atlassian.vcache.ExternalCacheSettings;
13 import com.atlassian.vcache.StableReadExternalCache;
14 import com.atlassian.vcache.internal.RequestContext;
15 import com.atlassian.vcache.internal.RequestMetrics;
16 import com.atlassian.vcache.internal.core.DefaultRequestContext;
17 import com.atlassian.vcache.internal.core.Sha1ExternalCacheKeyGenerator;
18 import com.atlassian.vcache.internal.core.cas.IdentifiedData;
19 import com.atlassian.vcache.internal.core.metrics.DefaultMetricsCollector;
20 import com.atlassian.vcache.internal.core.metrics.MetricsCollector;
21 import com.atlassian.vcache.internal.test.AbstractStableReadExternalCacheIT;
22 import net.sf.ehcache.CacheManager;
23 import org.junit.Ignore;
24
25 import java.time.Duration;
26 import java.util.Optional;
27 import java.util.concurrent.ExecutionException;
28 import java.util.concurrent.TimeUnit;
29
30 public class LegacyStableReadExternalCacheEhcacheIT extends AbstractStableReadExternalCacheIT {
31 private RequestContext requestContext = new DefaultRequestContext("tenant-id");
32 private Sha1ExternalCacheKeyGenerator keyGenerator = new Sha1ExternalCacheKeyGenerator("it-test");
33 private Optional<MarshallingPair<String>> marshalling = Optional.of(StringMarshalling.pair());
34 private final MetricsCollector metricsCollector = new DefaultMetricsCollector(() -> requestContext);
35 private CacheFactory cacheFactory;
36 {
37 final CacheManager rawEhcache = CacheManager.create();
38
39 rawEhcache.removeAllCaches();
40
41 cacheFactory = new EhCacheManager(rawEhcache, new RMICacheReplicatorConfigFactory(), null);
42 }
43
44 @Override
45 protected StableReadExternalCache<String> createCache(String name, ExternalCacheSettings settings, Duration lockTimeout) {
46 final CacheSettings legacySettings = new CacheSettingsBuilder()
47 .remote()
48 .maxEntries(settings.getEntryCountHint().get())
49 .expireAfterWrite(settings.getDefaultTtl().get().toNanos(), TimeUnit.NANOSECONDS)
50 .build();
51
52 final Cache<String, IdentifiedData> delegate = cacheFactory.getCache(name, null, legacySettings);
53 return metricsCollector.wrap(
54 new LegacyStableReadExternalCache<>(
55 delegate,
56 () -> requestContext,
57 keyGenerator,
58 marshalling,
59 new LegacyServiceSettingsBuilder().enableAvoidCasOperations().lockTimeout(lockTimeout).build(),
60 metricsCollector));
61 }
62
63 @Override
64 protected DirectExternalCache<String> obtainDirectCache(String name, ExternalCacheSettings settings) {
65 final Cache<String, IdentifiedData> delegate = cacheFactory.getCache(name);
66 return new LegacyDirectExternalCache<>(
67 delegate,
68 () -> requestContext,
69 keyGenerator,
70 marshalling,
71 new LegacyServiceSettingsBuilder().build());
72 }
73
74 @Override
75 protected RequestMetrics requestMetrics() {
76 return metricsCollector.obtainRequestMetrics(requestContext);
77 }
78
79 @Ignore("CAS Operations do not work in this configuration")
80 @Override
81 public void dual_cache_get_set() throws ExecutionException, InterruptedException {
82 }
83
84 @Ignore("CAS Operations do not work in this configuration")
85 @Override
86 public void dual_cache_get_with_supplier_take2() throws ExecutionException, InterruptedException {
87 }
88
89 @Ignore("CAS Operations do not work in this configuration")
90 @Override
91 public void getBulk_pass_and_get_reuse() throws InterruptedException {
92 }
93 }