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.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          // Make sure we are not getting old caches for our test.
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  }