diff --git a/src/main/java/redis/clients/jedis/Connection.java b/src/main/java/redis/clients/jedis/Connection.java index 96ddac20c8..9bffd71644 100644 --- a/src/main/java/redis/clients/jedis/Connection.java +++ b/src/main/java/redis/clients/jedis/Connection.java @@ -467,8 +467,8 @@ private void initializeFromClientConfig(final JedisClientConfig config) { } } - // set readonly flag to ALL connections (including master nodes) when enable read from replica - if (config.isReadOnlyForReplica()) { + // set READONLY flag to ALL connections (including master nodes) when enable read from replica + if (config.isReadOnlyForRedisClusterReplicas()) { fireAndForgetMsg.add(new CommandArguments(Command.READONLY)); } diff --git a/src/main/java/redis/clients/jedis/DefaultJedisClientConfig.java b/src/main/java/redis/clients/jedis/DefaultJedisClientConfig.java index 98fa4677d8..f26513fa58 100644 --- a/src/main/java/redis/clients/jedis/DefaultJedisClientConfig.java +++ b/src/main/java/redis/clients/jedis/DefaultJedisClientConfig.java @@ -26,13 +26,13 @@ public final class DefaultJedisClientConfig implements JedisClientConfig { private final ClientSetInfoConfig clientSetInfoConfig; - private final boolean readOnlyForReplica; + private final boolean readOnlyForRedisClusterReplicas; private DefaultJedisClientConfig(RedisProtocol protocol, int connectionTimeoutMillis, int soTimeoutMillis, int blockingSocketTimeoutMillis, Supplier credentialsProvider, int database, String clientName, boolean ssl, SSLSocketFactory sslSocketFactory, SSLParameters sslParameters, HostnameVerifier hostnameVerifier, HostAndPortMapper hostAndPortMapper, - ClientSetInfoConfig clientSetInfoConfig, boolean readOnlyForReplica) { + ClientSetInfoConfig clientSetInfoConfig, boolean readOnlyForRedisClusterReplicas) { this.redisProtocol = protocol; this.connectionTimeoutMillis = connectionTimeoutMillis; this.socketTimeoutMillis = soTimeoutMillis; @@ -46,7 +46,7 @@ private DefaultJedisClientConfig(RedisProtocol protocol, int connectionTimeoutMi this.hostnameVerifier = hostnameVerifier; this.hostAndPortMapper = hostAndPortMapper; this.clientSetInfoConfig = clientSetInfoConfig; - this.readOnlyForReplica = readOnlyForReplica; + this.readOnlyForRedisClusterReplicas = readOnlyForRedisClusterReplicas; } @Override @@ -126,8 +126,8 @@ public ClientSetInfoConfig getClientSetInfoConfig() { } @Override - public boolean isReadOnlyForReplica() { - return readOnlyForReplica; + public boolean isReadOnlyForRedisClusterReplicas() { + return readOnlyForRedisClusterReplicas; } public static Builder builder() { @@ -157,7 +157,7 @@ public static class Builder { private ClientSetInfoConfig clientSetInfoConfig = ClientSetInfoConfig.DEFAULT; - private boolean readOnlyForReplicas = false; + private boolean readOnlyForRedisClusterReplicas = false; private Builder() { } @@ -171,7 +171,7 @@ public DefaultJedisClientConfig build() { return new DefaultJedisClientConfig(redisProtocol, connectionTimeoutMillis, socketTimeoutMillis, blockingSocketTimeoutMillis, credentialsProvider, database, clientName, ssl, sslSocketFactory, sslParameters, hostnameVerifier, hostAndPortMapper, clientSetInfoConfig, - readOnlyForReplicas); + readOnlyForRedisClusterReplicas); } /** @@ -267,8 +267,8 @@ public Builder clientSetInfoConfig(ClientSetInfoConfig setInfoConfig) { return this; } - public Builder readOnlyForReplicas() { - this.readOnlyForReplicas = true; + public Builder readOnlyForRedisClusterReplicas() { + this.readOnlyForRedisClusterReplicas = true; return this; } } @@ -290,6 +290,6 @@ public static DefaultJedisClientConfig copyConfig(JedisClientConfig copy) { copy.getBlockingSocketTimeoutMillis(), copy.getCredentialsProvider(), copy.getDatabase(), copy.getClientName(), copy.isSsl(), copy.getSslSocketFactory(), copy.getSslParameters(), copy.getHostnameVerifier(), copy.getHostAndPortMapper(), - copy.getClientSetInfoConfig(), copy.isReadOnlyForReplica()); + copy.getClientSetInfoConfig(), copy.isReadOnlyForRedisClusterReplicas()); } } diff --git a/src/main/java/redis/clients/jedis/JedisClientConfig.java b/src/main/java/redis/clients/jedis/JedisClientConfig.java index 57b172cb34..abe1f35237 100644 --- a/src/main/java/redis/clients/jedis/JedisClientConfig.java +++ b/src/main/java/redis/clients/jedis/JedisClientConfig.java @@ -58,7 +58,7 @@ default String getClientName() { } /** - * @return true - to create a TLS connection. false - otherwise. + * @return {@code true} - to create TLS connection(s). {@code false} - otherwise. */ default boolean isSsl() { return false; @@ -80,7 +80,14 @@ default HostAndPortMapper getHostAndPortMapper() { return null; } - default boolean isReadOnlyForReplica() { + /** + * Execute READONLY command to connections. + *

