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.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  import net.sf.ehcache.CacheManager;
22  import org.junit.Ignore;
23  
24  import java.util.Optional;
25  import java.util.concurrent.ExecutionException;
26  import java.util.concurrent.TimeUnit;
27  
28  public class LegacyStableReadExternalCacheEhcacheIT extends AbstractStableReadExternalCacheIT {
29      private RequestContext requestContext = new DefaultRequestContext("tenant-id");
30      private Sha1ExternalCacheKeyGenerator keyGenerator = new Sha1ExternalCacheKeyGenerator("it-test");
31      private Optional<MarshallingPair<String>> marshalling = Optional.of(StringMarshalling.pair());
32      private final MetricsCollector metricsCollector = new DefaultMetricsCollector(() -> requestContext);
33      private CacheFactory cacheFactory;
34      {
35          final CacheManager rawEhcache = CacheManager.create();
36          // Make sure we are not getting old caches for our test.
37          rawEhcache.removeAllCaches();
38  
39          cacheFactory = new EhCacheManager(rawEhcache, new RMICacheReplicatorConfigFactory(), null);
40      }
41  
42      @Override
43      protected StableReadExternalCache<String> createCache(String name, ExternalCacheSettings settings) {
44          final CacheSettings legacySettings = new CacheSettingsBuilder()
45                  .remote()
46                  .maxEntries(settings.getEntryCountHint().get())
47                  .expireAfterWrite(settings.getDefaultTtl().get().toNanos(), TimeUnit.NANOSECONDS)
48                  .build();
49  
50          final Cache<String, IdentifiedData> delegate = cacheFactory.getCache(name, null, legacySettings);
51          return new LegacyStableReadExternalCache<>(
52                  delegate,
53                  () -> requestContext,
54                  keyGenerator,
55                  marshalling,
56                  new LegacyServiceSettingsBuilder().enableAvoidCasOperations().build(),
57                  metricsCollector);
58      }
59  
60      @Override
61      protected DirectExternalCache<String> obtainDirectCache(String name, ExternalCacheSettings settings) {
62          final Cache<String, IdentifiedData> delegate = cacheFactory.getCache(name);
63          return new LegacyDirectExternalCache<>(
64                  delegate,
65                  () -> requestContext,
66                  keyGenerator,
67                  marshalling,
68                  new LegacyServiceSettingsBuilder().build());
69      }
70  
71      @Ignore("CAS Operations do not work in this configuration")
72      @Override
73      public void dual_cache_get_set() throws ExecutionException, InterruptedException {
74      }
75  
76      @Ignore("CAS Operations do not work in this configuration")
77      @Override
78      public void dual_cache_get_with_supplier_take2() throws ExecutionException, InterruptedException {
79      }
80  }