Reputation: 2679
I'm using lettuce client version 6.2.0 to connect to a Redis cluster (v 6.2) with 3 masters each having 1 replica. I'm trying that the client re-discovers the cluster topology after a master goes down. Here is the client code I have:
List<RedisURI> redisURIs = new ArrayList<>();
redisURIs.add(RedisURI.create("redis://127.0.0.1:7000"));
redisURIs.add(RedisURI.create("redis://127.0.0.1:7001"));
redisURIs.add(RedisURI.create("redis://127.0.0.1:7002"));
redisURIs.add(RedisURI.create("redis://127.0.0.1:7003"));
redisURIs.add(RedisURI.create("redis://127.0.0.1:7004"));
redisURIs.add(RedisURI.create("redis://127.0.0.1:7005"));
ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
.enableAllAdaptiveRefreshTriggers()
.refreshTriggersReconnectAttempts(1)
.enablePeriodicRefresh(Duration.ofSeconds(5))
.build();
ClusterClientOptions clientOptions = ClusterClientOptions.builder()
.autoReconnect(true).topologyRefreshOptions(topologyRefreshOptions).build();
ClientResources clientResources = ClientResources.builder().reconnectDelay(Delay.equalJitter()).build();
RedisClusterClient clusterClient = RedisClusterClient.create(clientResources, redisURIs);
clusterClient.setOptions(clientOptions);
The problem is that despite the setting enablePeriodicRefresh(Duration.ofSeconds(5))
the refresh interval is still taken as 60 seconds, instead of 5 seconds. Till 1 minute after a master goes down, the client stops working, i.e. it is not able to issue incr
operation through clusterClient
and the error keeps repeating:
Jul 18, 2022 5:56:21 PM io.lettuce.core.protocol.ConnectionWatchdog lambda$run$4
WARNING: Cannot reconnect to [127.0.0.1:7000]: Connection refused: /127.0.0.1:7000
After 1 minute timeout, it shows the warning message:
Jul 18, 2022 5:56:22 PM io.lettuce.core.cluster.topology.DefaultClusterTopologyRefresh lambda$openConnections$12
WARNING: Unable to connect to [127.0.0.1:7000]: Connection refused: /127.0.0.1:7000
Command timed out after 1 minute(s)
..and then it is able to proceed with commands. Even after that, it keeps showing the warning message:
Jul 18, 2022 5:56:27 PM io.lettuce.core.cluster.topology.DefaultClusterTopologyRefresh lambda$openConnections$12
WARNING: Unable to connect to [127.0.0.1:7000]: Connection refused: /127.0.0.1:7000
What am I missing here?
Upvotes: 0
Views: 4998
Reputation: 11
The enablePeriodicRefresh() setting works after the connection timeout. You don't set the connection timeout, but it defaults to 60sec. Adjusting the connection timeout will give you the desired result.
ex) redisURIs.add(RedisURI.create("redis://127.0.0.1:7000/0?timeout=10s"));
Upvotes: 1