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]
