View Javadoc

1   package com.atlassian.vcache.internal.redis;
2   
3   import com.atlassian.marshalling.jdk.JavaSerializationMarshalling;
4   import com.atlassian.vcache.DirectExternalCache;
5   import com.atlassian.vcache.ExternalCacheSettings;
6   import com.atlassian.vcache.StableReadExternalCache;
7   import com.atlassian.vcache.internal.RequestContext;
8   import com.atlassian.vcache.internal.RequestMetrics;
9   import com.atlassian.vcache.internal.core.DefaultRequestContext;
10  import com.atlassian.vcache.internal.core.Sha1ExternalCacheKeyGenerator;
11  import com.atlassian.vcache.internal.core.metrics.DefaultMetricsCollector;
12  import com.atlassian.vcache.internal.core.metrics.MetricsCollector;
13  import com.atlassian.vcache.internal.test.AbstractStableReadExternalCacheIT;
14  import org.junit.BeforeClass;
15  import redis.clients.jedis.JedisPool;
16  import redis.clients.jedis.JedisPoolConfig;
17  
18  import java.io.IOException;
19  import java.net.URI;
20  import java.net.URISyntaxException;
21  import java.time.Duration;
22  
23  public class RedisStableReadExternalCacheIT extends AbstractStableReadExternalCacheIT {
24      private static JedisPool jedisPool;
25      private RequestContext requestContext = new DefaultRequestContext("tenant-id");
26      private final MetricsCollector metricsCollector = new DefaultMetricsCollector(() -> requestContext);
27  
28      @BeforeClass
29      public static void init_client() throws IOException, URISyntaxException {
30          final JedisPoolConfig poolConfig = new JedisPoolConfig();
31          poolConfig.setMaxTotal(1); // only allow one connection to check for connection leaks
32          jedisPool = new JedisPool(poolConfig, new URI(System.getProperty("redis.svr")));
33      }
34  
35      @Override
36      protected StableReadExternalCache<String> createCache(String name, ExternalCacheSettings settings, Duration lockTimeout) {
37          return metricsCollector.wrap(
38                  new RedisStableReadExternalCache<>(
39                          jedisPool::getResource,
40                          () -> requestContext,
41                          new Sha1ExternalCacheKeyGenerator("redis-test"),
42                          name,
43                          JavaSerializationMarshalling.pair(String.class),
44                          settings,
45                          metricsCollector,
46                          lockTimeout));
47      }
48  
49      @Override
50      protected DirectExternalCache<String> obtainDirectCache(String name, ExternalCacheSettings settings) {
51          return new RedisDirectExternalCache<>(
52                  jedisPool::getResource,
53                  () -> requestContext,
54                  new Sha1ExternalCacheKeyGenerator("redis-test"),
55                  name,
56                  JavaSerializationMarshalling.pair(String.class),
57                  settings,
58                  Duration.ofSeconds(1));
59      }
60  
61      @Override
62      protected RequestMetrics requestMetrics() {
63          return metricsCollector.obtainRequestMetrics(requestContext);
64      }
65  }