You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2017/11/01 11:00:08 UTC

[10/15] james-project git commit: JAMES-2202 Solve bug when multiple hosts are passed to ElasticSearch configuration

JAMES-2202 Solve bug when multiple hosts are passed to ElasticSearch configuration


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/76699b3c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/76699b3c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/76699b3c

Branch: refs/heads/master
Commit: 76699b3cb4313ca2f73c4da758f328b68aa19a1f
Parents: 0480d7c
Author: benwa <bt...@linagora.com>
Authored: Thu Oct 26 09:44:48 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed Nov 1 17:55:12 2017 +0700

----------------------------------------------------------------------
 .../mailbox/ElasticSearchConfiguration.java     | 17 ++++++++----
 .../mailbox/ElasticSearchConfigurationTest.java | 29 ++++++++++++++++----
 .../main/java/org/apache/james/util/Host.java   |  2 +-
 3 files changed, 35 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/76699b3c/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchConfiguration.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchConfiguration.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchConfiguration.java
index 3fc502f..e73ecc7 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchConfiguration.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchConfiguration.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.modules.mailbox;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
 
@@ -30,6 +32,7 @@ import org.apache.james.mailbox.elasticsearch.IndexAttachments;
 import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
 import org.apache.james.util.Host;
 
+import com.github.steveash.guavate.Guavate;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
 
@@ -52,6 +55,7 @@ public class ElasticSearchConfiguration {
     public static final int DEFAULT_NB_SHARDS = 1;
     public static final int DEFAULT_NB_REPLICA = 0;
     public static final int DEFAULT_PORT = 9300;
+    public static final Optional<Integer> DEFAULT_PORT_AS_OPTIONAL = Optional.of(DEFAULT_PORT);
 
     public static ElasticSearchConfiguration fromProperties(PropertiesConfiguration configuration) throws ConfigurationException {
         int nbShards = configuration.getInt(ELASTICSEARCH_NB_SHARDS, DEFAULT_NB_SHARDS);
@@ -95,8 +99,7 @@ public class ElasticSearchConfiguration {
             propertiesReader.getString(ELASTICSEARCH_MASTER_HOST, null));
         Optional<Integer> masterPort = Optional.ofNullable(
             propertiesReader.getInteger(ELASTICSEARCH_PORT, null));
-        Optional<String> multiHosts = Optional.ofNullable(
-            propertiesReader.getString(ELASTICSEARCH_HOSTS, null));
+        List<String> multiHosts = Arrays.asList(propertiesReader.getStringArray(ELASTICSEARCH_HOSTS));
 
         validateHostsConfigurationOptions(masterHost, masterPort, multiHosts);
 
@@ -105,21 +108,23 @@ public class ElasticSearchConfiguration {
                 Host.from(masterHost.get(),
                 masterPort.get()));
         } else {
-            return Host.parseHosts(multiHosts.get(), DEFAULT_PORT);
+            return multiHosts.stream()
+                .map(ipAndPort -> Host.parse(ipAndPort, DEFAULT_PORT_AS_OPTIONAL))
+                .collect(Guavate.toImmutableList());
         }
     }
 
     @VisibleForTesting
     static void validateHostsConfigurationOptions(Optional<String> masterHost,
                                                   Optional<Integer> masterPort,
-                                                  Optional<String> multiHosts) throws ConfigurationException {
+                                                  List<String> multiHosts) throws ConfigurationException {
         if (masterHost.isPresent() != masterPort.isPresent()) {
             throw new ConfigurationException(ELASTICSEARCH_MASTER_HOST + " and " + ELASTICSEARCH_PORT + " should be specified together");
         }
-        if (multiHosts.isPresent() && masterHost.isPresent()) {
+        if (!multiHosts.isEmpty() && masterHost.isPresent()) {
             throw new ConfigurationException("You should choose between mono host set up and " + ELASTICSEARCH_HOSTS);
         }
-        if (!multiHosts.isPresent() && !masterHost.isPresent()) {
+        if (multiHosts.isEmpty() && !masterHost.isPresent()) {
             throw new ConfigurationException("You should specify either (" + ELASTICSEARCH_MASTER_HOST + " and " + ELASTICSEARCH_PORT + ") or " + ELASTICSEARCH_HOSTS);
         }
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/76699b3c/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/ElasticSearchConfigurationTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/ElasticSearchConfigurationTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/ElasticSearchConfigurationTest.java
index 514f967..9c1a3fc 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/ElasticSearchConfigurationTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/ElasticSearchConfigurationTest.java
@@ -33,6 +33,8 @@ import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
 import org.apache.james.util.Host;
 import org.junit.Test;
 
+import com.google.common.collect.ImmutableList;
+
 public class ElasticSearchConfigurationTest {
 
     @Test
@@ -253,6 +255,21 @@ public class ElasticSearchConfigurationTest {
     }
 
     @Test
+    public void getHostsShouldReturnConfiguredHostsWhenListIsUsed() throws ConfigurationException {
+        String hostname = "myHost";
+        String hostname2 = "myOtherHost";
+        int port = 2154;
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", hostname + "," + hostname2 + ":" + port);
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getHosts())
+            .containsOnly(Host.from(hostname, ElasticSearchConfiguration.DEFAULT_PORT),
+                Host.from(hostname2, port));
+    }
+
+    @Test
     public void getHostsShouldReturnConfiguredHosts() throws ConfigurationException {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
         String hostname = "myHost";
@@ -285,7 +302,7 @@ public class ElasticSearchConfigurationTest {
             ElasticSearchConfiguration.validateHostsConfigurationOptions(
                 Optional.empty(),
                 Optional.empty(),
-                Optional.empty()))
+                ImmutableList.of()))
             .isInstanceOf(ConfigurationException.class)
             .hasMessage("You should specify either (" + ElasticSearchConfiguration.ELASTICSEARCH_MASTER_HOST +
                 " and " + ElasticSearchConfiguration.ELASTICSEARCH_PORT +
@@ -298,7 +315,7 @@ public class ElasticSearchConfigurationTest {
             ElasticSearchConfiguration.validateHostsConfigurationOptions(
                 Optional.of("localhost"),
                 Optional.of(9200),
-                Optional.of("localhost:9200")))
+                ImmutableList.of("localhost:9200")))
             .isInstanceOf(ConfigurationException.class)
             .hasMessage("You should choose between mono host set up and " + ElasticSearchConfiguration.ELASTICSEARCH_HOSTS);
     }
