You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by hq...@apache.org on 2025/06/04 07:44:16 UTC
(james-project) 07/10: JAMES-3693 RedisClientFactory: better method extraction
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 <hq...@linagora.com>
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: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org