From 2d56eaf3c6ff019e66388c0793bf0f3cb01170a3 Mon Sep 17 00:00:00 2001 From: Manousos Mathioudakis Date: Mon, 22 Mar 2021 16:29:48 +0200 Subject: [PATCH] Add support for CONFIG REWRITE. Signed-off-by: Manousos Mathioudakis Closes #1992 Original pull request: #2012. --- pom.xml | 4 +++- .../data/redis/connection/DefaultStringRedisConnection.java | 5 +++++ .../data/redis/connection/RedisServerCommands.java | 5 +++++ .../data/redis/connection/jedis/JedisClusterConnection.java | 5 +++++ .../redis/connection/jedis/JedisClusterServerCommands.java | 6 ++++++ .../data/redis/connection/jedis/JedisConnection.java | 4 ++++ .../data/redis/connection/jedis/JedisServerCommands.java | 5 +++++ .../data/redis/connection/lettuce/LettuceConnection.java | 5 +++++ .../redis/connection/lettuce/LettuceServerCommands.java | 5 +++++ .../data/redis/connection/RedisConnectionUnitTests.java | 5 +++++ 10 files changed, 48 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 74369f5ab..8bcad09b5 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,7 @@ - + 4.0.0 diff --git a/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java b/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java index 83d57d2ae..d85d8dedd 100644 --- a/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java @@ -3731,6 +3731,11 @@ public class DefaultStringRedisConnection implements StringRedisConnection, Deco delegate.migrate(key, target, dbIndex, option, timeout); } + @Override + public void rewriteConfig() { + delegate.rewriteConfig(); + } + /* * (non-Javadoc) * @see org.springframework.data.redis.connection.StringRedisConnection#xAck(java.lang.String, java.lang.String, RecordId[]) diff --git a/src/main/java/org/springframework/data/redis/connection/RedisServerCommands.java b/src/main/java/org/springframework/data/redis/connection/RedisServerCommands.java index c9b7041be..799b5e0e2 100644 --- a/src/main/java/org/springframework/data/redis/connection/RedisServerCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/RedisServerCommands.java @@ -280,4 +280,9 @@ public interface RedisServerCommands { * @see Redis Documentation: MIGRATE */ void migrate(byte[] key, RedisNode target, int dbIndex, @Nullable MigrateOption option, long timeout); + + /** + * Rewrites the redis.conf file. + */ + void rewriteConfig(); } diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterConnection.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterConnection.java index 76926df04..6bd6fcbfa 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterConnection.java @@ -869,6 +869,11 @@ public class JedisClusterConnection implements DefaultedRedisClusterConnection { throw new UnsupportedOperationException("Sentinel is currently not supported for JedisClusterConnection."); } + @Override + public void rewriteConfig() { + serverCommands().rewriteConfig(); + } + /** * {@link Jedis} specific {@link ClusterCommandCallback}. * diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterServerCommands.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterServerCommands.java index 14c5c25c1..075f9feed 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterServerCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterServerCommands.java @@ -520,6 +520,12 @@ class JedisClusterServerCommands implements RedisClusterServerCommands { node); } + @Override + public void rewriteConfig() { + connection.getClusterCommandExecutor() + .executeCommandOnAllNodes((JedisClusterCommandCallback) client -> client.configRewrite()); + } + private Long convertListOfStringToTime(List serverTimeInformation, TimeUnit timeUnit) { Assert.notEmpty(serverTimeInformation, "Received invalid result from server. Expected 2 items in collection."); diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnection.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnection.java index 22ab9a0b3..d0f11227c 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnection.java @@ -806,4 +806,8 @@ public class JedisConnection extends AbstractRedisConnection { } } + @Override + public void rewriteConfig() { + serverCommands().rewriteConfig(); + } } diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisServerCommands.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisServerCommands.java index a5db0aa56..b8c0c319a 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisServerCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisServerCommands.java @@ -317,6 +317,11 @@ class JedisServerCommands implements RedisServerCommands { target.getPort(), key, dbIndex, timeoutToUse); } + @Override + public void rewriteConfig() { + connection.invokeStatus().just(Jedis::configRewrite); + } + private boolean isPipelined() { return connection.isPipelined(); } diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java index 708344cc2..f8eff3c15 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java @@ -137,6 +137,11 @@ public class LettuceConnection extends AbstractRedisConnection { return LettuceResultBuilder. forResponse(resultHolder).buildStatusResult(); } + @Override + public void rewriteConfig() { + serverCommands().rewriteConfig(); + } + private class LettuceTransactionResultConverter extends TransactionResultConverter { public LettuceTransactionResultConverter(Queue> txResults, Converter exceptionConverter) { diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceServerCommands.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceServerCommands.java index 67555c4c4..5294e0d8e 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceServerCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceServerCommands.java @@ -304,6 +304,11 @@ class LettuceServerCommands implements RedisServerCommands { connection.invoke().just(RedisKeyAsyncCommands::migrate, target.getHost(), target.getPort(), key, dbIndex, timeout); } + @Override + public void rewriteConfig() { + connection.invoke().just(RedisServerAsyncCommands::configRewrite); + } + public RedisClusterCommands getConnection() { return connection.getConnection(); } diff --git a/src/test/java/org/springframework/data/redis/connection/RedisConnectionUnitTests.java b/src/test/java/org/springframework/data/redis/connection/RedisConnectionUnitTests.java index 76e5252de..4f730ced5 100644 --- a/src/test/java/org/springframework/data/redis/connection/RedisConnectionUnitTests.java +++ b/src/test/java/org/springframework/data/redis/connection/RedisConnectionUnitTests.java @@ -983,6 +983,11 @@ class RedisConnectionUnitTests { delegate.migrate(key, target, dbIndex, option, timeout); } + @Override + public void rewriteConfig() { + delegate.rewriteConfig(); + } + @Override public Boolean set(byte[] key, byte[] value, Expiration expiration, SetOption options) { return delegate.set(key, value, expiration, options);