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