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

commit e3c202a4d4f88e16e4036c69fd6460f487510780
Author: Quan Tran <[email protected]>
AuthorDate: Mon Jun 2 14:24:27 2025 +0700

    JAMES-3693 RedisClientFactory: better method extraction
    
    To simplify the code and avoid duplication.
---
 .../james/backends/redis/RedisClientFactory.scala  | 46 +++++++++-------------
 .../james/backends/redis/RedisConfiguration.scala  |  4 ++
 2 files changed, 22 insertions(+), 28 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 054de42d1f..2474bb2262 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
@@ -21,7 +21,7 @@ package org.apache.james.backends.redis
 
 import io.lettuce.core.cluster.{ClusterClientOptions, RedisClusterClient}
 import io.lettuce.core.resource.{ClientResources, ThreadFactoryProvider}
-import io.lettuce.core.{AbstractRedisClient, ClientOptions, RedisClient, 
SslOptions, TimeoutOptions}
+import io.lettuce.core.{AbstractRedisClient, ClientOptions, RedisClient, 
RedisURI, SslOptions, TimeoutOptions}
 import jakarta.annotation.PreDestroy
 import jakarta.inject.{Inject, Singleton}
 import org.apache.james.filesystem.api.FileSystem
@@ -42,22 +42,11 @@ class RedisClientFactory @Singleton() @Inject()
     case sentinelRedisConfiguration: SentinelRedisConfiguration => 
createSentinelClient(sentinelRedisConfiguration)
   }
 
-  private def createStandaloneClient(standaloneRedisConfiguration: 
StandaloneRedisConfiguration): RedisClient = {
-    val resourceBuilder: ClientResources.Builder = ClientResources.builder()
-      .threadFactoryProvider(threadFactoryProvider)
-    standaloneRedisConfiguration.ioThreads.foreach(value => 
resourceBuilder.ioThreadPoolSize(value))
-    standaloneRedisConfiguration.workerThreads.foreach(value => 
resourceBuilder.computationThreadPoolSize(value))
-    val redisClient = RedisClient.create(resourceBuilder.build(), 
standaloneRedisConfiguration.redisURI)
-    
redisClient.setOptions(createClientOptions(standaloneRedisConfiguration.useSSL, 
standaloneRedisConfiguration.mayBeSSLConfiguration))
-    redisClient
-  }
+  private def createStandaloneClient(standaloneRedisConfiguration: 
StandaloneRedisConfiguration): RedisClient =
+    createRedisClient(standaloneRedisConfiguration, 
Some(standaloneRedisConfiguration.redisURI))
 
   private def createClusterClient(clusterRedisConfiguration: 
ClusterRedisConfiguration): RedisClusterClient = {
-    val resourceBuilder: ClientResources.Builder = ClientResources.builder()
-      .threadFactoryProvider(threadFactoryProvider)
-    clusterRedisConfiguration.ioThreads.foreach(value => 
resourceBuilder.ioThreadPoolSize(value))
-    clusterRedisConfiguration.workerThreads.foreach(value => 
resourceBuilder.computationThreadPoolSize(value))
-    val redisClient = RedisClusterClient.create(resourceBuilder.build(),
+    val redisClient = 
RedisClusterClient.create(createClientResources(clusterRedisConfiguration),
       clusterRedisConfiguration.redisURI.value.asJava)
     redisClient.setOptions(ClusterClientOptions.builder(
         createClientOptions(clusterRedisConfiguration.useSSL, 
clusterRedisConfiguration.mayBeSSLConfiguration))
@@ -65,24 +54,25 @@ class RedisClientFactory @Singleton() @Inject()
     redisClient
   }
 
-  private def createMasterReplicaClient(masterReplicaRedisConfiguration: 
MasterReplicaRedisConfiguration): RedisClient = {
-    val resourceBuilder: ClientResources.Builder = ClientResources.builder()
-      .threadFactoryProvider(threadFactoryProvider)
-    masterReplicaRedisConfiguration.ioThreads.foreach(value => 
resourceBuilder.ioThreadPoolSize(value))
-    masterReplicaRedisConfiguration.workerThreads.foreach(value => 
resourceBuilder.computationThreadPoolSize(value))
-    val redisClient = RedisClient.create(resourceBuilder.build())
-    
redisClient.setOptions(createClientOptions(masterReplicaRedisConfiguration.useSSL,
 masterReplicaRedisConfiguration.mayBeSSLConfiguration))
+  private def createMasterReplicaClient(masterReplicaRedisConfiguration: 
MasterReplicaRedisConfiguration): RedisClient =
+    createRedisClient(masterReplicaRedisConfiguration, maybeRedisUri = None)
+
+  private def createSentinelClient(sentinelRedisConfiguration: 
SentinelRedisConfiguration): RedisClient =
+    createRedisClient(sentinelRedisConfiguration, 
Some(sentinelRedisConfiguration.redisURI))
+
+  private def createRedisClient(redisConfiguration: RedisConfiguration, 
maybeRedisUri: Option[RedisURI]): RedisClient = {
+    val redisClient = maybeRedisUri.map(redisUri => 
RedisClient.create(createClientResources(redisConfiguration), redisUri))
+      .getOrElse(RedisClient.create(createClientResources(redisConfiguration)))
+    redisClient.setOptions(createClientOptions(redisConfiguration.useSSL, 
redisConfiguration.mayBeSSLConfiguration))
     redisClient
   }
 
-  private def createSentinelClient(sentinelRedisConfiguration: 
SentinelRedisConfiguration): RedisClient = {
+  private def createClientResources(redisConfiguration: RedisConfiguration): 
ClientResources = {
     val resourceBuilder: ClientResources.Builder = ClientResources.builder()
       .threadFactoryProvider(threadFactoryProvider)
-    sentinelRedisConfiguration.ioThreads.foreach(value => 
resourceBuilder.ioThreadPoolSize(value))
-    sentinelRedisConfiguration.workerThreads.foreach(value => 
resourceBuilder.computationThreadPoolSize(value))
-    val redisClient = RedisClient.create(resourceBuilder.build(), 
sentinelRedisConfiguration.redisURI)
-    
redisClient.setOptions(createClientOptions(sentinelRedisConfiguration.useSSL, 
sentinelRedisConfiguration.mayBeSSLConfiguration))
-    redisClient
+    redisConfiguration.ioThreads.foreach(value => 
resourceBuilder.ioThreadPoolSize(value))
+    redisConfiguration.workerThreads.foreach(value => 
resourceBuilder.computationThreadPoolSize(value))
+    resourceBuilder.build()
   }
 
   private def createClientOptions(useSSL: Boolean, mayBeSSLConfiguration: 
Option[SSLConfiguration]): ClientOptions = {
diff --git 
a/backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisConfiguration.scala
 
b/backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisConfiguration.scala
index 83329fc596..cc4b387b79 100644
--- 
a/backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisConfiguration.scala
+++ 
b/backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisConfiguration.scala
@@ -97,6 +97,10 @@ trait RedisConfiguration {
 
   def workerThreads: Option[Int]
 
+  def useSSL: Boolean
+
+  def mayBeSSLConfiguration: Option[SSLConfiguration]
+
   def asString: String
 }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to