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 5cb6179db779519508118a2a5d266919b4f89348 Author: Rene Cordier <rcord...@linagora.com> AuthorDate: Tue Apr 1 11:46:00 2025 +0700 [JAMES-3693] Adapt RateLimiter with new factory rawRedisClient method --- .../james/backends/redis/RedisClientFactory.scala | 20 ++++---------------- .../rate/limiter/redis/RedisRateLimiter.scala | 22 ++++++++++++---------- 2 files changed, 16 insertions(+), 26 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 6343193602..688c16d6ae 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 @@ -39,26 +39,14 @@ class RedisClientFactory @Singleton() @Inject() case sentinelRedisConfiguration: SentinelRedisConfiguration => createSentinelClient(sentinelRedisConfiguration) } - def createStandaloneClient(standaloneRedisConfiguration: StandaloneRedisConfiguration): RedisClient = - createStandaloneClient(standaloneRedisConfiguration, Option.empty) - - def createStandaloneClient(standaloneRedisConfiguration: StandaloneRedisConfiguration, timeout: Duration): RedisClient = - createStandaloneClient(standaloneRedisConfiguration, Option.apply(timeout)) - - def createStandaloneClient(standaloneRedisConfiguration: StandaloneRedisConfiguration, maybeTimeout: Option[Duration]): RedisClient = { + private def createStandaloneClient(standaloneRedisConfiguration: StandaloneRedisConfiguration, maybeTimeout: Option[Duration] = None): RedisClient = { maybeTimeout.foreach(timeout => standaloneRedisConfiguration.redisURI.setTimeout(timeout)) val redisClient = RedisClient.create(standaloneRedisConfiguration.redisURI) redisClient.setOptions(createClientOptions(standaloneRedisConfiguration.useSSL, standaloneRedisConfiguration.mayBeSSLConfiguration)) redisClient } - def createClusterClient(clusterRedisConfiguration: ClusterRedisConfiguration): RedisClusterClient = - createClusterClient(clusterRedisConfiguration, Option.empty) - - def createClusterClient(clusterRedisConfiguration: ClusterRedisConfiguration, timeout: Duration): RedisClusterClient = - createClusterClient(clusterRedisConfiguration, Option.apply(timeout)) - - def createClusterClient(clusterRedisConfiguration: ClusterRedisConfiguration, maybeTimeout: Option[Duration]): RedisClusterClient = { + private def createClusterClient(clusterRedisConfiguration: ClusterRedisConfiguration, maybeTimeout: Option[Duration] = None): RedisClusterClient = { val resourceBuilder: ClientResources.Builder = ClientResources.builder() .threadFactoryProvider(poolName => NamedThreadFactory.withName(s"redis-driver-$poolName")) clusterRedisConfiguration.ioThreads.foreach(value => resourceBuilder.ioThreadPoolSize(value)) @@ -75,13 +63,13 @@ class RedisClientFactory @Singleton() @Inject() redisClient } - def createMasterReplicaClient(masterReplicaRedisConfiguration: MasterReplicaRedisConfiguration): RedisClient = { + private def createMasterReplicaClient(masterReplicaRedisConfiguration: MasterReplicaRedisConfiguration): RedisClient = { val redisClient = RedisClient.create redisClient.setOptions(createClientOptions(masterReplicaRedisConfiguration.useSSL, masterReplicaRedisConfiguration.mayBeSSLConfiguration)) redisClient } - def createSentinelClient(sentinelRedisConfiguration: SentinelRedisConfiguration): RedisClient = { + private def createSentinelClient(sentinelRedisConfiguration: SentinelRedisConfiguration): RedisClient = { val redisClient = RedisClient.create redisClient.setOptions(createClientOptions(sentinelRedisConfiguration.useSSL, sentinelRedisConfiguration.mayBeSSLConfiguration)) redisClient 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 0c129f5911..fd200a10c6 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 @@ -25,6 +25,8 @@ import com.google.common.collect.ImmutableList import com.google.inject.{AbstractModule, Provides, Scopes} import es.moki.ratelimitj.core.limiter.request.{AbstractRequestRateLimiterFactory, ReactiveRequestRateLimiter, RequestLimitRule} import es.moki.ratelimitj.redis.request.{RedisClusterRateLimiterFactory, RedisSlidingWindowRequestRateLimiter, RedisRateLimiterFactory => RedisSingleInstanceRateLimitjFactory} +import io.lettuce.core.cluster.RedisClusterClient +import io.lettuce.core.{AbstractRedisClient, RedisClient} import jakarta.inject.Inject import org.apache.james.backends.redis.{ClusterRedisConfiguration, MasterReplicaRedisConfiguration, RedisClientFactory, RedisConfiguration, SentinelRedisConfiguration, StandaloneRedisConfiguration} import org.apache.james.rate.limiter.api.Increment.Increment @@ -49,22 +51,22 @@ class RedisRateLimiterModule() extends AbstractModule { } class RedisRateLimiterFactory @Inject()(redisConfiguration: RedisConfiguration, redisClientFactory: RedisClientFactory) extends RateLimiterFactory { - val rateLimitjFactory: AbstractRequestRateLimiterFactory[RedisSlidingWindowRequestRateLimiter] = redisConfiguration match { - case standaloneConfiguration: StandaloneRedisConfiguration => new RedisSingleInstanceRateLimitjFactory(redisClientFactory.createStandaloneClient(standaloneConfiguration)) + private val rawRedisClient: AbstractRedisClient = redisClientFactory.createRawRedisClient() + private val rateLimitjFactory: AbstractRequestRateLimiterFactory[RedisSlidingWindowRequestRateLimiter] = redisConfiguration match { + case _: StandaloneRedisConfiguration => new RedisSingleInstanceRateLimitjFactory(rawRedisClient.asInstanceOf[RedisClient]) - case clusterRedisConfiguration: ClusterRedisConfiguration => - new RedisClusterRateLimiterFactory(redisClientFactory.createClusterClient(clusterRedisConfiguration)) + case _: ClusterRedisConfiguration => + new RedisClusterRateLimiterFactory(rawRedisClient.asInstanceOf[RedisClusterClient]) case masterReplicaRedisConfiguration: MasterReplicaRedisConfiguration => new RedisMasterReplicaRateLimiterFactory( - redisClientFactory.createMasterReplicaClient(masterReplicaRedisConfiguration), + rawRedisClient.asInstanceOf[RedisClient], masterReplicaRedisConfiguration.redisURI.value.asJava, masterReplicaRedisConfiguration.readFrom) - case sentinelRedisConfiguration: SentinelRedisConfiguration => - new RedisMasterReplicaRateLimiterFactory(redisClientFactory.createSentinelClient(sentinelRedisConfiguration), - ImmutableList.of(sentinelRedisConfiguration.redisURI), - sentinelRedisConfiguration.readFrom - ) + case sentinelRedisConfiguration: SentinelRedisConfiguration => new RedisMasterReplicaRateLimiterFactory( + rawRedisClient.asInstanceOf[RedisClient], + ImmutableList.of(sentinelRedisConfiguration.redisURI), + sentinelRedisConfiguration.readFrom) case _ => throw new NotImplementedError() } --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org