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