diff --git a/.github/wordlist.txt b/.github/wordlist.txt
index 8f4a29819d..49440c77da 100644
--- a/.github/wordlist.txt
+++ b/.github/wordlist.txt
@@ -23,7 +23,6 @@ CRDB
Dockerfile
EVAL
EVALSHA
-EchoStrategy
FTCreateParams
FTSearchParams
Failback
@@ -71,6 +70,7 @@ OpenCensus
OpenTelemetry
OpenTracing
Otel
+PingStrategy
POJO
POJOs
PoolConfig
diff --git a/docs/failover.md b/docs/failover.md
index 52c3bee02e..916daa4c4e 100644
--- a/docs/failover.md
+++ b/docs/failover.md
@@ -159,9 +159,9 @@ The health check system operates independently of your application traffic, runn
#### Available Health Check Types
-##### 1. EchoStrategy (Default)
+##### 1. PingStrategy (Default)
-The `EchoStrategy` is the default health check implementation that uses Redis's `ECHO` command to verify both connectivity and write capability.
+The `PingStrategy` is the default health check implementation that uses Redis's `PING` command to verify both connectivity and write capability.
**Use Cases:**
- General-purpose health checking for most Redis deployments
@@ -169,8 +169,8 @@ The `EchoStrategy` is the default health check implementation that uses Redis's
- Simple connectivity validation
**How it works:**
-- Sends `ECHO "HealthCheck"` command to the Redis server
-- Expects exact response `"HealthCheck"` to consider the server healthy
+- Sends `PING` command to the Redis server
+- Expects exact response `"PONG"` to consider the server healthy
- Any exception or unexpected response marks the server as unhealthy
##### 2. LagAwareStrategy [PREVIEW] (Redis Enterprise)
diff --git a/src/main/java/redis/clients/jedis/MultiDbConfig.java b/src/main/java/redis/clients/jedis/MultiDbConfig.java
index 867abae7d1..3c46d2c72b 100644
--- a/src/main/java/redis/clients/jedis/MultiDbConfig.java
+++ b/src/main/java/redis/clients/jedis/MultiDbConfig.java
@@ -11,7 +11,7 @@
import redis.clients.jedis.exceptions.JedisConnectionException;
import redis.clients.jedis.exceptions.JedisValidationException;
import redis.clients.jedis.mcf.ConnectionFailoverException;
-import redis.clients.jedis.mcf.EchoStrategy;
+import redis.clients.jedis.mcf.PingStrategy;
import redis.clients.jedis.mcf.HealthCheckStrategy;
/**
@@ -71,7 +71,7 @@
*
* @see redis.clients.jedis.mcf.MultiDbConnectionProvider
* @see redis.clients.jedis.mcf.HealthCheckStrategy
- * @see redis.clients.jedis.mcf.EchoStrategy
+ * @see redis.clients.jedis.mcf.PingStrategy
* @see redis.clients.jedis.mcf.LagAwareStrategy
* @since 7.0
*/
@@ -90,13 +90,13 @@ public final class MultiDbConfig {
* Common Implementations:
*
*
- * - {@link redis.clients.jedis.mcf.EchoStrategy#DEFAULT} - Uses Redis ECHO command for health
+ *
- {@link redis.clients.jedis.mcf.PingStrategy#DEFAULT} - Uses Redis PING command for health
* checks
* - Custom implementations for specific monitoring requirements
* - Redis Enterprise implementations using REST API monitoring
*
* @see redis.clients.jedis.mcf.HealthCheckStrategy
- * @see redis.clients.jedis.mcf.EchoStrategy
+ * @see redis.clients.jedis.mcf.PingStrategy
* @see redis.clients.jedis.mcf.LagAwareStrategy
*/
public static interface StrategySupplier {
@@ -839,7 +839,7 @@ public static class DatabaseConfig {
/**
* Strategy supplier for creating health check instances for this database. Default is
- * EchoStrategy.DEFAULT.
+ * PingStrategy.DEFAULT.
*/
private StrategySupplier healthCheckStrategySupplier;
@@ -847,7 +847,7 @@ public static class DatabaseConfig {
* Constructs a DatabaseConfig with basic endpoint and client configuration.
*
* This constructor creates a database configuration with default settings: weight of 1.0f and
- * EchoStrategy for health checks. Use the {@link Builder} for more advanced configuration
+ * PingStrategy for health checks. Use the {@link Builder} for more advanced configuration
* options.
*
* @param endpoint the Redis endpoint (host and port)
@@ -863,7 +863,7 @@ public DatabaseConfig(Endpoint endpoint, JedisClientConfig clientConfig) {
* Constructs a DatabaseConfig with endpoint, client, and connection pool configuration.
*
* This constructor allows specification of connection pool settings in addition to basic
- * endpoint configuration. Default weight of 1.0f and EchoStrategy for health checks are used.
+ * endpoint configuration. Default weight of 1.0f and PingStrategy for health checks are used.
*
* @param endpoint the Redis endpoint (host and port)
* @param clientConfig the Jedis client configuration
@@ -963,7 +963,7 @@ public StrategySupplier getHealthCheckStrategySupplier() {
*
*
* - Weight: 1.0f (standard priority)
- * - Health Check: {@link redis.clients.jedis.mcf.EchoStrategy#DEFAULT}
+ * - Health Check: {@link redis.clients.jedis.mcf.PingStrategy#DEFAULT}
* - Connection Pool: null (uses default pooling)
*
*/
@@ -980,8 +980,8 @@ public static class Builder {
/** Weight for database selection priority. Default: 1.0f */
private float weight = 1.0f;
- /** Health check strategy supplier. Default: EchoStrategy.DEFAULT */
- private StrategySupplier healthCheckStrategySupplier = EchoStrategy.DEFAULT;
+ /** Health check strategy supplier. Default: PingStrategy.DEFAULT */
+ private StrategySupplier healthCheckStrategySupplier = PingStrategy.DEFAULT;
/**
* Constructs a new Builder with required endpoint and client configuration.
@@ -1089,7 +1089,7 @@ public Builder healthCheckStrategy(HealthCheckStrategy healthCheckStrategy) {
*
*
* When health checks are enabled (true) and no strategy supplier was previously set, the
- * default {@link redis.clients.jedis.mcf.EchoStrategy#DEFAULT} will be used.
+ * default {@link redis.clients.jedis.mcf.PingStrategy#DEFAULT} will be used.
*
* @param healthCheckEnabled true to enable health checks, false to disable
* @return this builder instance for method chaining
@@ -1098,7 +1098,7 @@ public Builder healthCheckEnabled(boolean healthCheckEnabled) {
if (!healthCheckEnabled) {
this.healthCheckStrategySupplier = null;
} else if (healthCheckStrategySupplier == null) {
- this.healthCheckStrategySupplier = EchoStrategy.DEFAULT;
+ this.healthCheckStrategySupplier = PingStrategy.DEFAULT;
}
return this;
}
diff --git a/src/main/java/redis/clients/jedis/mcf/EchoStrategy.java b/src/main/java/redis/clients/jedis/mcf/PingStrategy.java
similarity index 80%
rename from src/main/java/redis/clients/jedis/mcf/EchoStrategy.java
rename to src/main/java/redis/clients/jedis/mcf/PingStrategy.java
index 6be05e2cfb..9f9a143596 100644
--- a/src/main/java/redis/clients/jedis/mcf/EchoStrategy.java
+++ b/src/main/java/redis/clients/jedis/mcf/PingStrategy.java
@@ -10,17 +10,17 @@
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.MultiDbConfig.StrategySupplier;
-public class EchoStrategy implements HealthCheckStrategy {
+public class PingStrategy implements HealthCheckStrategy {
private static final int MAX_HEALTH_CHECK_POOL_SIZE = 2;
private final UnifiedJedis jedis;
private final HealthCheckStrategy.Config config;
- public EchoStrategy(HostAndPort hostAndPort, JedisClientConfig jedisClientConfig) {
+ public PingStrategy(HostAndPort hostAndPort, JedisClientConfig jedisClientConfig) {
this(hostAndPort, jedisClientConfig, HealthCheckStrategy.Config.create());
}
- public EchoStrategy(HostAndPort hostAndPort, JedisClientConfig jedisClientConfig,
+ public PingStrategy(HostAndPort hostAndPort, JedisClientConfig jedisClientConfig,
HealthCheckStrategy.Config config) {
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig<>();
poolConfig.setMaxTotal(MAX_HEALTH_CHECK_POOL_SIZE);
@@ -55,8 +55,7 @@ public int getDelayInBetweenProbes() {
@Override
public HealthStatus doHealthCheck(Endpoint endpoint) {
- return "HealthCheck".equals(jedis.echo("HealthCheck")) ? HealthStatus.HEALTHY
- : HealthStatus.UNHEALTHY;
+ return "PONG".equals(jedis.ping()) ? HealthStatus.HEALTHY : HealthStatus.UNHEALTHY;
}
@Override
@@ -64,6 +63,6 @@ public void close() {
jedis.close();
}
- public static final StrategySupplier DEFAULT = EchoStrategy::new;
+ public static final StrategySupplier DEFAULT = PingStrategy::new;
}
diff --git a/src/test/java/redis/clients/jedis/mcf/DefaultValuesTest.java b/src/test/java/redis/clients/jedis/mcf/DefaultValuesTest.java
index 767fd60c90..6adb788577 100644
--- a/src/test/java/redis/clients/jedis/mcf/DefaultValuesTest.java
+++ b/src/test/java/redis/clients/jedis/mcf/DefaultValuesTest.java
@@ -33,8 +33,8 @@ void testDefaultValuesInConfig() {
// check healthchecks enabled
assertNotNull(databaseConfig.getHealthCheckStrategySupplier());
- // check default healthcheck strategy is echo
- assertEquals(EchoStrategy.DEFAULT, databaseConfig.getHealthCheckStrategySupplier());
+ // check default healthcheck strategy is PingStrategy
+ assertEquals(PingStrategy.DEFAULT, databaseConfig.getHealthCheckStrategySupplier());
// check number of probes
assertEquals(3,
diff --git a/src/test/java/redis/clients/jedis/mcf/HealthCheckIntegrationTest.java b/src/test/java/redis/clients/jedis/mcf/HealthCheckIntegrationTest.java
index f19af41a6e..fad5f93681 100644
--- a/src/test/java/redis/clients/jedis/mcf/HealthCheckIntegrationTest.java
+++ b/src/test/java/redis/clients/jedis/mcf/HealthCheckIntegrationTest.java
@@ -42,9 +42,9 @@ public void testDisableHealthCheck() {
@Test
public void testDefaultStrategySupplier() {
- // Create a default strategy supplier that creates EchoStrategy instances
+ // Create a default strategy supplier that creates PingStrategy instances
MultiDbConfig.StrategySupplier defaultSupplier = (hostAndPort, jedisClientConfig) -> {
- return new EchoStrategy(hostAndPort, jedisClientConfig);
+ return new PingStrategy(hostAndPort, jedisClientConfig);
};
MultiDbConnectionProvider customProvider = getMCCF(defaultSupplier);
try (UnifiedJedis customClient = new UnifiedJedis(customProvider)) {
@@ -113,8 +113,8 @@ public void testProbingLogic_RealHealthCheckWithProbes() throws InterruptedExcep
}
// Third attempt succeeds - do actual health check
try (UnifiedJedis jedis = new UnifiedJedis(hostAndPort, jedisClientConfig)) {
- String result = jedis.echo("HealthCheck");
- return "HealthCheck".equals(result) ? HealthStatus.HEALTHY : HealthStatus.UNHEALTHY;
+ String result = jedis.ping();
+ return "PONG".equals(result) ? HealthStatus.HEALTHY : HealthStatus.UNHEALTHY;
} catch (Exception e) {
return HealthStatus.UNHEALTHY;
}
diff --git a/src/test/java/redis/clients/jedis/mcf/HealthCheckTest.java b/src/test/java/redis/clients/jedis/mcf/HealthCheckTest.java
index 10090811c1..339f4ce1ed 100644
--- a/src/test/java/redis/clients/jedis/mcf/HealthCheckTest.java
+++ b/src/test/java/redis/clients/jedis/mcf/HealthCheckTest.java
@@ -321,11 +321,11 @@ void testHealthStatusManagerClose() {
verify(closeableStrategy).close();
}
- // ========== EchoStrategy Tests ==========
+ // ========== PingStrategy Tests ==========
@Test
- void testEchoStrategyCustomIntervalTimeout() {
- try (EchoStrategy strategy = new EchoStrategy(testEndpoint, testConfig,
+ void testPingStrategyCustomIntervalTimeout() {
+ try (PingStrategy strategy = new PingStrategy(testEndpoint, testConfig,
HealthCheckStrategy.Config.builder().interval(2000).timeout(1500).delayInBetweenProbes(50)
.numProbes(11).policy(BuiltIn.ANY_SUCCESS).build())) {
assertEquals(2000, strategy.getInterval());
@@ -337,11 +337,11 @@ void testEchoStrategyCustomIntervalTimeout() {
}
@Test
- void testEchoStrategyDefaultSupplier() {
- MultiDbConfig.StrategySupplier supplier = EchoStrategy.DEFAULT;
+ void testPingStrategyDefaultSupplier() {
+ MultiDbConfig.StrategySupplier supplier = PingStrategy.DEFAULT;
HealthCheckStrategy strategy = supplier.get(testEndpoint, testConfig);
- assertInstanceOf(EchoStrategy.class, strategy);
+ assertInstanceOf(PingStrategy.class, strategy);
}
// ========== Failover configuration Tests ==========
@@ -368,7 +368,7 @@ void testDefaultValues() {
.builder(testEndpoint, testConfig).build();
assertEquals(1.0f, databaseConfig.getWeight()); // Default weight
- assertEquals(EchoStrategy.DEFAULT, databaseConfig.getHealthCheckStrategySupplier()); // Default
+ assertEquals(PingStrategy.DEFAULT, databaseConfig.getHealthCheckStrategySupplier()); // Default
// is null
// (no
// health
@@ -410,26 +410,26 @@ void testDatabaseConfigWithStrategySupplier() {
}
@Test
- void testDatabaseConfigWithEchoStrategy() {
- MultiDbConfig.StrategySupplier echoSupplier = (hostAndPort, jedisClientConfig) -> {
- return new EchoStrategy(hostAndPort, jedisClientConfig);
+ void testDatabaseConfigWithPingStrategy() {
+ MultiDbConfig.StrategySupplier pingSupplier = (hostAndPort, jedisClientConfig) -> {
+ return new PingStrategy(hostAndPort, jedisClientConfig);
};
MultiDbConfig.DatabaseConfig databaseConfig = MultiDbConfig.DatabaseConfig
- .builder(testEndpoint, testConfig).healthCheckStrategySupplier(echoSupplier).build();
+ .builder(testEndpoint, testConfig).healthCheckStrategySupplier(pingSupplier).build();
MultiDbConfig.StrategySupplier supplier = databaseConfig.getHealthCheckStrategySupplier();
assertNotNull(supplier);
- assertInstanceOf(EchoStrategy.class, supplier.get(testEndpoint, testConfig));
+ assertInstanceOf(PingStrategy.class, supplier.get(testEndpoint, testConfig));
}
@Test
void testDatabaseConfigWithDefaultHealthCheck() {
MultiDbConfig.DatabaseConfig databaseConfig = MultiDbConfig.DatabaseConfig
- .builder(testEndpoint, testConfig).build(); // Should use default EchoStrategy
+ .builder(testEndpoint, testConfig).build(); // Should use default PingStrategy
assertNotNull(databaseConfig.getHealthCheckStrategySupplier());
- assertEquals(EchoStrategy.DEFAULT, databaseConfig.getHealthCheckStrategySupplier());
+ assertEquals(PingStrategy.DEFAULT, databaseConfig.getHealthCheckStrategySupplier());
}
@Test
@@ -446,7 +446,7 @@ void testDatabaseConfigHealthCheckEnabledExplicitly() {
.builder(testEndpoint, testConfig).healthCheckEnabled(true).build();
assertNotNull(databaseConfig.getHealthCheckStrategySupplier());
- assertEquals(EchoStrategy.DEFAULT, databaseConfig.getHealthCheckStrategySupplier());
+ assertEquals(PingStrategy.DEFAULT, databaseConfig.getHealthCheckStrategySupplier());
}
// ========== Integration Tests ==========
@@ -516,10 +516,10 @@ void testStrategySupplierPolymorphism() {
// Test that the polymorphic design works correctly
MultiDbConfig.StrategySupplier supplier = (hostAndPort, jedisClientConfig) -> {
if (jedisClientConfig != null) {
- return new EchoStrategy(hostAndPort, jedisClientConfig,
+ return new PingStrategy(hostAndPort, jedisClientConfig,
HealthCheckStrategy.Config.builder().interval(500).timeout(250).numProbes(1).build());
} else {
- return new EchoStrategy(hostAndPort, DefaultJedisClientConfig.builder().build());
+ return new PingStrategy(hostAndPort, DefaultJedisClientConfig.builder().build());
}
};
diff --git a/src/test/java/redis/clients/jedis/mcf/MultiDbConnectionProviderInitializationTest.java b/src/test/java/redis/clients/jedis/mcf/MultiDbConnectionProviderInitializationTest.java
index f134490112..122dcc6dae 100644
--- a/src/test/java/redis/clients/jedis/mcf/MultiDbConnectionProviderInitializationTest.java
+++ b/src/test/java/redis/clients/jedis/mcf/MultiDbConnectionProviderInitializationTest.java
@@ -56,7 +56,7 @@ void testInitializationWithMixedHealthCheckConfiguration() {
.build();
DatabaseConfig db2 = DatabaseConfig.builder(endpoint2, clientConfig).weight(2.0f)
- .healthCheckStrategySupplier(EchoStrategy.DEFAULT) // With
+ .healthCheckStrategySupplier(PingStrategy.DEFAULT) // With
// health
// check
.build();
diff --git a/src/test/java/redis/clients/jedis/mcf/EchoStrategyIntegrationTest.java b/src/test/java/redis/clients/jedis/mcf/PingStrategyIntegrationTest.java
similarity index 92%
rename from src/test/java/redis/clients/jedis/mcf/EchoStrategyIntegrationTest.java
rename to src/test/java/redis/clients/jedis/mcf/PingStrategyIntegrationTest.java
index 56b04a9437..66f25a78ab 100644
--- a/src/test/java/redis/clients/jedis/mcf/EchoStrategyIntegrationTest.java
+++ b/src/test/java/redis/clients/jedis/mcf/PingStrategyIntegrationTest.java
@@ -20,7 +20,7 @@
import static org.junit.jupiter.api.Assertions.*;
@Tag("failover")
-public class EchoStrategyIntegrationTest {
+public class PingStrategyIntegrationTest {
private static final EndpointConfig endpoint = HostAndPorts.getRedisEndpoint("redis-failover-1");
private static final HostAndPort proxyHostAndPort = endpoint.getHostAndPort();
@@ -55,10 +55,10 @@ public void resetProxy() throws IOException {
}
@Test
- public void testEchoStrategyRecoversAfterDisconnect() throws Exception {
+ public void testPingStrategyRecoversAfterDisconnect() throws Exception {
JedisClientConfig config = DefaultJedisClientConfig.builder().socketTimeoutMillis(1000)
.connectionTimeoutMillis(1000).build();
- try (EchoStrategy strategy = new EchoStrategy(proxyHostAndPort, config,
+ try (PingStrategy strategy = new PingStrategy(proxyHostAndPort, config,
HealthCheckStrategy.Config.create())) {
// Initial health check should work
@@ -81,11 +81,11 @@ public void testEchoStrategyRecoversAfterDisconnect() throws Exception {
}
@Test
- public void testEchoStrategyWithConnectionTimeout() throws Exception {
+ public void testPingStrategyWithConnectionTimeout() throws Exception {
JedisClientConfig config = DefaultJedisClientConfig.builder().socketTimeoutMillis(100)
.connectionTimeoutMillis(100).build();
- try (EchoStrategy strategy = new EchoStrategy(proxyHostAndPort, config,
+ try (PingStrategy strategy = new PingStrategy(proxyHostAndPort, config,
HealthCheckStrategy.Config.builder().interval(1000).timeout(500).numProbes(1).build())) {
// Initial health check should work
@@ -110,7 +110,7 @@ public void testEchoStrategyWithConnectionTimeout() throws Exception {
@Test
public void testConnectionDropDuringHealthCheck() throws Exception {
JedisClientConfig config = DefaultJedisClientConfig.builder().socketTimeoutMillis(2000).build();
- try (EchoStrategy strategy = new EchoStrategy(proxyHostAndPort, config,
+ try (PingStrategy strategy = new PingStrategy(proxyHostAndPort, config,
HealthCheckStrategy.Config.create())) {
// Initial health check