diff --git a/src/main/java/org/springframework/data/redis/connection/RedisConfiguration.java b/src/main/java/org/springframework/data/redis/connection/RedisConfiguration.java
index 7d0b58fb8..bb5c191b4 100644
--- a/src/main/java/org/springframework/data/redis/connection/RedisConfiguration.java
+++ b/src/main/java/org/springframework/data/redis/connection/RedisConfiguration.java
@@ -95,10 +95,10 @@ public interface RedisConfiguration {
/**
* @param configuration can be {@literal null}.
- * @return {@code true} if given {@link RedisConfiguration} is instance of {@link StaticMasterSlaveConfiguration}.
+ * @return {@code true} if given {@link RedisConfiguration} is instance of {@link StaticMasterReplicaConfiguration}.
*/
- static boolean isStaticMasterSlaveConfiguration(@Nullable RedisConfiguration configuration) {
- return configuration instanceof StaticMasterSlaveConfiguration;
+ static boolean isStaticMasterReplicaConfiguration(@Nullable RedisConfiguration configuration) {
+ return configuration instanceof StaticMasterReplicaConfiguration;
}
/**
@@ -323,12 +323,14 @@ public interface RedisConfiguration {
}
/**
- * Configuration interface suitable for Redis master/slave environments with fixed hosts.
+ * Configuration interface suitable for Redis master/slave environments with fixed hosts.
+ * Redis is undergoing a nomenclature change where the term replica is used synonymously to slave.
*
* @author Christoph Strobl
+ * @author Mark Paluch
* @since 2.1
*/
- interface StaticMasterSlaveConfiguration extends WithDatabaseIndex, WithPassword {
+ interface StaticMasterReplicaConfiguration extends WithDatabaseIndex, WithPassword {
/**
* @return unmodifiable {@link List} of {@link RedisStandaloneConfiguration nodes}.
diff --git a/src/main/java/org/springframework/data/redis/connection/RedisStaticMasterSlaveConfiguration.java b/src/main/java/org/springframework/data/redis/connection/RedisStaticMasterReplicaConfiguration.java
similarity index 80%
rename from src/main/java/org/springframework/data/redis/connection/RedisStaticMasterSlaveConfiguration.java
rename to src/main/java/org/springframework/data/redis/connection/RedisStaticMasterReplicaConfiguration.java
index 4bf2e9ec4..9655b663f 100644
--- a/src/main/java/org/springframework/data/redis/connection/RedisStaticMasterSlaveConfiguration.java
+++ b/src/main/java/org/springframework/data/redis/connection/RedisStaticMasterReplicaConfiguration.java
@@ -19,19 +19,20 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import org.springframework.data.redis.connection.RedisConfiguration.StaticMasterSlaveConfiguration;
+import org.springframework.data.redis.connection.RedisConfiguration.StaticMasterReplicaConfiguration;
import org.springframework.util.Assert;
/**
* Configuration class used for setting up {@link RedisConnection} via {@link RedisConnectionFactory} using the provided
- * Master / Slave configuration to nodes know to not change address. Eg. when connecting to
- * AWS ElastiCache with Read Replicas .
+ * Master / Replica configuration to nodes know to not change address. Eg. when connecting to
+ * AWS ElastiCache with Read Replicas.
+ * Note: Redis is undergoing a nomenclature change where the term replica is used synonymously to slave.
*
* @author Mark Paluch
* @author Christoph Strobl
* @since 2.1
*/
-public class RedisStaticMasterSlaveConfiguration implements RedisConfiguration, StaticMasterSlaveConfiguration {
+public class RedisStaticMasterReplicaConfiguration implements RedisConfiguration, StaticMasterReplicaConfiguration {
private static final int DEFAULT_PORT = 6379;
@@ -40,21 +41,21 @@ public class RedisStaticMasterSlaveConfiguration implements RedisConfiguration,
private RedisPassword password = RedisPassword.none();
/**
- * Create a new {@link StaticMasterSlaveConfiguration} given {@code hostName}.
+ * Create a new {@link StaticMasterReplicaConfiguration} given {@code hostName}.
*
* @param hostName must not be {@literal null} or empty.
*/
- public RedisStaticMasterSlaveConfiguration(String hostName) {
+ public RedisStaticMasterReplicaConfiguration(String hostName) {
this(hostName, DEFAULT_PORT);
}
/**
- * Create a new {@link StaticMasterSlaveConfiguration} given {@code hostName} and {@code port}.
+ * Create a new {@link StaticMasterReplicaConfiguration} given {@code hostName} and {@code port}.
*
* @param hostName must not be {@literal null} or empty.
* @param port a valid TCP port (1-65535).
*/
- public RedisStaticMasterSlaveConfiguration(String hostName, int port) {
+ public RedisStaticMasterReplicaConfiguration(String hostName, int port) {
addNode(hostName, port);
}
@@ -86,9 +87,9 @@ public class RedisStaticMasterSlaveConfiguration implements RedisConfiguration,
* Add a {@link RedisStandaloneConfiguration node} to the list of nodes given {@code hostName}.
*
* @param hostName must not be {@literal null} or empty.
- * @return {@code this} {@link StaticMasterSlaveConfiguration}.
+ * @return {@code this} {@link StaticMasterReplicaConfiguration}.
*/
- public StaticMasterSlaveConfiguration node(String hostName) {
+ public StaticMasterReplicaConfiguration node(String hostName) {
return node(hostName, DEFAULT_PORT);
}
@@ -97,9 +98,9 @@ public class RedisStaticMasterSlaveConfiguration implements RedisConfiguration,
*
* @param hostName must not be {@literal null} or empty.
* @param port a valid TCP port (1-65535).
- * @return {@code this} {@link StaticMasterSlaveConfiguration}.
+ * @return {@code this} {@link StaticMasterReplicaConfiguration}.
*/
- public RedisStaticMasterSlaveConfiguration node(String hostName, int port) {
+ public RedisStaticMasterReplicaConfiguration node(String hostName, int port) {
addNode(hostName, port);
return this;
@@ -151,7 +152,7 @@ public class RedisStaticMasterSlaveConfiguration implements RedisConfiguration,
/*
* (non-Javadoc)
- * @see org.springframework.data.redis.connection.RedisConfiguration.StaticMasterSlaveConfiguration#getNodes()
+ * @see org.springframework.data.redis.connection.RedisConfiguration.StaticMasterReplicaConfiguration#getNodes()
*/
@Override
public List getNodes() {
diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceClientConfiguration.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceClientConfiguration.java
index f83e45492..f8a515e5e 100644
--- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceClientConfiguration.java
+++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceClientConfiguration.java
@@ -39,7 +39,7 @@ import org.springframework.util.Assert;
* Optional {@link ClientResources}
* Optional {@link ClientOptions}
* Optional client name
- * Optional {@link ReadFrom}. Enables Master/Slave operations if configured.
+ * Optional {@link ReadFrom}. Enables Master/Replica operations if configured.
* Client {@link Duration timeout}
* Shutdown {@link Duration timeout}
*
@@ -85,6 +85,8 @@ public interface LettuceClientConfiguration {
Optional getClientName();
/**
+ * Note: Redis is undergoing a nomenclature change where the term replica is used synonymously to slave.
+ *
* @return the optional {@link io.lettuce.core.ReadFrom} setting.
* @since 2.1
*/
@@ -200,7 +202,8 @@ public interface LettuceClientConfiguration {
}
/**
- * Configure {@link ReadFrom}. Enables Master/Slave operations if configured.
+ * Configure {@link ReadFrom}. Enables Master/Replica operations if configured.
+ * Note: Redis is undergoing a nomenclature change where the term replica is used synonymously to slave.
*
* @param readFrom must not be {@literal null}.
* @return {@literal this} builder.
diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java
index e48a6f59c..b42934339 100644
--- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java
+++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java
@@ -73,7 +73,7 @@ import org.springframework.util.ClassUtils;
* {@link LettuceConnectionFactory client configuration}. Lettuce supports the following environmental configurations:
*
* - {@link RedisStandaloneConfiguration}
- * - {@link RedisStaticMasterSlaveConfiguration}
+ * - {@link RedisStaticMasterReplicaConfiguration}
* - {@link RedisSocketConfiguration}
* - {@link RedisSentinelConfiguration}
* - {@link RedisClusterConfiguration}
@@ -212,7 +212,7 @@ public class LettuceConnectionFactory
/**
* Constructs a new {@link LettuceConnectionFactory} instance using the given
- * {@link RedisStaticMasterSlaveConfiguration} and {@link LettuceClientConfiguration}.
+ * {@link RedisStaticMasterReplicaConfiguration} and {@link LettuceClientConfiguration}.
*
* @param redisConfiguration must not be {@literal null}.
* @param clientConfig must not be {@literal null}.
@@ -825,11 +825,11 @@ public class LettuceConnectionFactory
}
/**
- * @return true when {@link RedisStaticMasterSlaveConfiguration} is present.
+ * @return true when {@link RedisStaticMasterReplicaConfiguration} is present.
* @since 2.1
*/
- private boolean isStaticMasterSlaveAware() {
- return RedisConfiguration.isStaticMasterSlaveConfiguration(configuration);
+ private boolean isStaticMasterReplicaAware() {
+ return RedisConfiguration.isStaticMasterReplicaConfiguration(configuration);
}
/**
@@ -903,14 +903,14 @@ public class LettuceConnectionFactory
ReadFrom readFrom = getClientConfiguration().getReadFrom().orElse(null);
- if (isStaticMasterSlaveAware()) {
+ if (isStaticMasterReplicaAware()) {
- List nodes = ((RedisStaticMasterSlaveConfiguration) configuration).getNodes().stream() //
+ List nodes = ((RedisStaticMasterReplicaConfiguration) configuration).getNodes().stream() //
.map(it -> createRedisURIAndApplySettings(it.getHostName(), it.getPort())) //
.peek(it -> it.setDatabase(getDatabase())) //
.collect(Collectors.toList());
- return new StaticMasterSlaveConnectionProvider((RedisClient) client, codec, nodes, readFrom);
+ return new StaticMasterReplicaConnectionProvider((RedisClient) client, codec, nodes, readFrom);
}
if (isClusterAware()) {
@@ -922,7 +922,7 @@ public class LettuceConnectionFactory
protected AbstractRedisClient createClient() {
- if (isStaticMasterSlaveAware()) {
+ if (isStaticMasterReplicaAware()) {
RedisClient redisClient = clientConfiguration.getClientResources() //
.map(RedisClient::create) //
diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/StandaloneConnectionProvider.java b/src/main/java/org/springframework/data/redis/connection/lettuce/StandaloneConnectionProvider.java
index 090c4abd8..72422669d 100644
--- a/src/main/java/org/springframework/data/redis/connection/lettuce/StandaloneConnectionProvider.java
+++ b/src/main/java/org/springframework/data/redis/connection/lettuce/StandaloneConnectionProvider.java
@@ -109,7 +109,7 @@ class StandaloneConnectionProvider implements LettuceConnectionProvider, TargetA
if (StatefulConnection.class.isAssignableFrom(connectionType)) {
- return connectionType.cast(readFrom.map(it -> this.masterSlaveConnection(redisURISupplier.get(), it))
+ return connectionType.cast(readFrom.map(it -> this.masterReplicaConnection(redisURISupplier.get(), it))
.orElseGet(() -> client.connect(codec)));
}
@@ -135,14 +135,15 @@ class StandaloneConnectionProvider implements LettuceConnectionProvider, TargetA
if (StatefulConnection.class.isAssignableFrom(connectionType)) {
return connectionType
- .cast(readFrom.map(it -> this.masterSlaveConnection(redisURI, it)).orElseGet(() -> client.connect(codec)));
+ .cast(readFrom.map(it -> this.masterReplicaConnection(redisURI, it)).orElseGet(() -> client.connect(codec)));
}
throw new UnsupportedOperationException("Connection type " + connectionType + " not supported!");
}
- private StatefulRedisConnection masterSlaveConnection(RedisURI redisUri, ReadFrom readFrom) {
+ private StatefulRedisConnection masterReplicaConnection(RedisURI redisUri, ReadFrom readFrom) {
+ // See https://github.com/lettuce-io/lettuce-core/issues/845 for MasterSlave -> MasterReplica change.
StatefulRedisMasterSlaveConnection, ?> connection = MasterSlave.connect(client, codec, redisUri);
connection.setReadFrom(readFrom);
diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/StaticMasterSlaveConnectionProvider.java b/src/main/java/org/springframework/data/redis/connection/lettuce/StaticMasterReplicaConnectionProvider.java
similarity index 85%
rename from src/main/java/org/springframework/data/redis/connection/lettuce/StaticMasterSlaveConnectionProvider.java
rename to src/main/java/org/springframework/data/redis/connection/lettuce/StaticMasterReplicaConnectionProvider.java
index 74cd3c8d5..0269dee4c 100644
--- a/src/main/java/org/springframework/data/redis/connection/lettuce/StaticMasterSlaveConnectionProvider.java
+++ b/src/main/java/org/springframework/data/redis/connection/lettuce/StaticMasterReplicaConnectionProvider.java
@@ -29,7 +29,7 @@ import java.util.Optional;
import org.springframework.lang.Nullable;
/**
- * {@link LettuceConnectionProvider} implementation for a static Master/Slave connection suitable for eg. AWS
+ * {@link LettuceConnectionProvider} implementation for a static Master/Replica connection suitable for eg. AWS
* ElastiCache with replicas setup.
* Lettuce auto-discovers node roles from the static {@link RedisURI} collection.
*
@@ -37,7 +37,7 @@ import org.springframework.lang.Nullable;
* @author Christoph Strobl
* @since 2.1
*/
-class StaticMasterSlaveConnectionProvider implements LettuceConnectionProvider {
+class StaticMasterReplicaConnectionProvider implements LettuceConnectionProvider {
private final RedisClient client;
private final RedisCodec, ?> codec;
@@ -45,14 +45,14 @@ class StaticMasterSlaveConnectionProvider implements LettuceConnectionProvider {
private final Collection nodes;
/**
- * Create new {@link StaticMasterSlaveConnectionProvider}.
+ * Create new {@link StaticMasterReplicaConnectionProvider}.
*
* @param client must not be {@literal null}.
* @param codec must not be {@literal null}.
* @param nodes must not be {@literal null}.
* @param readFrom can be {@literal null}.
*/
- StaticMasterSlaveConnectionProvider(RedisClient client, RedisCodec, ?> codec, Collection nodes,
+ StaticMasterReplicaConnectionProvider(RedisClient client, RedisCodec, ?> codec, Collection nodes,
@Nullable ReadFrom readFrom) {
this.client = client;
@@ -70,6 +70,7 @@ class StaticMasterSlaveConnectionProvider implements LettuceConnectionProvider {
if (StatefulConnection.class.isAssignableFrom(connectionType)) {
+ // See https://github.com/lettuce-io/lettuce-core/issues/845 for MasterSlave -> MasterReplica change.
StatefulRedisMasterSlaveConnection, ?> connection = MasterSlave.connect(client, codec, nodes);
readFrom.ifPresent(connection::setReadFrom);
diff --git a/src/test/java/org/springframework/data/redis/connection/RedisElastiCacheConfigurationUnitTests.java b/src/test/java/org/springframework/data/redis/connection/RedisElastiCacheConfigurationUnitTests.java
index 968cfbc4d..5b4a5d7e4 100644
--- a/src/test/java/org/springframework/data/redis/connection/RedisElastiCacheConfigurationUnitTests.java
+++ b/src/test/java/org/springframework/data/redis/connection/RedisElastiCacheConfigurationUnitTests.java
@@ -20,7 +20,7 @@ import static org.assertj.core.api.Assertions.*;
import org.junit.Test;
/**
- * Unit tests for {@link RedisStaticMasterSlaveConfiguration}.
+ * Unit tests for {@link RedisStaticMasterReplicaConfiguration}.
*
* @author Mark Paluch
*/
@@ -29,7 +29,7 @@ public class RedisElastiCacheConfigurationUnitTests {
@Test // DATAREDIS-762
public void shouldCreateSingleHostConfiguration() {
- RedisStaticMasterSlaveConfiguration singleHost = new RedisStaticMasterSlaveConfiguration("localhost");
+ RedisStaticMasterReplicaConfiguration singleHost = new RedisStaticMasterReplicaConfiguration("localhost");
assertThat(singleHost.getNodes()).hasSize(1);
@@ -42,7 +42,7 @@ public class RedisElastiCacheConfigurationUnitTests {
@Test // DATAREDIS-762
public void shouldCreateMultiHostConfiguration() {
- RedisStaticMasterSlaveConfiguration multiHost = new RedisStaticMasterSlaveConfiguration("localhost");
+ RedisStaticMasterReplicaConfiguration multiHost = new RedisStaticMasterReplicaConfiguration("localhost");
multiHost.node("other-host", 6479);
assertThat(multiHost.getNodes()).hasSize(2);
@@ -61,7 +61,7 @@ public class RedisElastiCacheConfigurationUnitTests {
@Test // DATAREDIS-762
public void shouldApplyPasswordToNodes() {
- RedisStaticMasterSlaveConfiguration multiHost = new RedisStaticMasterSlaveConfiguration("localhost").node("other-host", 6479);
+ RedisStaticMasterReplicaConfiguration multiHost = new RedisStaticMasterReplicaConfiguration("localhost").node("other-host", 6479);
multiHost.setPassword(RedisPassword.of("foobar"));
multiHost.node("third", 1234);
@@ -73,7 +73,7 @@ public class RedisElastiCacheConfigurationUnitTests {
@Test // DATAREDIS-762
public void shouldApplyDatabaseToNodes() {
- RedisStaticMasterSlaveConfiguration multiHost = new RedisStaticMasterSlaveConfiguration("localhost").node("other-host", 6479);
+ RedisStaticMasterReplicaConfiguration multiHost = new RedisStaticMasterReplicaConfiguration("localhost").node("other-host", 6479);
multiHost.setDatabase(4);
multiHost.node("third", 1234);
diff --git a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryTests.java b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryTests.java
index c54b303c2..e9f46501f 100644
--- a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryTests.java
+++ b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryTests.java
@@ -41,7 +41,7 @@ import org.springframework.data.redis.RedisSystemException;
import org.springframework.data.redis.SettingsUtils;
import org.springframework.data.redis.connection.DefaultStringRedisConnection;
import org.springframework.data.redis.connection.RedisConnection;
-import org.springframework.data.redis.connection.RedisStaticMasterSlaveConfiguration;
+import org.springframework.data.redis.connection.RedisStaticMasterReplicaConfiguration;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.StringRedisConnection;
@@ -385,8 +385,8 @@ public class LettuceConnectionFactoryTests {
factory.destroy();
}
- @Test // DATAREDIS-762
- public void factoryUsesElastiCacheMasterSlaveConnections() {
+ @Test // DATAREDIS-762, DATAREDIS-869
+ public void factoryUsesElastiCacheMasterReplicaConnections() {
assumeThat(String.format("No slaves connected to %s:%s.", SettingsUtils.getHost(), SettingsUtils.getPort()),
connection.info("replication").getProperty("connected_slaves", "0").compareTo("0") > 0, is(true));
@@ -394,7 +394,7 @@ public class LettuceConnectionFactoryTests {
LettuceClientConfiguration configuration = LettuceTestClientConfiguration.builder().readFrom(ReadFrom.SLAVE)
.build();
- RedisStaticMasterSlaveConfiguration elastiCache = new RedisStaticMasterSlaveConfiguration(SettingsUtils.getHost())
+ RedisStaticMasterReplicaConfiguration elastiCache = new RedisStaticMasterReplicaConfiguration(SettingsUtils.getHost())
.node(SettingsUtils.getHost(), SettingsUtils.getPort() + 1);
LettuceConnectionFactory factory = new LettuceConnectionFactory(elastiCache,
@@ -413,16 +413,16 @@ public class LettuceConnectionFactoryTests {
factory.destroy();
}
- @Test // DATAREDIS-762
+ @Test // DATAREDIS-762, DATAREDIS-869
public void factoryUsesElastiCacheMasterWithoutMaster() {
- assumeThat(String.format("No slaves connected to %s:%s.", SettingsUtils.getHost(), SettingsUtils.getPort()),
+ assumeThat(String.format("No replicas connected to %s:%s.", SettingsUtils.getHost(), SettingsUtils.getPort()),
connection.info("replication").getProperty("connected_slaves", "0").compareTo("0") > 0, is(true));
LettuceClientConfiguration configuration = LettuceTestClientConfiguration.builder().readFrom(ReadFrom.MASTER)
.build();
- RedisStaticMasterSlaveConfiguration elastiCache = new RedisStaticMasterSlaveConfiguration(SettingsUtils.getHost(),
+ RedisStaticMasterReplicaConfiguration elastiCache = new RedisStaticMasterReplicaConfiguration(SettingsUtils.getHost(),
SettingsUtils.getPort() + 1);
LettuceConnectionFactory factory = new LettuceConnectionFactory(elastiCache, configuration);
@@ -444,10 +444,10 @@ public class LettuceConnectionFactoryTests {
factory.destroy();
}
- @Test // DATAREDIS-580
- public void factoryUsesMasterSlaveConnections() {
+ @Test // DATAREDIS-580, DATAREDIS-869
+ public void factoryUsesMasterReplicaConnections() {
- assumeThat(String.format("No slaves connected to %s:%s.", SettingsUtils.getHost(), SettingsUtils.getPort()),
+ assumeThat(String.format("No replicas connected to %s:%s.", SettingsUtils.getHost(), SettingsUtils.getPort()),
connection.info("replication").getProperty("connected_slaves", "0").compareTo("0") > 0, is(true));
LettuceClientConfiguration configuration = LettuceTestClientConfiguration.builder().readFrom(ReadFrom.SLAVE)