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

Reply via email to