Skip to content

Commit 61f40b5

Browse files
authored
JAMES-4072 Enable timeout option in RedisClientFactory (#2706)
1 parent e9184dd commit 61f40b5

File tree

6 files changed

+8
-10
lines changed

6 files changed

+8
-10
lines changed

backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisClientFactory.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@
2020
package org.apache.james.backends.redis
2121

2222
import java.time.Duration
23-
2423
import io.lettuce.core.cluster.{ClusterClientOptions, RedisClusterClient}
2524
import io.lettuce.core.resource.ClientResources
26-
import io.lettuce.core.{AbstractRedisClient, ClientOptions, RedisClient, SslOptions}
25+
import io.lettuce.core.{AbstractRedisClient, ClientOptions, RedisClient, SslOptions, TimeoutOptions}
2726
import jakarta.annotation.PreDestroy
2827
import jakarta.inject.{Inject, Singleton}
2928
import org.apache.james.filesystem.api.FileSystem
@@ -80,6 +79,7 @@ class RedisClientFactory @Singleton() @Inject()
8079

8180
private def createClientOptions(useSSL: Boolean, mayBeSSLConfiguration: Option[SSLConfiguration]): ClientOptions = {
8281
val clientOptionsBuilder = ClientOptions.builder
82+
clientOptionsBuilder.timeoutOptions(TimeoutOptions.enabled)
8383
if (useSSL) {
8484
mayBeSSLConfiguration.foreach(sslConfig => {
8585
if (!sslConfig.ignoreCertificateCheck) {

backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisHealthCheck.scala

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,21 @@
1919

2020
package org.apache.james.backends.redis
2121

22-
import java.time.Duration
23-
2422
import io.lettuce.core.api.reactive.RedisStringReactiveCommands
2523
import io.lettuce.core.cluster.RedisClusterClient
2624
import io.lettuce.core.codec.StringCodec
2725
import io.lettuce.core.masterreplica.MasterReplica
2826
import io.lettuce.core.{AbstractRedisClient, RedisClient}
2927
import jakarta.inject.Inject
30-
import org.apache.james.backends.redis.RedisHealthCheck.{healthCheckKey, healthCheckValue, healthcheckTimeout, redisComponent}
28+
import org.apache.james.backends.redis.RedisHealthCheck.{healthCheckKey, healthCheckValue, redisComponent}
3129
import org.apache.james.core.healthcheck.{ComponentName, HealthCheck, Result}
3230
import org.reactivestreams.Publisher
3331
import reactor.core.scala.publisher.SMono
3432

3533
import scala.jdk.CollectionConverters._
36-
import scala.jdk.DurationConverters._
3734

3835
object RedisHealthCheck {
3936
val redisComponent: ComponentName = new ComponentName("Redis")
40-
val healthcheckTimeout: Duration = Duration.ofSeconds(3)
4137
val healthCheckKey: String = "healthcheck"
4238
val healthCheckValue: String = "healthy"
4339
}
@@ -63,7 +59,6 @@ class RedisHealthCheck @Inject()(redisClientFactory: RedisClientFactory, redisCo
6359
override def check(): Publisher[Result] =
6460
SMono(redisCommand.set(healthCheckKey, healthCheckValue)
6561
.`then`(redisCommand.getdel(healthCheckKey)))
66-
.timeout(healthcheckTimeout.toScala)
6762
.map(_ => Result.healthy(redisComponent))
6863
.switchIfEmpty(SMono.just(Result.degraded(redisComponent, "Can not write to Redis.")))
6964
.onErrorResume(_ => SMono.just(Result.degraded(redisComponent, "Can not connect to Redis.")))

backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisClusterExtension.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ private static Function<GenericContainer, URI> redisURIFunction() {
176176
.setScheme("redis")
177177
.setHost(redisContainer.getHost())
178178
.setPort(redisContainer.getMappedPort(DEFAULT_PORT))
179+
.setParameter("timeout", "3s")
179180
.build()).get();
180181
}
181182
}

backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisMasterReplicaExtension.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ private Function<GenericContainer, String> redisURIFunction() {
9292
return redisContainer -> "redis://123@" +
9393
redisContainer.getHost() +
9494
":" +
95-
redisContainer.getMappedPort(DEFAULT_PORT);
95+
redisContainer.getMappedPort(DEFAULT_PORT)
96+
+ "?timeout=3s";
9697
}
9798
}
9899

backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisSentinelExtension.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ private String createRedisSentinelURI() {
109109
sb.append("redis-sentinel://123@");
110110
sb.append(this.stream().map(container -> container.getHost() + ":" + container.getMappedPort(SENTINEL_PORT))
111111
.collect(Collectors.joining(",")));
112-
sb.append("?sentinelMasterId=mymaster");
112+
sb.append("?sentinelMasterId=mymaster&timeout=3s");
113113
return sb.toString();
114114
}
115115
}

backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisTLSExtension.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ private String redisURI() {
6161
.append(":")
6262
.append(container.getMappedPort(DEFAULT_PORT))
6363
.append("?verifyPeer=NONE")
64+
.append("&timeout=3s")
6465
.toString();
6566
}
6667
}

0 commit comments

Comments
 (0)