@@ -309,7 +326,7 @@ public class ElasticSearchConfigurationTest {
             ElasticSearchConfiguration.validateHostsConfigurationOptions(
                 Optional.of("localhost"),
                 Optional.empty(),
-                Optional.empty()))
+                ImmutableList.of()))
             .isInstanceOf(ConfigurationException.class)
             .hasMessage(ElasticSearchConfiguration.ELASTICSEARCH_MASTER_HOST +
                 " and " + ElasticSearchConfiguration.ELASTICSEARCH_PORT + " should be specified together");
@@ -321,7 +338,7 @@ public class ElasticSearchConfigurationTest {
         ElasticSearchConfiguration.validateHostsConfigurationOptions(
             Optional.empty(),
             Optional.of(9200),
-            Optional.empty()))
+            ImmutableList.of()))
         .isInstanceOf(ConfigurationException.class)
         .hasMessage(ElasticSearchConfiguration.ELASTICSEARCH_MASTER_HOST + " and " +
             ElasticSearchConfiguration.ELASTICSEARCH_PORT + " should be specified together");
@@ -332,7 +349,7 @@ public class ElasticSearchConfigurationTest {
         ElasticSearchConfiguration.validateHostsConfigurationOptions(
             Optional.of("localhost"),
             Optional.of(9200),
-            Optional.empty());
+            ImmutableList.of());
     }
 
     @Test
@@ -340,7 +357,7 @@ public class ElasticSearchConfigurationTest {
         ElasticSearchConfiguration.validateHostsConfigurationOptions(
             Optional.empty(),
             Optional.empty(),
-            Optional.of("localhost:9200"));
+            ImmutableList.of("localhost:9200"));
     }
 
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/76699b3c/server/container/util-java8/src/main/java/org/apache/james/util/Host.java
----------------------------------------------------------------------
diff --git a/server/container/util-java8/src/main/java/org/apache/james/util/Host.java b/server/container/util-java8/src/main/java/org/apache/james/util/Host.java
index 4776f06..9adc41c 100644
--- a/server/container/util-java8/src/main/java/org/apache/james/util/Host.java
+++ b/server/container/util-java8/src/main/java/org/apache/james/util/Host.java
@@ -62,7 +62,7 @@ public class Host {
         return parse(ipAndPort, Optional.empty());
     }
 
-    private static Host parse(String ipAndPort, Optional<Integer> defaultPort) {
+    public static Host parse(String ipAndPort, Optional<Integer> defaultPort) {
         Preconditions.checkNotNull(ipAndPort);
         Preconditions.checkArgument(!ipAndPort.isEmpty());
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org