+ * READONLY command is specific to Redis Cluster replica nodes. So this config param is only + * intended for Redis Cluster connections. + * @return {@code true} - to execute READONLY command to connection(s). {@code false} - otherwise. + */ + default boolean isReadOnlyForRedisClusterReplicas() { return false; } diff --git a/src/main/java/redis/clients/jedis/JedisClusterInfoCache.java b/src/main/java/redis/clients/jedis/JedisClusterInfoCache.java index 79be093ffb..2c4ea3b3c5 100644 --- a/src/main/java/redis/clients/jedis/JedisClusterInfoCache.java +++ b/src/main/java/redis/clients/jedis/JedisClusterInfoCache.java @@ -86,7 +86,7 @@ public JedisClusterInfoCache(final JedisClientConfig clientConfig, topologyRefreshExecutor.scheduleWithFixedDelay(new TopologyRefreshTask(), topologyRefreshPeriod.toMillis(), topologyRefreshPeriod.toMillis(), TimeUnit.MILLISECONDS); } - if (clientConfig.isReadOnlyForReplica()) { + if (clientConfig.isReadOnlyForRedisClusterReplicas()) { replicaSlots = new ArrayList[Protocol.CLUSTER_HASHSLOTS]; } else { replicaSlots = null; @@ -150,7 +150,7 @@ public void discoverClusterNodesAndSlots(Connection jedis) { setupNodeIfNotExist(targetNode); if (i == MASTER_NODE_INDEX) { assignSlotsToNode(slotNums, targetNode); - } else if (clientConfig.isReadOnlyForReplica()) { + } else if (clientConfig.isReadOnlyForRedisClusterReplicas()) { assignSlotsToReplicaNode(slotNums, targetNode); } } @@ -244,7 +244,7 @@ private void discoverClusterSlots(Connection jedis) { setupNodeIfNotExist(targetNode); if (i == MASTER_NODE_INDEX) { assignSlotsToNode(slotNums, targetNode); - } else if (clientConfig.isReadOnlyForReplica()) { + } else if (clientConfig.isReadOnlyForRedisClusterReplicas()) { assignSlotsToReplicaNode(slotNums, targetNode); } } diff --git a/src/test/java/redis/clients/jedis/JedisClusterTest.java b/src/test/java/redis/clients/jedis/JedisClusterTest.java index 2308bb4b07..6ebec4e73f 100644 --- a/src/test/java/redis/clients/jedis/JedisClusterTest.java +++ b/src/test/java/redis/clients/jedis/JedisClusterTest.java @@ -211,8 +211,8 @@ public void testReadFromReplicas() throws Exception { } } - DefaultJedisClientConfig READ_REPLICAS_CLIENT_CONFIG - = DefaultJedisClientConfig.builder().password("cluster").readOnlyForReplicas().build(); + DefaultJedisClientConfig READ_REPLICAS_CLIENT_CONFIG = DefaultJedisClientConfig.builder() + .password("cluster").readOnlyForRedisClusterReplicas().build(); ClusterCommandObjects commandObjects = new ClusterCommandObjects(); try (JedisCluster jedisCluster = new JedisCluster(nodeInfo1, READ_REPLICAS_CLIENT_CONFIG, DEFAULT_REDIRECTIONS, DEFAULT_POOL_CONFIG)) {