This is an automated email from the ASF dual-hosted git repository.
hqtran pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
The following commit(s) were added to refs/heads/master by this push:
new 61f40b5bfc JAMES-4072 Enable timeout option in RedisClientFactory
(#2706)
61f40b5bfc is described below
commit 61f40b5bfc420bfb77fb1ab95675a99eadf62c54
Author: vttran <[email protected]>
AuthorDate: Tue May 13 11:08:37 2025 +0700
JAMES-4072 Enable timeout option in RedisClientFactory (#2706)
---
.../java/org/apache/james/backends/redis/RedisClientFactory.scala | 4 ++--
.../java/org/apache/james/backends/redis/RedisHealthCheck.scala | 7 +------
.../org/apache/james/backends/redis/RedisClusterExtension.java | 1 +
.../apache/james/backends/redis/RedisMasterReplicaExtension.java | 3 ++-
.../org/apache/james/backends/redis/RedisSentinelExtension.java | 2 +-
.../java/org/apache/james/backends/redis/RedisTLSExtension.java | 1 +
6 files changed, 8 insertions(+), 10 deletions(-)
diff --git
a/backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisClientFactory.scala
b/backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisClientFactory.scala
index 96b224b0f4..3c85ee6b1a 100644
---
a/backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisClientFactory.scala
+++
b/backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisClientFactory.scala
@@ -20,10 +20,9 @@
package org.apache.james.backends.redis
import java.time.Duration
-
import io.lettuce.core.cluster.{ClusterClientOptions, RedisClusterClient}
import io.lettuce.core.resource.ClientResources
-import io.lettuce.core.{AbstractRedisClient, ClientOptions, RedisClient,
SslOptions}
+import io.lettuce.core.{AbstractRedisClient, ClientOptions, RedisClient,
SslOptions, TimeoutOptions}
import jakarta.annotation.PreDestroy
import jakarta.inject.{Inject, Singleton}
import org.apache.james.filesystem.api.FileSystem
@@ -80,6 +79,7 @@ class RedisClientFactory @Singleton() @Inject()
private def createClientOptions(useSSL: Boolean, mayBeSSLConfiguration:
Option[SSLConfiguration]): ClientOptions = {
val clientOptionsBuilder = ClientOptions.builder
+ clientOptionsBuilder.timeoutOptions(TimeoutOptions.enabled)
if (useSSL) {
mayBeSSLConfiguration.foreach(sslConfig => {
if (!sslConfig.ignoreCertificateCheck) {
diff --git
a/backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisHealthCheck.scala
b/backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisHealthCheck.scala
index 96fbeecb40..fac2326a40 100644
---
a/backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisHealthCheck.scala
+++
b/backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisHealthCheck.scala
@@ -19,25 +19,21 @@
package org.apache.james.backends.redis
-import java.time.Duration
-
import io.lettuce.core.api.reactive.RedisStringReactiveCommands
import io.lettuce.core.cluster.RedisClusterClient
import io.lettuce.core.codec.StringCodec
import io.lettuce.core.masterreplica.MasterReplica
import io.lettuce.core.{AbstractRedisClient, RedisClient}
import jakarta.inject.Inject
-import org.apache.james.backends.redis.RedisHealthCheck.{healthCheckKey,
healthCheckValue, healthcheckTimeout, redisComponent}
+import org.apache.james.backends.redis.RedisHealthCheck.{healthCheckKey,
healthCheckValue, redisComponent}
import org.apache.james.core.healthcheck.{ComponentName, HealthCheck, Result}
import org.reactivestreams.Publisher
import reactor.core.scala.publisher.SMono
import scala.jdk.CollectionConverters._
-import scala.jdk.DurationConverters._
object RedisHealthCheck {
val redisComponent: ComponentName = new ComponentName("Redis")
- val healthcheckTimeout: Duration = Duration.ofSeconds(3)
val healthCheckKey: String = "healthcheck"
val healthCheckValue: String = "healthy"
}
@@ -63,7 +59,6 @@ class RedisHealthCheck @Inject()(redisClientFactory:
RedisClientFactory, redisCo
override def check(): Publisher[Result] =
SMono(redisCommand.set(healthCheckKey, healthCheckValue)
.`then`(redisCommand.getdel(healthCheckKey)))
- .timeout(healthcheckTimeout.toScala)
.map(_ => Result.healthy(redisComponent))
.switchIfEmpty(SMono.just(Result.degraded(redisComponent, "Can not write
to Redis.")))
.onErrorResume(_ => SMono.just(Result.degraded(redisComponent, "Can not
connect to Redis.")))
diff --git
a/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisClusterExtension.java
b/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisClusterExtension.java
index 733a44ee91..eed1e3c3bb 100644
---
a/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisClusterExtension.java
+++
b/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisClusterExtension.java
@@ -176,6 +176,7 @@ public class RedisClusterExtension implements
GuiceModuleTestExtension {
.setScheme("redis")
.setHost(redisContainer.getHost())
.setPort(redisContainer.getMappedPort(DEFAULT_PORT))
+ .setParameter("timeout", "3s")
.build()).get();
}
}
diff --git
a/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisMasterReplicaExtension.java
b/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisMasterReplicaExtension.java
index a37457b8c7..2c09d83146 100644
---
a/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisMasterReplicaExtension.java
+++
b/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisMasterReplicaExtension.java
@@ -92,7 +92,8 @@ public class RedisMasterReplicaExtension implements
GuiceModuleTestExtension {
return redisContainer -> "redis://123@" +
redisContainer.getHost() +
":" +
- redisContainer.getMappedPort(DEFAULT_PORT);
+ redisContainer.getMappedPort(DEFAULT_PORT)
+ + "?timeout=3s";
}
}
diff --git
a/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisSentinelExtension.java
b/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisSentinelExtension.java
index e6f4114694..7d398c1d46 100644
---
a/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisSentinelExtension.java
+++
b/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisSentinelExtension.java
@@ -109,7 +109,7 @@ public class RedisSentinelExtension implements
GuiceModuleTestExtension {
sb.append("redis-sentinel://123@");
sb.append(this.stream().map(container -> container.getHost() + ":"
+ container.getMappedPort(SENTINEL_PORT))
.collect(Collectors.joining(",")));
- sb.append("?sentinelMasterId=mymaster");
+ sb.append("?sentinelMasterId=mymaster&timeout=3s");
return sb.toString();
}
}
diff --git
a/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisTLSExtension.java
b/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisTLSExtension.java
index 963f590f73..21f4d3871a 100644
---
a/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisTLSExtension.java
+++
b/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisTLSExtension.java
@@ -61,6 +61,7 @@ public class RedisTLSExtension implements
GuiceModuleTestExtension {
.append(":")
.append(container.getMappedPort(DEFAULT_PORT))
.append("?verifyPeer=NONE")
+ .append("&timeout=3s")
.toString();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]