DATAREDIS-1190 - Cluster rename now correctly overwrites existing keys.

rename(…) behavior in cluster-mode is now aligned with standalone Redis behavior that overwrites the target key if it already exists and the renamed key uses a different slot. Previously, the underlying restore command was called without the replace option which caused BUSYKEY failures.

Original Pull Request: #555
This commit is contained in:
Mark Paluch
2020-08-10 11:43:57 +02:00
committed by Christoph Strobl
parent 0929ddbdcd
commit e37f2f08ee
5 changed files with 29 additions and 2 deletions

View File

@@ -413,6 +413,9 @@ public interface ClusterConnectionTests {
// DATAREDIS-315
void rename();
// DATAREDIS-1190
void renameShouldOverwriteTargetKey();
// DATAREDIS-315
void renameNXWhenOnSameSlot();

View File

@@ -1421,6 +1421,18 @@ public class JedisClusterConnectionTests implements ClusterConnectionTests {
assertThat(nativeConnection.get(KEY_2_BYTES)).isEqualTo(VALUE_1_BYTES);
}
@Test // DATAREDIS-1190
public void renameShouldOverwriteTargetKey() {
nativeConnection.set(KEY_1_BYTES, VALUE_1_BYTES);
nativeConnection.set(KEY_2_BYTES, VALUE_2_BYTES);
clusterConnection.rename(KEY_1_BYTES, KEY_2_BYTES);
assertThat(nativeConnection.exists(KEY_1_BYTES)).isFalse();
assertThat(nativeConnection.get(KEY_2_BYTES)).isEqualTo(VALUE_1_BYTES);
}
@Test // DATAREDIS-315
public void renameNXWhenOnSameSlot() {

View File

@@ -1437,6 +1437,18 @@ public class LettuceClusterConnectionTests implements ClusterConnectionTests {
assertThat(nativeConnection.get(KEY_2)).isEqualTo(VALUE_1);
}
@Test // DATAREDIS-1190
public void renameShouldOverwriteTargetKey() {
nativeConnection.set(KEY_1, VALUE_1);
nativeConnection.set(KEY_2, VALUE_2);
clusterConnection.rename(KEY_1_BYTES, KEY_2_BYTES);
assertThat(nativeConnection.exists(KEY_1)).isEqualTo(0L);
assertThat(nativeConnection.get(KEY_2)).isEqualTo(VALUE_1);
}
@Test // DATAREDIS-315
public void renameNXWhenOnSameSlot() {