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