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 17d93a52720c44c04e2383c31d0dfa7e49b8fda5
Author: Quan Tran <hqt...@linagora.com>
AuthorDate: Mon Jun 2 11:57:04 2025 +0700

    JAMES-3693 Redis standalone client should take ioThreads and workerThreads 
into account
---
 .../apache/james/backends/redis/RedisClientFactory.scala    | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 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 3c85ee6b1a..a946df18b9 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
@@ -20,8 +20,9 @@
 package org.apache.james.backends.redis
 
 import java.time.Duration
+
 import io.lettuce.core.cluster.{ClusterClientOptions, RedisClusterClient}
-import io.lettuce.core.resource.ClientResources
+import io.lettuce.core.resource.{ClientResources, ThreadFactoryProvider}
 import io.lettuce.core.{AbstractRedisClient, ClientOptions, RedisClient, 
SslOptions, TimeoutOptions}
 import jakarta.annotation.PreDestroy
 import jakarta.inject.{Inject, Singleton}
@@ -34,6 +35,8 @@ import scala.jdk.CollectionConverters._
 
 class RedisClientFactory @Singleton() @Inject()
 (fileSystem: FileSystem, redisConfiguration: RedisConfiguration) {
+  private val threadFactoryProvider: ThreadFactoryProvider = poolName => 
NamedThreadFactory.withName(s"redis-driver-$poolName")
+
   val rawRedisClient: AbstractRedisClient = redisConfiguration match {
     case standaloneRedisConfiguration: StandaloneRedisConfiguration => 
createStandaloneClient(standaloneRedisConfiguration)
     case masterReplicaRedisConfiguration: MasterReplicaRedisConfiguration => 
createMasterReplicaClient(masterReplicaRedisConfiguration)
@@ -43,14 +46,18 @@ class RedisClientFactory @Singleton() @Inject()
 
   private def createStandaloneClient(standaloneRedisConfiguration: 
StandaloneRedisConfiguration, maybeTimeout: Option[Duration] = None): 
RedisClient = {
     maybeTimeout.foreach(timeout => 
standaloneRedisConfiguration.redisURI.setTimeout(timeout))
-    val redisClient = RedisClient.create(standaloneRedisConfiguration.redisURI)
+    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 createClusterClient(clusterRedisConfiguration: 
ClusterRedisConfiguration, maybeTimeout: Option[Duration] = None): 
RedisClusterClient = {
     val resourceBuilder: ClientResources.Builder = ClientResources.builder()
-      .threadFactoryProvider(poolName => 
NamedThreadFactory.withName(s"redis-driver-$poolName"))
+      .threadFactoryProvider(threadFactoryProvider)
     clusterRedisConfiguration.ioThreads.foreach(value => 
resourceBuilder.ioThreadPoolSize(value))
     clusterRedisConfiguration.workerThreads.foreach(value => 
resourceBuilder.computationThreadPoolSize(value))
     val redisClient = RedisClusterClient.create(resourceBuilder.build(),


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org
For additional commands, e-mail: notifications-h...@james.apache.org

Reply via email to