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.TransactionalExternalCache;
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.DefaultTransactionControlManager;
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.AbstractTransactionalExternalCacheIT;
22  import net.sf.ehcache.CacheManager;
23  import org.junit.Before;
24  import org.junit.Ignore;
25  
26  import java.util.Optional;
27  import java.util.concurrent.CompletionStage;
28  import java.util.concurrent.TimeUnit;
29  
30  import static com.atlassian.vcache.internal.test.CompletionStageSuccessful.successful;
31  import static org.hamcrest.MatcherAssert.assertThat;
32  
33  public class LegacyTransactionalExternalCacheEhcacheIT extends AbstractTransactionalExternalCacheIT {
34      private RequestContext requestContext = new DefaultRequestContext(() -> "tenant-id");
35      private Sha1ExternalCacheKeyGenerator keyGenerator = new Sha1ExternalCacheKeyGenerator("it-test");
36      private Optional<MarshallingPair<String>> marshalling = Optional.of(StringMarshalling.pair());
37      private final MetricsCollector metricsCollector = new DefaultMetricsCollector(() -> requestContext);
38  
39      private CacheFactory cacheFactory;
40      {
41          final CacheManager rawEhcache = CacheManager.create();
42          // Make sure we are not getting old caches for our test.
43          rawEhcache.removeAllCaches();
44  
45          cacheFactory = new EhCacheManager(rawEhcache, new RMICacheReplicatorConfigFactory(), null);
46      }
47  
48      private LegacyTransactionalExternalCache<String> cache;
49      private TransactionalExternalCache<String> wrappedCache;
50      private LegacyDirectExternalCache<String> directCache;
51  
52      @Override
53      protected TransactionalExternalCache<String> cache() {
54          return wrappedCache;
55      }
56  
57      @Override
58      protected DirectExternalCache<String> directCache() {
59          return directCache;
60      }
61  
62      @Override
63      protected void directCacheRefresh() {
64          // nothing to do
65      }
66  
67      @Override
68      protected void cacheTransactionSync() {
69          cache.transactionSync();
70      }
71  
72      @Override
73      protected void cacheTransactionDiscard() {
74          cache.transactionDiscard();
75      }
76  
77      @Override
78      protected RequestMetrics requestMetrics() {
79          return metricsCollector.obtainRequestMetrics(requestContext);
80      }
81  
82      @Before
83      public void ensureCache() {
84          final CacheSettings legacySettings = new CacheSettingsBuilder()
85                  .remote()
86                  .maxEntries(1000)
87                  .expireAfterWrite(60, TimeUnit.SECONDS)
88                  .build();
89  
90          final Cache<String, IdentifiedData> delegate = cacheFactory.getCache(CACHE_NAME, null, legacySettings);
91          cache = new LegacyTransactionalExternalCache<>(
92                  delegate,
93                  () -> requestContext,
94                  keyGenerator,
95                  marshalling,
96                  new DefaultTransactionControlManager(metricsCollector, context -> {}),
97                  new LegacyServiceSettingsBuilder().enableAvoidCasOperations().build(),
98                  metricsCollector);
99          wrappedCache = metricsCollector.wrap(cache);
100 
101         directCache = new LegacyDirectExternalCache<>(
102                 delegate,
103                 () -> requestContext,
104                 keyGenerator,
105                 marshalling,
106                 new LegacyServiceSettingsBuilder().enableAvoidCasOperations().build());
107 
108         // Start from a clean slate
109         final CompletionStage<Void> rm = directCache.removeAll();
110         assertThat(rm, successful());
111     }
112 
113     @Ignore("CAS operations not supported")
114     @Override
115     public void put_get_sync_unsuccessful2() throws Exception {
116     }
117 
118     @Ignore("CAS operations not supported")
119     @Override
120     public void getBulk_getBulkFunction_directPut_sync() throws Exception {
121     }
122 }