This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit b808dcc5b04aa46e53e26a423f89654aae4ff9f3 Author: Rene Cordier <rcord...@linagora.com> AuthorDate: Tue Apr 1 14:35:21 2025 +0700 [JAMES-3693] Only one RedisClient declaration is necessary --- .../org/apache/james/backends/redis/RedisClientFactory.scala | 12 +++++++++++- .../org/apache/james/backends/redis/RedisHealthCheck.scala | 12 +----------- .../apache/james/rate/limiter/redis/RedisRateLimiter.scala | 2 +- 3 files changed, 13 insertions(+), 13 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 688c16d6ae..96b224b0f4 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 @@ -24,15 +24,18 @@ 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 jakarta.annotation.PreDestroy import jakarta.inject.{Inject, Singleton} import org.apache.james.filesystem.api.FileSystem import org.apache.james.util.concurrent.NamedThreadFactory +import reactor.core.publisher.Mono +import reactor.core.scheduler.Schedulers import scala.jdk.CollectionConverters._ class RedisClientFactory @Singleton() @Inject() (fileSystem: FileSystem, redisConfiguration: RedisConfiguration) { - def createRawRedisClient(): AbstractRedisClient = redisConfiguration match { + val rawRedisClient: AbstractRedisClient = redisConfiguration match { case standaloneRedisConfiguration: StandaloneRedisConfiguration => createStandaloneClient(standaloneRedisConfiguration) case masterReplicaRedisConfiguration: MasterReplicaRedisConfiguration => createMasterReplicaClient(masterReplicaRedisConfiguration) case clusterRedisConfiguration: ClusterRedisConfiguration => createClusterClient(clusterRedisConfiguration) @@ -89,4 +92,11 @@ class RedisClientFactory @Singleton() @Inject() } clientOptionsBuilder.build() } + + @PreDestroy + def close(): Unit = { + Mono.fromCompletionStage(rawRedisClient.shutdownAsync()) + .subscribeOn(Schedulers.boundedElastic()) + .subscribe() + } } 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 5ab511a8cc..96fbeecb40 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 @@ -26,14 +26,11 @@ 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.annotation.PreDestroy import jakarta.inject.Inject import org.apache.james.backends.redis.RedisHealthCheck.{healthCheckKey, healthCheckValue, healthcheckTimeout, redisComponent} import org.apache.james.core.healthcheck.{ComponentName, HealthCheck, Result} import org.reactivestreams.Publisher -import reactor.core.publisher.Mono import reactor.core.scala.publisher.SMono -import reactor.core.scheduler.Schedulers import scala.jdk.CollectionConverters._ import scala.jdk.DurationConverters._ @@ -47,7 +44,7 @@ object RedisHealthCheck { class RedisHealthCheck @Inject()(redisClientFactory: RedisClientFactory, redisConfiguration: RedisConfiguration) extends HealthCheck { - private val rawRedisClient: AbstractRedisClient = redisClientFactory.createRawRedisClient() + private val rawRedisClient: AbstractRedisClient = redisClientFactory.rawRedisClient private val redisCommand: RedisStringReactiveCommands[String, String] = redisConfiguration match { case _: StandaloneRedisConfiguration => rawRedisClient.asInstanceOf[RedisClient].connect().reactive() case _: ClusterRedisConfiguration => rawRedisClient.asInstanceOf[RedisClusterClient].connect().reactive() @@ -70,11 +67,4 @@ class RedisHealthCheck @Inject()(redisClientFactory: RedisClientFactory, redisCo .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."))) - - @PreDestroy - def close(): Unit = { - Mono.fromCompletionStage(rawRedisClient.shutdownAsync()) - .subscribeOn(Schedulers.boundedElastic()) - .subscribe() - } } diff --git a/server/mailet/rate-limiter-redis/src/main/scala/org/apache/james/rate/limiter/redis/RedisRateLimiter.scala b/server/mailet/rate-limiter-redis/src/main/scala/org/apache/james/rate/limiter/redis/RedisRateLimiter.scala index fd200a10c6..fb9c64fea5 100644 --- a/server/mailet/rate-limiter-redis/src/main/scala/org/apache/james/rate/limiter/redis/RedisRateLimiter.scala +++ b/server/mailet/rate-limiter-redis/src/main/scala/org/apache/james/rate/limiter/redis/RedisRateLimiter.scala @@ -51,7 +51,7 @@ class RedisRateLimiterModule() extends AbstractModule { } class RedisRateLimiterFactory @Inject()(redisConfiguration: RedisConfiguration, redisClientFactory: RedisClientFactory) extends RateLimiterFactory { - private val rawRedisClient: AbstractRedisClient = redisClientFactory.createRawRedisClient() + private val rawRedisClient: AbstractRedisClient = redisClientFactory.rawRedisClient private val rateLimitjFactory: AbstractRequestRateLimiterFactory[RedisSlidingWindowRequestRateLimiter] = redisConfiguration match { case _: StandaloneRedisConfiguration => new RedisSingleInstanceRateLimitjFactory(rawRedisClient.asInstanceOf[RedisClient]) --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org