DATAREDIS-794 - Improve Jedis Cluster Topology caching.
We now made JedisClusterTopologyProvider public and configurable through overriding JedisConnectionFactory.createTopologyProvider(…). The topology provider accepts a configurable timeout to configure the cache timeout. Alternatively, custom ClusterTopologyProvider implementations can be returned through JedisConnectionFactory.createTopologyProvider(…). Original Pull Request: #383
This commit is contained in:
committed by
Christoph Strobl
parent
a0e3dca1e4
commit
34bcd46620
@@ -30,6 +30,7 @@ import redis.clients.jedis.JedisPool;
|
||||
import redis.clients.jedis.exceptions.JedisConnectionException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.Duration;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
@@ -370,6 +371,32 @@ public class JedisClusterConnectionUnitTests {
|
||||
connection.set("foo".getBytes(), "bar".getBytes());
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-794
|
||||
public void clusterTopologyProviderShouldUseCachedTopology() {
|
||||
|
||||
when(clusterMock.getClusterNodes()).thenReturn(Collections.singletonMap("mock", node1PoolMock));
|
||||
when(con1Mock.clusterNodes()).thenReturn(CLUSTER_NODES_RESPONSE);
|
||||
|
||||
JedisClusterTopologyProvider provider = new JedisClusterTopologyProvider(clusterMock, Duration.ofSeconds(5));
|
||||
provider.getTopology();
|
||||
provider.getTopology();
|
||||
|
||||
verify(con1Mock).clusterNodes();
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-794
|
||||
public void clusterTopologyProviderShouldRequestTopology() {
|
||||
|
||||
when(clusterMock.getClusterNodes()).thenReturn(Collections.singletonMap("mock", node1PoolMock));
|
||||
when(con1Mock.clusterNodes()).thenReturn(CLUSTER_NODES_RESPONSE);
|
||||
|
||||
JedisClusterTopologyProvider provider = new JedisClusterTopologyProvider(clusterMock, Duration.ZERO);
|
||||
provider.getTopology();
|
||||
provider.getTopology();
|
||||
|
||||
verify(con1Mock, times(2)).clusterNodes();
|
||||
}
|
||||
|
||||
static class StubJedisCluster extends JedisCluster {
|
||||
|
||||
JedisClusterConnectionHandler connectionHandler;
|
||||
|
||||
@@ -309,8 +309,9 @@ public class JedisConnectionFactoryUnitTests {
|
||||
private JedisConnectionFactory initSpyedConnectionFactory(RedisClusterConfiguration clusterConfig,
|
||||
JedisPoolConfig poolConfig) {
|
||||
|
||||
JedisCluster clusterMock = mock(JedisCluster.class);
|
||||
JedisConnectionFactory factorySpy = spy(new JedisConnectionFactory(clusterConfig));
|
||||
doReturn(null).when(factorySpy).createCluster(any(RedisClusterConfiguration.class),
|
||||
doReturn(clusterMock).when(factorySpy).createCluster(any(RedisClusterConfiguration.class),
|
||||
any(GenericObjectPoolConfig.class));
|
||||
doReturn(null).when(factorySpy).createRedisPool();
|
||||
return factorySpy;
|
||||
|
||||
Reference in New Issue
Block a user