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 <vtt...@linagora.com>
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: notifications-unsubscr...@james.apache.org
For additional commands, e-mail: notifications-h...@james.apache.org

Reply via email to