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 ro...@apache.org on 2019/10/25 07:22:24 UTC

[james-project] 01/03: JAMES-2922 Add waitForActiveShards property in ElasticSearch configuration

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

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

commit f96786c4aaa9f9fb49428c4d7475e2ea3c873279
Author: Antoine DUPRAT <ad...@linagora.com>
AuthorDate: Thu Oct 10 12:49:50 2019 +0200

    JAMES-2922 Add waitForActiveShards property in ElasticSearch configuration
---
 .../backends/es/ElasticSearchConfiguration.java    | 24 +++++++++--
 .../es/ElasticSearchConfigurationTest.java         | 47 +++++++++++++++++++++-
 2 files changed, 67 insertions(+), 4 deletions(-)

diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchConfiguration.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchConfiguration.java
index 0f21537..f50200f 100644
--- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchConfiguration.java
+++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchConfiguration.java
@@ -37,12 +37,12 @@ import com.google.common.collect.ImmutableList;
 
 public class ElasticSearchConfiguration {
 
-
     public static class Builder {
 
         private final ImmutableList.Builder<Host> hosts;
         private Optional<Integer> nbShards;
         private Optional<Integer> nbReplica;
+        private Optional<Integer> waitForActiveShards;
         private Optional<Integer> minDelay;
         private Optional<Integer> maxRetries;
         private Optional<Duration> requestTimeout;
@@ -51,6 +51,7 @@ public class ElasticSearchConfiguration {
             hosts = ImmutableList.builder();
             nbShards = Optional.empty();
             nbReplica = Optional.empty();
+            waitForActiveShards = Optional.empty();
             minDelay = Optional.empty();
             maxRetries = Optional.empty();
             requestTimeout = Optional.empty();
@@ -78,6 +79,12 @@ public class ElasticSearchConfiguration {
             return this;
         }
 
+        public Builder waitForActiveShards(int waitForActiveShards) {
+            Preconditions.checkArgument(waitForActiveShards >= 0, "You need the number of waitForActiveShards to be positive");
+            this.waitForActiveShards = Optional.of(waitForActiveShards);
+            return this;
+        }
+
         public Builder minDelay(Optional<Integer> minDelay) {
             this.minDelay = minDelay;
             return this;
@@ -100,6 +107,7 @@ public class ElasticSearchConfiguration {
                 hosts,
                 nbShards.orElse(DEFAULT_NB_SHARDS),
                 nbReplica.orElse(DEFAULT_NB_REPLICA),
+                waitForActiveShards.orElse(DEFAULT_WAIT_FOR_ACTIVE_SHARDS),
                 minDelay.orElse(DEFAULT_CONNECTION_MIN_DELAY),
                 maxRetries.orElse(DEFAULT_CONNECTION_MAX_RETRIES),
                 requestTimeout.orElse(DEFAULT_REQUEST_TIMEOUT));
@@ -114,6 +122,7 @@ public class ElasticSearchConfiguration {
     public static final String ELASTICSEARCH_MASTER_HOST = "elasticsearch.masterHost";
     public static final String ELASTICSEARCH_PORT = "elasticsearch.port";
     public static final String ELASTICSEARCH_NB_REPLICA = "elasticsearch.nb.replica";
+    public static final String WAIT_FOR_ACTIVE_SHARDS = "elasticsearch.index.waitForActiveShards";
     public static final String ELASTICSEARCH_NB_SHARDS = "elasticsearch.nb.shards";
     public static final String ELASTICSEARCH_RETRY_CONNECTION_MIN_DELAY = "elasticsearch.retryConnection.minDelay";
     public static final String ELASTICSEARCH_RETRY_CONNECTION_MAX_RETRIES = "elasticsearch.retryConnection.maxRetries";
@@ -123,6 +132,7 @@ public class ElasticSearchConfiguration {
     public static final Duration DEFAULT_REQUEST_TIMEOUT = Duration.ofSeconds(30);
     public static final int DEFAULT_NB_SHARDS = 5;
     public static final int DEFAULT_NB_REPLICA = 1;
+    public static final int DEFAULT_WAIT_FOR_ACTIVE_SHARDS = 1;
     public static final int DEFAULT_PORT = 9200;
     public static final String LOCALHOST = "127.0.0.1";
     public static final Optional<Integer> DEFAULT_PORT_AS_OPTIONAL = Optional.of(DEFAULT_PORT);
@@ -136,6 +146,7 @@ public class ElasticSearchConfiguration {
             .addHosts(getHosts(configuration))
             .nbShards(configuration.getInteger(ELASTICSEARCH_NB_SHARDS, DEFAULT_NB_SHARDS))
             .nbReplica(configuration.getInteger(ELASTICSEARCH_NB_REPLICA, DEFAULT_NB_REPLICA))
+            .waitForActiveShards(configuration.getInteger(WAIT_FOR_ACTIVE_SHARDS, DEFAULT_WAIT_FOR_ACTIVE_SHARDS))
             .minDelay(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_RETRY_CONNECTION_MIN_DELAY, null)))
             .maxRetries(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_RETRY_CONNECTION_MAX_RETRIES, null)))
             .build();
@@ -179,14 +190,16 @@ public class ElasticSearchConfiguration {
     private final ImmutableList<Host> hosts;
     private final int nbShards;
     private final int nbReplica;
+    private final int waitForActiveShards;
     private final int minDelay;
     private final int maxRetries;
     private final Duration requestTimeout;
 
-    private ElasticSearchConfiguration(ImmutableList<Host> hosts, int nbShards, int nbReplica, int minDelay, int maxRetries, Duration requestTimeout) {
+    private ElasticSearchConfiguration(ImmutableList<Host> hosts, int nbShards, int nbReplica, int waitForActiveShards, int minDelay, int maxRetries, Duration requestTimeout) {
         this.hosts = hosts;
         this.nbShards = nbShards;
         this.nbReplica = nbReplica;
+        this.waitForActiveShards = waitForActiveShards;
         this.minDelay = minDelay;
         this.maxRetries = maxRetries;
         this.requestTimeout = requestTimeout;
@@ -204,6 +217,10 @@ public class ElasticSearchConfiguration {
         return nbReplica;
     }
 
+    public int getWaitForActiveShards() {
+        return waitForActiveShards;
+    }
+
     public int getMinDelay() {
         return minDelay;
     }
@@ -223,6 +240,7 @@ public class ElasticSearchConfiguration {
 
             return Objects.equals(this.nbShards, that.nbShards)
                 && Objects.equals(this.nbReplica, that.nbReplica)
+                && Objects.equals(this.waitForActiveShards, that.waitForActiveShards)
                 && Objects.equals(this.minDelay, that.minDelay)
                 && Objects.equals(this.maxRetries, that.maxRetries)
                 && Objects.equals(this.hosts, that.hosts)
@@ -233,6 +251,6 @@ public class ElasticSearchConfiguration {
 
     @Override
     public final int hashCode() {
-        return Objects.hash(hosts, nbShards, nbReplica, minDelay, maxRetries, requestTimeout);
+        return Objects.hash(hosts, nbShards, nbReplica, waitForActiveShards, minDelay, maxRetries, requestTimeout);
     }
 }
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchConfigurationTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchConfigurationTest.java
index 366c0cc..fb2f0e0 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchConfigurationTest.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchConfigurationTest.java
@@ -67,6 +67,44 @@ public class ElasticSearchConfigurationTest {
     }
 
     @Test
+    public void getWaitForActiveShardsShouldReturnConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        int value = 36;
+        configuration.addProperty("elasticsearch.index.waitForActiveShards", value);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getWaitForActiveShards())
+            .isEqualTo(value);
+    }
+
+    @Test
+    public void getWaitForActiveShardsShouldReturnConfiguredValueWhenZero() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        int value = 0;
+        configuration.addProperty("elasticsearch.index.waitForActiveShards", value);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getWaitForActiveShards())
+            .isEqualTo(value);
+    }
+
+    @Test
+    public void getWaitForActiveShardsShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        int expectedValue = 1;
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getWaitForActiveShards())
+            .isEqualTo(expectedValue);
+    }
+
+    @Test
     public void getNbShardsShouldReturnConfiguredValue() throws ConfigurationException {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
         int value = 36;
@@ -257,7 +295,6 @@ public class ElasticSearchConfigurationTest {
             ImmutableList.of("localhost:9200"));
     }
 
-
     @Test
     public void nbReplicaShouldThrowWhenNegative() {
         assertThatThrownBy(() ->
@@ -267,6 +304,14 @@ public class ElasticSearchConfigurationTest {
     }
 
     @Test
+    public void waitForActiveShardsShouldThrowWhenNegative() {
+        assertThatThrownBy(() ->
+            ElasticSearchConfiguration.builder()
+                .waitForActiveShards(-1))
+            .isInstanceOf(IllegalArgumentException.class);
+    }
+
+    @Test
     public void nbShardsShouldThrowWhenNegative() {
         assertThatThrownBy(() ->
                 ElasticSearchConfiguration.builder()


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