This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


The following commit(s) were added to refs/heads/master by this push:
     new 874764038e JAMES-3693 Fixup parsing `redisURL` when cluster with multi 
url endpoint
874764038e is described below

commit 874764038ec0dc7c8292c5edce2190dbbd83969a
Author: Tung Tran <vtt...@linagora.com>
AuthorDate: Mon Apr 29 11:30:32 2024 +0700

    JAMES-3693 Fixup parsing `redisURL` when cluster with multi url endpoint
    
    - Before:
    Ex: redisURL=redis://redis1:6379,redis://redis2:6379
    Then RedisUris has size = 1
    
    - After: RedisUris has size = 2
---
 .../james/backends/redis/RedisConfiguration.scala  | 28 ++++++++++++++++++----
 .../backends/redis/RedisConfigurationTest.scala    |  2 ++
 2 files changed, 25 insertions(+), 5 deletions(-)

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 5881f43156..ce6fbe10bf 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
@@ -26,20 +26,36 @@ import eu.timepit.refined.collection.NonEmpty
 import io.lettuce.core.RedisURI
 import org.apache.commons.configuration2.Configuration
 import org.apache.james.backends.redis.RedisUris.RedisUris
+import org.slf4j.{Logger, LoggerFactory}
 
 object RedisConfiguration {
   val CLUSTER_ENABLED_DEFAULT = false
 
-  def from(config: Configuration): RedisConfiguration =
-    from(config.getString("redisURL"),
+  val LOGGER: Logger = LoggerFactory.getLogger(classOf[RedisConfiguration])
+
+  def from(config: Configuration): RedisConfiguration = {
+    val configuration = from(config.getStringArray("redisURL"),
       config.getBoolean("cluster.enabled", CLUSTER_ENABLED_DEFAULT),
       Option(config.getInteger("redis.ioThreads", null)).map(Integer2int),
       Option(config.getInteger("redis.workerThreads", null)).map(Integer2int))
 
-  def from(redisUri: String, isCluster: Boolean, ioThreads: Option[Int], 
workerThreads:Option[Int]): RedisConfiguration = {
-    Preconditions.checkArgument(redisUri != null && !redisUri.isBlank)
+    LOGGER.info("Redis was loaded with configuration: \n" +
+      "redisURL: {}\n" +
+      "isCluster: {}\n" +
+      "redis.ioThreads: {}\n" +
+      "redis.workerThreads: {}", 
configuration.redisURI.value.map(_.toString).mkString(";"),
+      configuration.isCluster, configuration.ioThreads, 
configuration.workerThreads)
+
+    configuration
+  }
+
+  def from(redisUri: String, isCluster: Boolean, ioThreads: Option[Int], 
workerThreads: Option[Int]): RedisConfiguration =
+    from(Array(redisUri), isCluster, ioThreads, workerThreads)
+
+  def from(redisUris: Array[String], isCluster: Boolean, ioThreads: 
Option[Int], workerThreads: Option[Int]): RedisConfiguration = {
+    Preconditions.checkArgument(redisUris != null && redisUris.length > 0)
     Preconditions.checkNotNull(isCluster)
-    RedisConfiguration(RedisUris.from(redisUri), isCluster, ioThreads, 
workerThreads)
+    RedisConfiguration(RedisUris.from(redisUris), isCluster, ioThreads, 
workerThreads)
   }
 
   def from(redisUri: String, isCluster: Boolean): RedisConfiguration = 
from(redisUri, isCluster, None, None)
@@ -62,6 +78,8 @@ object RedisUris {
     }
 
   def from(value: String): RedisUris = 
liftOrThrow(value.split(',').toList.map(RedisURI.create))
+
+  def from(value: Array[String]): RedisUris = 
liftOrThrow(value.toList.map(RedisURI.create))
 }
 
 case class RedisConfiguration(redisURI: RedisUris, isCluster: Boolean, 
ioThreads: Option[Int], workerThreads:Option[Int])
diff --git 
a/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisConfigurationTest.scala
 
b/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisConfigurationTest.scala
index 94b1005569..b304089c89 100644
--- 
a/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisConfigurationTest.scala
+++ 
b/backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisConfigurationTest.scala
@@ -21,6 +21,7 @@ package org.apache.james.backends.redis
 
 import io.lettuce.core.RedisURI
 import org.apache.commons.configuration2.PropertiesConfiguration
+import org.apache.commons.configuration2.convert.DefaultListDelimiterHandler
 import org.scalatest.flatspec.AnyFlatSpec
 import org.scalatest.matchers.should.Matchers
 
@@ -44,6 +45,7 @@ class RedisConfigurationTest extends AnyFlatSpec with 
Matchers {
 
   it should "parse multiple Redis URIs from config" in {
     val config = new PropertiesConfiguration()
+    config.setListDelimiterHandler(new DefaultListDelimiterHandler(','))
     config.addProperty("redisURL", 
"redis://localhost:6379,redis://localhost:6380")
     config.addProperty("cluster.enabled", true)
     config.addProperty("redis.ioThreads", 16)


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

Reply via email to