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 ad...@apache.org on 2018/12/07 16:13:09 UTC

[01/11] james-project git commit: JAMES-2592 Add the new elasticsearch.clusterName property in configuration files

Repository: james-project
Updated Branches:
  refs/heads/3.2.x bf833c8f0 -> 3b932460f


JAMES-2592 Add the new elasticsearch.clusterName property in configuration files


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

Branch: refs/heads/3.2.x
Commit: 23936bbddb4d159d0cfc13dace4011dc7bf4e819
Parents: 219b961
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Nov 13 17:47:10 2018 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Fri Dec 7 17:11:56 2018 +0100

----------------------------------------------------------------------
 .../cassandra/package/etc/james/templates/elasticsearch.properties  | 1 +
 .../guice/cassandra-ldap/destination/conf/elasticsearch.properties  | 1 +
 .../run/guice/cassandra/destination/conf/elasticsearch.properties   | 1 +
 3 files changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/23936bbd/dockerfiles/packaging/guice/cassandra/package/etc/james/templates/elasticsearch.properties
----------------------------------------------------------------------
diff --git a/dockerfiles/packaging/guice/cassandra/package/etc/james/templates/elasticsearch.properties b/dockerfiles/packaging/guice/cassandra/package/etc/james/templates/elasticsearch.properties
index cba4615..b2fd5de 100644
--- a/dockerfiles/packaging/guice/cassandra/package/etc/james/templates/elasticsearch.properties
+++ b/dockerfiles/packaging/guice/cassandra/package/etc/james/templates/elasticsearch.properties
@@ -25,6 +25,7 @@ elasticsearch.port=9300
 
 # You can alternatively provide a list of hosts following this format :
 # elasticsearch.hosts=host1:9300,host2:9300
+# elasticsearch.clusterName=cluster
 
 elasticsearch.nb.shards=5
 elasticsearch.nb.replica=1

http://git-wip-us.apache.org/repos/asf/james-project/blob/23936bbd/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties
----------------------------------------------------------------------
diff --git a/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties b/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties
index b50a335..56be160 100644
--- a/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties
+++ b/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties
@@ -25,6 +25,7 @@ elasticsearch.port=9300
 
 # You can alternatively provide a list of hosts following this format :
 # elasticsearch.hosts=host1:9300,host2:9300
+# elasticsearch.clusterName=cluster
 
 elasticsearch.nb.shards=5
 elasticsearch.nb.replica=1

http://git-wip-us.apache.org/repos/asf/james-project/blob/23936bbd/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
----------------------------------------------------------------------
diff --git a/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties b/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
index b50a335..56be160 100644
--- a/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
+++ b/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
@@ -25,6 +25,7 @@ elasticsearch.port=9300
 
 # You can alternatively provide a list of hosts following this format :
 # elasticsearch.hosts=host1:9300,host2:9300
+# elasticsearch.clusterName=cluster
 
 elasticsearch.nb.shards=5
 elasticsearch.nb.replica=1


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


[03/11] james-project git commit: JAMES-2590 Change default shards & replica ES configuration values should match the recommended values from ES documentation https://www.elastic.co/guide/en/elasticsearch/guide/current/_index_settings.html

Posted by ad...@apache.org.
JAMES-2590 Change default shards & replica ES configuration values
should match the recommended values from ES documentation
https://www.elastic.co/guide/en/elasticsearch/guide/current/_index_settings.html


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

Branch: refs/heads/3.2.x
Commit: 163db061212d67a30bc7bda18276343fd110f0b0
Parents: 1d6aae0
Author: Antoine Duprat <ad...@linagora.com>
Authored: Mon Nov 12 21:51:48 2018 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Fri Dec 7 17:11:56 2018 +0100

----------------------------------------------------------------------
 .../backends/es/ElasticSearchConfiguration.java |  4 ++--
 .../james/templates/elasticsearch.properties    |  4 ++--
 .../destination/conf/elasticsearch.properties   |  6 +++---
 .../destination/conf/elasticsearch.properties   |  6 +++---
 .../search/LuceneMessageSearchIndexTest.java    |  8 ++++----
 .../search/AbstractMessageSearchIndexTest.java  | 20 ++++++++++----------
 6 files changed, 24 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/163db061/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchConfiguration.java
----------------------------------------------------------------------
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 b97d9d7..abe23c8 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
@@ -203,8 +203,8 @@ public class ElasticSearchConfiguration {
     public static final int DEFAULT_CONNECTION_MAX_RETRIES = 7;
     public static final int DEFAULT_CONNECTION_MIN_DELAY = 3000;
     public static final boolean DEFAULT_INDEX_ATTACHMENTS = true;
-    public static final int DEFAULT_NB_SHARDS = 1;
-    public static final int DEFAULT_NB_REPLICA = 0;
+    public static final int DEFAULT_NB_SHARDS = 5;
+    public static final int DEFAULT_NB_REPLICA = 1;
     public static final int DEFAULT_PORT = 9300;
     private static final String LOCALHOST = "127.0.0.1";
     public static final Optional<Integer> DEFAULT_PORT_AS_OPTIONAL = Optional.of(DEFAULT_PORT);

http://git-wip-us.apache.org/repos/asf/james-project/blob/163db061/dockerfiles/packaging/guice/cassandra/package/etc/james/templates/elasticsearch.properties
----------------------------------------------------------------------
diff --git a/dockerfiles/packaging/guice/cassandra/package/etc/james/templates/elasticsearch.properties b/dockerfiles/packaging/guice/cassandra/package/etc/james/templates/elasticsearch.properties
index cf1daac..cba4615 100644
--- a/dockerfiles/packaging/guice/cassandra/package/etc/james/templates/elasticsearch.properties
+++ b/dockerfiles/packaging/guice/cassandra/package/etc/james/templates/elasticsearch.properties
@@ -26,8 +26,8 @@ elasticsearch.port=9300
 # You can alternatively provide a list of hosts following this format :
 # elasticsearch.hosts=host1:9300,host2:9300
 
-elasticsearch.nb.shards=1
-elasticsearch.nb.replica=0
+elasticsearch.nb.shards=5
+elasticsearch.nb.replica=1
 elasticsearch.retryConnection.maxRetries=7
 elasticsearch.retryConnection.minDelay=3000
 # Index or not attachments (default value: true)

http://git-wip-us.apache.org/repos/asf/james-project/blob/163db061/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties
----------------------------------------------------------------------
diff --git a/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties b/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties
index 1adf0d2..b50a335 100644
--- a/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties
+++ b/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties
@@ -26,8 +26,8 @@ elasticsearch.port=9300
 # You can alternatively provide a list of hosts following this format :
 # elasticsearch.hosts=host1:9300,host2:9300
 
-elasticsearch.nb.shards=1
-elasticsearch.nb.replica=0
+elasticsearch.nb.shards=5
+elasticsearch.nb.replica=1
 elasticsearch.retryConnection.maxRetries=7
 elasticsearch.retryConnection.minDelay=3000
 # Index or not attachments (default value: true)
@@ -39,4 +39,4 @@ elasticsearch.http.host=elasticsearch
 elasticsearch.http.port=9200
 elasticsearch.metrics.reports.enabled=true
 elasticsearch.metrics.reports.period=30
-elasticsearch.metrics.reports.index=james-metrics
\ No newline at end of file
+elasticsearch.metrics.reports.index=james-metrics

http://git-wip-us.apache.org/repos/asf/james-project/blob/163db061/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
----------------------------------------------------------------------
diff --git a/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties b/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
index 1adf0d2..b50a335 100644
--- a/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
+++ b/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
@@ -26,8 +26,8 @@ elasticsearch.port=9300
 # You can alternatively provide a list of hosts following this format :
 # elasticsearch.hosts=host1:9300,host2:9300
 
-elasticsearch.nb.shards=1
-elasticsearch.nb.replica=0
+elasticsearch.nb.shards=5
+elasticsearch.nb.replica=1
 elasticsearch.retryConnection.maxRetries=7
 elasticsearch.retryConnection.minDelay=3000
 # Index or not attachments (default value: true)
@@ -39,4 +39,4 @@ elasticsearch.http.host=elasticsearch
 elasticsearch.http.port=9200
 elasticsearch.metrics.reports.enabled=true
 elasticsearch.metrics.reports.period=30
-elasticsearch.metrics.reports.index=james-metrics
\ No newline at end of file
+elasticsearch.metrics.reports.index=james-metrics

http://git-wip-us.apache.org/repos/asf/james-project/blob/163db061/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
index 8d5683e..b7ca934 100644
--- a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
+++ b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
@@ -55,10 +55,6 @@ public class LuceneMessageSearchIndexTest extends AbstractMessageSearchIndexTest
         this.messageSearchIndex = luceneMessageSearchIndex;
     }
 
-    /**
-     * 15 tests out of 54 are failing
-     */
-    
     @Ignore
     @Override
     public void uidShouldreturnEveryThing() throws Exception {
@@ -144,4 +140,8 @@ public class LuceneMessageSearchIndexTest extends AbstractMessageSearchIndexTest
     public void multimailboxSearchShouldReturnUidOfMessageMarkedAsSeenInAllMailboxes() throws MailboxException {
     }
 
+    @Ignore("Lucene implementation is not handling mail addresses with names")
+    @Override
+    public void sortOnToShouldWork() {
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/163db061/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
index 4e0d5b2..e60475e 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
@@ -1051,11 +1051,11 @@ public abstract class AbstractMessageSearchIndexTest {
         searchQuery.setSorts(ImmutableList.of(new Sort(SortClause.MailboxFrom)));
 
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m2.getUid(), m3.getUid(), m4.getUid(), m5.getUid());
-        // 2 : jira2@apache.org
-        // 3 : jira1@apache.org
-        // 4 : jira@apache.org
-        // 5 : mailet-api@james.apache.org
+            .containsExactly(m3.getUid(), m2.getUid(), m4.getUid(), m5.getUid());
+        // m3 : jira1@apache.org
+        // m2 : jira2@apache.org
+        // m4 : jira@apache.org
+        // m5 : mailet-api@james.apache.org
     }
 
     @Test
@@ -1065,11 +1065,11 @@ public abstract class AbstractMessageSearchIndexTest {
         searchQuery.setSorts(ImmutableList.of(new Sort(SortClause.MailboxTo)));
 
         assertThat(messageSearchIndex.search(session, mailbox, searchQuery))
-            .containsExactly(m5.getUid(), m2.getUid(), m3.getUid(), m4.getUid());
-        // 2 : server-dev@james.apache.org
-        // 3 : server-dev@james.apache.org
-        // 4 : server-dev@james.apache.org
-        // 5 : mailet-api@james.apache.org
+            .containsExactly(m5.getUid(), m3.getUid(), m2.getUid(), m4.getUid());
+        // 5 : "zzz" <ma...@james.apache.org>
+        // 3 : "aaa" <se...@james.apache.org>
+        // 2 : "abc" <se...@james.apache.org>
+        // 4 : "server" <se...@james.apache.org>
     }
 
     @Test


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


[10/11] james-project git commit: JAMES-2592 Add clusterName in ElasticSearch configuration

Posted by ad...@apache.org.
JAMES-2592 Add clusterName in 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/a026c36c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/a026c36c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/a026c36c

Branch: refs/heads/3.2.x
Commit: a026c36c755bdb6f94531888dd57762123c75273
Parents: 0cec75c
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Nov 13 16:12:36 2018 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Fri Dec 7 17:11:56 2018 +0100

----------------------------------------------------------------------
 .../backends/es/ElasticSearchConfiguration.java | 22 +++++++++-
 .../es/ElasticSearchConfigurationTest.java      | 45 ++++++++++++++++++++
 2 files changed, 65 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/a026c36c/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchConfiguration.java
----------------------------------------------------------------------
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 c4700f5..84d115c 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,9 +37,11 @@ import com.google.common.collect.ImmutableList;
 
 public class ElasticSearchConfiguration {
 
+
     public static class Builder {
 
         private final ImmutableList.Builder<Host> hosts;
+        private Optional<String> clusterName;
         private Optional<Integer> nbShards;
         private Optional<Integer> nbReplica;
         private Optional<Integer> minDelay;
@@ -47,6 +49,7 @@ public class ElasticSearchConfiguration {
 
         public Builder() {
             hosts = ImmutableList.builder();
+            clusterName = Optional.empty();
             nbShards = Optional.empty();
             nbReplica = Optional.empty();
             minDelay = Optional.empty();
@@ -58,6 +61,11 @@ public class ElasticSearchConfiguration {
             return this;
         }
 
+        public Builder clusterName(String clusterName) {
+            this.clusterName = Optional.ofNullable(clusterName);
+            return this;
+        }
+
         public Builder addHosts(Collection<Host> hosts) {
             this.hosts.addAll(hosts);
             return this;
@@ -90,6 +98,7 @@ public class ElasticSearchConfiguration {
             Preconditions.checkState(!hosts.isEmpty(), "You need to specify ElasticSearch host");
             return new ElasticSearchConfiguration(
                 hosts,
+                clusterName,
                 nbShards.orElse(DEFAULT_NB_SHARDS),
                 nbReplica.orElse(DEFAULT_NB_REPLICA),
                 minDelay.orElse(DEFAULT_CONNECTION_MIN_DELAY),
@@ -102,6 +111,7 @@ public class ElasticSearchConfiguration {
     }
 
     public static final String ELASTICSEARCH_HOSTS = "elasticsearch.hosts";
+    public static final String ELASTICSEARCH_CLUSTER_NAME = "elasticsearch.clusterName";
     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";
@@ -124,6 +134,7 @@ public class ElasticSearchConfiguration {
     public static ElasticSearchConfiguration fromProperties(Configuration configuration) throws ConfigurationException {
         return builder()
             .addHosts(getHosts(configuration))
+            .clusterName(configuration.getString(ELASTICSEARCH_CLUSTER_NAME))
             .nbShards(configuration.getInteger(ELASTICSEARCH_NB_SHARDS, DEFAULT_NB_SHARDS))
             .nbReplica(configuration.getInteger(ELASTICSEARCH_NB_REPLICA, DEFAULT_NB_REPLICA))
             .minDelay(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_RETRY_CONNECTION_MIN_DELAY, null)))
@@ -168,13 +179,15 @@ public class ElasticSearchConfiguration {
     }
 
     private final ImmutableList<Host> hosts;
+    private final Optional<String> clusterName;
     private final int nbShards;
     private final int nbReplica;
     private final int minDelay;
     private final int maxRetries;
 
-    private ElasticSearchConfiguration(ImmutableList<Host> hosts,int nbShards, int nbReplica, int minDelay, int maxRetries) {
+    private ElasticSearchConfiguration(ImmutableList<Host> hosts, Optional<String> clusterName, int nbShards, int nbReplica, int minDelay, int maxRetries) {
         this.hosts = hosts;
+        this.clusterName = clusterName;
         this.nbShards = nbShards;
         this.nbReplica = nbReplica;
         this.minDelay = minDelay;
@@ -185,6 +198,10 @@ public class ElasticSearchConfiguration {
         return hosts;
     }
 
+    public Optional<String> getClusterName() {
+        return clusterName;
+    }
+
     public int getNbShards() {
         return nbShards;
     }
@@ -207,6 +224,7 @@ public class ElasticSearchConfiguration {
             ElasticSearchConfiguration that = (ElasticSearchConfiguration) o;
 
             return Objects.equals(this.nbShards, that.nbShards)
+                && Objects.equals(this.clusterName, that.clusterName)
                 && Objects.equals(this.nbReplica, that.nbReplica)
                 && Objects.equals(this.minDelay, that.minDelay)
                 && Objects.equals(this.maxRetries, that.maxRetries)
@@ -217,6 +235,6 @@ public class ElasticSearchConfiguration {
 
     @Override
     public final int hashCode() {
-        return Objects.hash(hosts, nbShards, nbReplica, minDelay, maxRetries);
+        return Objects.hash(hosts, clusterName, nbShards, nbReplica, minDelay, maxRetries);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/a026c36c/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchConfigurationTest.java
----------------------------------------------------------------------
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 14bb7ae..4fa55e9 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
@@ -184,6 +184,51 @@ public class ElasticSearchConfigurationTest {
     }
 
     @Test
+    public void clusterNameShouldBeEmptyWhenNotGiven() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String hostname = "myHost";
+        configuration.addProperty("elasticsearch.masterHost", hostname);
+        int port = 9300;
+        configuration.addProperty("elasticsearch.port", port);
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getClusterName())
+                .isEmpty();
+    }
+
+    @Test
+    public void clusterNameShouldBeEmptyWhenNull() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String hostname = "myHost";
+        configuration.addProperty("elasticsearch.masterHost", hostname);
+        int port = 9300;
+        configuration.addProperty("elasticsearch.port", port);
+        configuration.addProperty("elasticsearch.clusterName", null);
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getClusterName())
+                .isEmpty();
+    }
+
+    @Test
+    public void clusterNameShouldKeepTheVAlueWhenGiven() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String hostname = "myHost";
+        configuration.addProperty("elasticsearch.masterHost", hostname);
+        int port = 9300;
+        configuration.addProperty("elasticsearch.port", port);
+        String clusterName = "myClusterName";
+        configuration.addProperty("elasticsearch.clusterName", clusterName);
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getClusterName())
+                .contains(clusterName);
+    }
+
+    @Test
     public void validateHostsConfigurationOptionsShouldThrowWhenNoHostSpecify() {
         assertThatThrownBy(() ->
             ElasticSearchConfiguration.validateHostsConfigurationOptions(


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


[08/11] james-project git commit: JAMES-2592 Add cluster.name in ElasticSearch client settings

Posted by ad...@apache.org.
JAMES-2592 Add cluster.name in ElasticSearch client settings


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

Branch: refs/heads/3.2.x
Commit: 8bdf5c88597b39a4da15daf6f9806b459f8d33f9
Parents: a026c36
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Nov 13 16:24:53 2018 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Fri Dec 7 17:11:56 2018 +0100

----------------------------------------------------------------------
 .../james/backends/es/ClientProviderImpl.java   | 34 ++++++++++---
 .../es/ClientProviderImplConnectionTest.java    | 13 +++--
 .../backends/es/ClientProviderImplTest.java     | 52 ++++++++++++++------
 .../mailbox/ElasticSearchMailboxModule.java     |  2 +-
 .../apache/james/metric/es/ESReporterTest.java  |  3 +-
 5 files changed, 73 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/8bdf5c88/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ClientProviderImpl.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ClientProviderImpl.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ClientProviderImpl.java
index 317c0b7..8d92ae9 100644
--- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ClientProviderImpl.java
+++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ClientProviderImpl.java
@@ -19,44 +19,53 @@
 package org.apache.james.backends.es;
 
 import java.net.InetAddress;
+import java.util.Optional;
 
 import org.apache.james.util.Host;
 import org.elasticsearch.client.Client;
 import org.elasticsearch.client.transport.TransportClient;
+import org.elasticsearch.common.settings.Settings;
 import org.elasticsearch.common.transport.InetSocketTransportAddress;
 
 import com.github.fge.lambdas.Throwing;
 import com.github.fge.lambdas.consumers.ConsumerChainer;
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 
 public class ClientProviderImpl implements ClientProvider {
 
-    public static ClientProviderImpl forHost(String address, Integer port) {
-        return new ClientProviderImpl(ImmutableList.of(Host.from(address, port)));
+    public static ClientProviderImpl forHost(String address, Integer port, Optional<String> clusterName) {
+        return new ClientProviderImpl(ImmutableList.of(Host.from(address, port)), clusterName);
     }
 
-    public static ClientProviderImpl fromHostsString(String hostsString) {
+    public static ClientProviderImpl fromHostsString(String hostsString, Optional<String> clusterName) {
         Preconditions.checkNotNull(hostsString, "HostString should not be null");
-        return new ClientProviderImpl(Host.parseHosts(hostsString));
+        return new ClientProviderImpl(Host.parseHosts(hostsString), clusterName);
     }
 
-    public static ClientProviderImpl fromHosts(ImmutableList<Host> hosts) {
+    public static ClientProviderImpl fromHosts(ImmutableList<Host> hosts, Optional<String> clusterName) {
         Preconditions.checkNotNull(hosts, "Hosts should not be null");
-        return new ClientProviderImpl(hosts);
+        return new ClientProviderImpl(hosts, clusterName);
     }
 
+    private static final String CLUSTER_NAME_SETTING = "cluster.name";
+
     private final ImmutableList<Host> hosts;
+    private final Optional<String> clusterName;
 
-    private ClientProviderImpl(ImmutableList<Host> hosts) {
+    private ClientProviderImpl(ImmutableList<Host> hosts, Optional<String> clusterName) {
         Preconditions.checkArgument(!hosts.isEmpty(), "You should provide at least one host");
         this.hosts = hosts;
+        this.clusterName = clusterName;
     }
 
 
     @Override
     public Client get() {
-        TransportClient transportClient = TransportClient.builder().build();
+        TransportClient transportClient = TransportClient.builder()
+                .settings(settings())
+                .build();
         ConsumerChainer<Host> consumer = Throwing.consumer(host -> transportClient
             .addTransportAddress(
                 new InetSocketTransportAddress(
@@ -65,4 +74,13 @@ public class ClientProviderImpl implements ClientProvider {
         hosts.forEach(consumer.sneakyThrow());
         return transportClient;
     }
+
+    @VisibleForTesting Settings settings() {
+        if (clusterName.isPresent()) {
+            return Settings.builder()
+                    .put(CLUSTER_NAME_SETTING, clusterName.get())
+                    .build();
+        }
+        return Settings.EMPTY;
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8bdf5c88/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java
index aa0a8e9..56f950d 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.backends.es;
 
+import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.james.util.docker.SwarmGenericContainer;
@@ -52,7 +53,7 @@ public class ClientProviderImplConnectionTest {
         Awaitility.await()
             .atMost(1, TimeUnit.MINUTES)
             .pollInterval(5, TimeUnit.SECONDS)
-            .until(() -> isConnected(ClientProviderImpl.forHost(es1.getContainerIp(), 9300)));
+            .until(() -> isConnected(ClientProviderImpl.forHost(es1.getContainerIp(), 9300, Optional.empty())));
     }
 
     @Test
@@ -62,8 +63,9 @@ public class ClientProviderImplConnectionTest {
             .pollInterval(5, TimeUnit.SECONDS)
             .until(() -> isConnected(
                 ClientProviderImpl.fromHostsString(
-                    es1.getContainerIp() + ":" + ES_APPLICATIVE_PORT + ","
-                    + es2.getContainerIp() + ":" + ES_APPLICATIVE_PORT)));
+                            es1.getContainerIp() + ":" + ES_APPLICATIVE_PORT + ","
+                            + es2.getContainerIp() + ":" + ES_APPLICATIVE_PORT
+                        , Optional.empty())));
     }
 
     @Test
@@ -75,8 +77,9 @@ public class ClientProviderImplConnectionTest {
             .pollInterval(5, TimeUnit.SECONDS)
             .until(() -> isConnected(
                 ClientProviderImpl.fromHostsString(
-                    es1.getContainerIp() + ":" + ES_APPLICATIVE_PORT + ","
-                    + es2.getContainerIp() + ":" + ES_APPLICATIVE_PORT)));
+                            es1.getContainerIp() + ":" + ES_APPLICATIVE_PORT + ","
+                            + es2.getContainerIp() + ":" + ES_APPLICATIVE_PORT
+                        , Optional.empty())));
     }
 
     private boolean isConnected(ClientProvider clientProvider) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/8bdf5c88/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplTest.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplTest.java
index a97eb64..95f1014 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplTest.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplTest.java
@@ -19,10 +19,15 @@
 
 package org.apache.james.backends.es;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.elasticsearch.common.settings.Settings;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 
+import java.util.Optional;
+
 public class ClientProviderImplTest {
 
     @Rule
@@ -32,111 +37,126 @@ public class ClientProviderImplTest {
     public void fromHostsStringShouldThrowOnNullString() {
         expectedException.expect(NullPointerException.class);
 
-        ClientProviderImpl.fromHostsString(null);
+        ClientProviderImpl.fromHostsString(null, Optional.empty());
     }
 
     @Test
     public void fromHostsStringShouldThrowOnEmptyString() {
         expectedException.expect(IllegalArgumentException.class);
 
-        ClientProviderImpl.fromHostsString("");
+        ClientProviderImpl.fromHostsString("", Optional.empty());
     }
 
     @Test
     public void forHostShouldThrowOnNullHost() {
         expectedException.expect(NullPointerException.class);
 
-        ClientProviderImpl.forHost(null, 9200);
+        ClientProviderImpl.forHost(null, 9200, Optional.empty());
     }
 
     @Test
     public void forHostShouldThrowOnEmptyHost() {
         expectedException.expect(IllegalArgumentException.class);
 
-        ClientProviderImpl.forHost("", 9200);
+        ClientProviderImpl.forHost("", 9200, Optional.empty());
     }
 
     @Test
     public void forHostShouldThrowOnNegativePort() {
         expectedException.expect(IllegalArgumentException.class);
 
-        ClientProviderImpl.forHost("localhost", -1);
+        ClientProviderImpl.forHost("localhost", -1, Optional.empty());
     }
 
     @Test
     public void forHostShouldThrowOnZeroPort() {
         expectedException.expect(IllegalArgumentException.class);
 
-        ClientProviderImpl.forHost("localhost", 0);
+        ClientProviderImpl.forHost("localhost", 0, Optional.empty());
     }
 
     @Test
     public void forHostShouldThrowOnTooBigPort() {
         expectedException.expect(IllegalArgumentException.class);
 
-        ClientProviderImpl.forHost("localhost", 65536);
+        ClientProviderImpl.forHost("localhost", 65536, Optional.empty());
     }
 
     @Test
     public void fromHostsStringShouldEmptyAddress() {
         expectedException.expect(IllegalArgumentException.class);
 
-        ClientProviderImpl.fromHostsString(":9200");
+        ClientProviderImpl.fromHostsString(":9200", Optional.empty());
     }
 
     @Test
     public void fromHostsStringShouldThrowOnAbsentPort() {
         expectedException.expect(IllegalArgumentException.class);
 
-        ClientProviderImpl.fromHostsString("localhost");
+        ClientProviderImpl.fromHostsString("localhost", Optional.empty());
     }
 
     @Test
     public void fromHostsStringShouldThrowWhenTooMuchParts() {
         expectedException.expect(IllegalArgumentException.class);
 
-        ClientProviderImpl.fromHostsString("localhost:9200:9200");
+        ClientProviderImpl.fromHostsString("localhost:9200:9200", Optional.empty());
     }
 
     @Test
     public void fromHostsStringShouldThrowOnEmptyPort() {
         expectedException.expect(NumberFormatException.class);
 
-        ClientProviderImpl.fromHostsString("localhost:");
+        ClientProviderImpl.fromHostsString("localhost:", Optional.empty());
     }
 
     @Test
     public void fromHostsStringShouldThrowOnInvalidPort() {
         expectedException.expect(NumberFormatException.class);
 
-        ClientProviderImpl.fromHostsString("localhost:invalid");
+        ClientProviderImpl.fromHostsString("localhost:invalid", Optional.empty());
     }
 
     @Test
     public void fromHostsStringShouldThrowOnNegativePort() {
         expectedException.expect(IllegalArgumentException.class);
 
-        ClientProviderImpl.fromHostsString("localhost:-1");
+        ClientProviderImpl.fromHostsString("localhost:-1", Optional.empty());
     }
 
     @Test
     public void fromHostsStringShouldThrowOnZeroPort() {
         expectedException.expect(IllegalArgumentException.class);
 
-        ClientProviderImpl.fromHostsString("localhost:0");
+        ClientProviderImpl.fromHostsString("localhost:0", Optional.empty());
     }
 
     @Test
     public void fromHostsStringShouldThrowOnTooBigPort() {
         expectedException.expect(IllegalArgumentException.class);
 
-        ClientProviderImpl.fromHostsString("localhost:65536");
+        ClientProviderImpl.fromHostsString("localhost:65536", Optional.empty());
     }
 
     @Test
     public void fromHostsStringShouldThrowIfOneHostIsInvalid() {
         expectedException.expect(IllegalArgumentException.class);
 
-        ClientProviderImpl.fromHostsString("localhost:9200,localhost");
+        ClientProviderImpl.fromHostsString("localhost:9200,localhost", Optional.empty());
+    }
+
+    @Test
+    public void settingsShouldBeEmptyWhenClusterNameIsEmpty() {
+        ClientProviderImpl clientProvider = ClientProviderImpl.fromHostsString("localhost:9200", Optional.empty());
+
+        assertThat(clientProvider.settings()).isEqualTo(Settings.EMPTY);
+    }
+
+    @Test
+    public void settingsShouldContainClusterNameSettingWhenClusterNameIsGiven() {
+        String clusterName = "myClusterName";
+        ClientProviderImpl clientProvider = ClientProviderImpl.fromHostsString("localhost:9200", Optional.of(clusterName));
+
+        assertThat(clientProvider.settings().get("cluster.name")).isEqualTo(clusterName);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8bdf5c88/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
index ad05503..56b7fbc 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
@@ -144,7 +144,7 @@ public class ElasticSearchMailboxModule extends AbstractModule {
                                     ElasticSearchQuotaConfiguration quotaConfiguration) {
         LOGGER.info("Trying to connect to ElasticSearch service at {}", LocalDateTime.now());
 
-        Client client = ClientProviderImpl.fromHosts(configuration.getHosts()).get();
+        Client client = ClientProviderImpl.fromHosts(configuration.getHosts(), configuration.getClusterName()).get();
 
         MailboxIndexCreationUtil.prepareClient(client,
             mailboxConfiguration.getReadAliasMailboxName(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/8bdf5c88/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
----------------------------------------------------------------------
diff --git a/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java b/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
index d602f8b..30820f9 100644
--- a/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
+++ b/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
@@ -21,6 +21,7 @@ package org.apache.james.metric.es;
 
 import static org.awaitility.Awaitility.await;
 
+import java.util.Optional;
 import java.util.Timer;
 import java.util.TimerTask;
 
@@ -67,7 +68,7 @@ public class ESReporterTest {
 
     @Before
     public void setUp() {
-        clientProvider = ClientProviderImpl.forHost(esContainer.getHostIp(), esContainer.getMappedPort(ES_APPLICATIVE_PORT));
+        clientProvider = ClientProviderImpl.forHost(esContainer.getHostIp(), esContainer.getMappedPort(ES_APPLICATIVE_PORT), Optional.empty());
         await().atMost(Duration.ONE_MINUTE)
             .until(() -> elasticSearchStarted(clientProvider));
 


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


[07/11] james-project git commit: JAMES-2590 Split elasticSearch configurations

Posted by ad...@apache.org.
JAMES-2590 Split elasticSearch configurations

We should provide different POJOs read from the same files.

 - ElasticSearch configuration for client setup
 - A specific file for Mailbox & Quota concerns


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

Branch: refs/heads/3.2.x
Commit: 0cec75c3ec1c5015950962819956054c05985af3
Parents: 163db06
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Nov 13 15:18:40 2018 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Fri Dec 7 17:11:56 2018 +0100

----------------------------------------------------------------------
 .../backends/es/ElasticSearchConfiguration.java | 205 +--------------
 .../james/backends/es/IndexAttachments.java     |  24 --
 .../es/MailboxElasticSearchConstants.java       |  37 ---
 .../es/QuotaRatioElasticSearchConstants.java    |  37 ---
 .../es/ElasticSearchConfigurationTest.java      | 261 -------------------
 .../ElasticSearchMailboxConfiguration.java      | 214 +++++++++++++++
 .../mailbox/elasticsearch/IndexAttachments.java |  24 ++
 .../MailboxElasticSearchConstants.java          |  37 +++
 .../elasticsearch/MailboxIndexCreationUtil.java |   1 -
 .../elasticsearch/MailboxMappingFactory.java    |   1 -
 ...lasticSearchListeningMessageSearchIndex.java |   2 +-
 .../elasticsearch/json/IndexableMessage.java    |   2 +-
 .../json/MessageToElasticSearchJson.java        |   2 +-
 .../ElasticSearchIntegrationTest.java           |   2 -
 .../ElasticSearchMailboxConfigurationTest.java  | 219 ++++++++++++++++
 .../json/IndexableMessageTest.java              |   2 +-
 .../json/MessageToElasticSearchJsonTest.java    |   2 +-
 .../ElasticSearchQuotaConfiguration.java        | 152 +++++++++++
 .../ElasticSearchQuotaSearcher.java             |   2 +-
 .../QuotaRatioElasticSearchConstants.java       |  37 +++
 .../elasticsearch/QuotaRatioMappingFactory.java |   1 -
 .../QuotaSearchIndexCreationUtil.java           |   1 -
 .../ElasticSearchQuotaMailboxListener.java      |   2 +-
 .../ElasticSearchQuotaConfigurationTest.java    | 104 ++++++++
 ...ticSearchQuotaSearchTestSystemExtension.java |   1 -
 .../ElasticSearchQuotaMailboxListenerTest.java  |   2 +-
 .../host/ElasticSearchHostSystem.java           |   4 +-
 .../mailbox/ElasticSearchMailboxModule.java     |  46 +++-
 .../ElasticSearchQuotaSearcherModule.java       |  34 ++-
 .../JamesServerWithRetryConnectionTest.java     |   4 +-
 .../ElasticSearchQuotaSearchExtension.java      |   2 +-
 31 files changed, 864 insertions(+), 600 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchConfiguration.java
----------------------------------------------------------------------
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 abe23c8..c4700f5 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
@@ -29,7 +29,6 @@ import org.apache.commons.configuration.AbstractConfiguration;
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.util.Host;
-import org.apache.james.util.OptionalUtils;
 
 import com.github.steveash.guavate.Guavate;
 import com.google.common.annotations.VisibleForTesting;
@@ -41,31 +40,17 @@ public class ElasticSearchConfiguration {
     public static class Builder {
 
         private final ImmutableList.Builder<Host> hosts;
-        private Optional<IndexName> indexMailboxName;
-        private Optional<ReadAliasName> readAliasMailboxName;
-        private Optional<WriteAliasName> writeAliasMailboxName;
-        private Optional<IndexName> indexQuotaRatioName;
-        private Optional<ReadAliasName> readAliasQuotaRatioName;
-        private Optional<WriteAliasName> writeAliasQuotaRatioName;
         private Optional<Integer> nbShards;
         private Optional<Integer> nbReplica;
         private Optional<Integer> minDelay;
         private Optional<Integer> maxRetries;
-        private Optional<IndexAttachments> indexAttachment;
 
         public Builder() {
             hosts = ImmutableList.builder();
-            indexMailboxName = Optional.empty();
-            readAliasMailboxName = Optional.empty();
-            writeAliasMailboxName = Optional.empty();
-            indexQuotaRatioName = Optional.empty();
-            readAliasQuotaRatioName = Optional.empty();
-            writeAliasQuotaRatioName = Optional.empty();
             nbShards = Optional.empty();
             nbReplica = Optional.empty();
             minDelay = Optional.empty();
             maxRetries = Optional.empty();
-            indexAttachment = Optional.empty();
         }
 
         public Builder addHost(Host host) {
@@ -78,65 +63,6 @@ public class ElasticSearchConfiguration {
             return this;
         }
 
-        public Builder indexMailboxName(IndexName indexMailboxName) {
-            return indexMailboxName(Optional.of(indexMailboxName));
-        }
-
-        public Builder indexMailboxName(Optional<IndexName> indexMailboxName) {
-            this.indexMailboxName = indexMailboxName;
-            return this;
-        }
-
-        public Builder readAliasMailboxName(ReadAliasName readAliasMailboxName) {
-            return readAliasMailboxName(Optional.of(readAliasMailboxName));
-        }
-
-        public Builder readAliasMailboxName(Optional<ReadAliasName> readAliasMailboxName) {
-            this.readAliasMailboxName = readAliasMailboxName;
-            return this;
-        }
-
-        public Builder writeAliasMailboxName(WriteAliasName writeAliasMailboxName) {
-            return writeAliasMailboxName(Optional.of(writeAliasMailboxName));
-        }
-
-        public Builder writeAliasMailboxName(Optional<WriteAliasName> writeAliasMailboxName) {
-            this.writeAliasMailboxName = writeAliasMailboxName;
-            return this;
-        }
-
-        public Builder indexQuotaRatioName(IndexName indexQuotaRatioName) {
-            return indexQuotaRatioName(Optional.of(indexQuotaRatioName));
-        }
-
-        public Builder indexQuotaRatioName(Optional<IndexName> indexQuotaRatioName) {
-            this.indexQuotaRatioName = indexQuotaRatioName;
-            return this;
-        }
-
-        public Builder readAliasQuotaRatioName(ReadAliasName readAliasQuotaRatioName) {
-            return readAliasQuotaRatioName(Optional.of(readAliasQuotaRatioName));
-        }
-
-        public Builder readAliasQuotaRatioName(Optional<ReadAliasName> readAliasQuotaRatioName) {
-            this.readAliasQuotaRatioName = readAliasQuotaRatioName;
-            return this;
-        }
-
-        public Builder writeAliasQuotaRatioName(WriteAliasName writeAliasQuotaRatioName) {
-            return writeAliasQuotaRatioName(Optional.of(writeAliasQuotaRatioName));
-        }
-
-        public Builder writeAliasQuotaRatioName(Optional<WriteAliasName> writeAliasQuotaRatioName) {
-            this.writeAliasQuotaRatioName = writeAliasQuotaRatioName;
-            return this;
-        }
-
-        public Builder indexAttachment(IndexAttachments indexAttachment) {
-            this.indexAttachment = Optional.of(indexAttachment);
-            return this;
-        }
-
         public Builder nbShards(int nbShards) {
             Preconditions.checkArgument(nbShards > 0, "You need the number of shards to be strictly positive");
             this.nbShards = Optional.of(nbShards);
@@ -164,17 +90,10 @@ public class ElasticSearchConfiguration {
             Preconditions.checkState(!hosts.isEmpty(), "You need to specify ElasticSearch host");
             return new ElasticSearchConfiguration(
                 hosts,
-                indexMailboxName.orElse(MailboxElasticSearchConstants.DEFAULT_MAILBOX_INDEX),
-                readAliasMailboxName.orElse(MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS),
-                writeAliasMailboxName.orElse(MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS),
-                indexQuotaRatioName.orElse(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_INDEX),
-                readAliasQuotaRatioName.orElse(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_READ_ALIAS),
-                writeAliasQuotaRatioName.orElse(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS),
                 nbShards.orElse(DEFAULT_NB_SHARDS),
                 nbReplica.orElse(DEFAULT_NB_REPLICA),
                 minDelay.orElse(DEFAULT_CONNECTION_MIN_DELAY),
-                maxRetries.orElse(DEFAULT_CONNECTION_MAX_RETRIES),
-                indexAttachment.orElse(IndexAttachments.YES));
+                maxRetries.orElse(DEFAULT_CONNECTION_MAX_RETRIES));
         }
     }
 
@@ -185,24 +104,13 @@ public class ElasticSearchConfiguration {
     public static final String ELASTICSEARCH_HOSTS = "elasticsearch.hosts";
     public static final String ELASTICSEARCH_MASTER_HOST = "elasticsearch.masterHost";
     public static final String ELASTICSEARCH_PORT = "elasticsearch.port";
-    public static final String ELASTICSEARCH_INDEX_NAME = "elasticsearch.index.name";
-    public static final String ELASTICSEARCH_INDEX_MAILBOX_NAME = "elasticsearch.index.mailbox.name";
     public static final String ELASTICSEARCH_NB_REPLICA = "elasticsearch.nb.replica";
     public static final String ELASTICSEARCH_NB_SHARDS = "elasticsearch.nb.shards";
-    public static final String ELASTICSEARCH_ALIAS_READ_NAME = "elasticsearch.alias.read.name";
-    public static final String ELASTICSEARCH_ALIAS_WRITE_NAME = "elasticsearch.alias.write.name";
-    public static final String ELASTICSEARCH_ALIAS_READ_MAILBOX_NAME = "elasticsearch.alias.read.mailbox.name";
-    public static final String ELASTICSEARCH_ALIAS_WRITE_MAILBOX_NAME = "elasticsearch.alias.write.mailbox.name";
-    public static final String ELASTICSEARCH_INDEX_QUOTA_RATIO_NAME = "elasticsearch.index.quota.ratio.name";
-    public static final String ELASTICSEARCH_ALIAS_READ_QUOTA_RATIO_NAME = "elasticsearch.alias.read.quota.ratio.name";
-    public static final String ELASTICSEARCH_ALIAS_WRITE_QUOTA_RATIO_NAME = "elasticsearch.alias.write.quota.ratio.name";
     public static final String ELASTICSEARCH_RETRY_CONNECTION_MIN_DELAY = "elasticsearch.retryConnection.minDelay";
     public static final String ELASTICSEARCH_RETRY_CONNECTION_MAX_RETRIES = "elasticsearch.retryConnection.maxRetries";
-    public static final String ELASTICSEARCH_INDEX_ATTACHMENTS = "elasticsearch.indexAttachments";
 
     public static final int DEFAULT_CONNECTION_MAX_RETRIES = 7;
     public static final int DEFAULT_CONNECTION_MIN_DELAY = 3000;
-    public static final boolean DEFAULT_INDEX_ATTACHMENTS = true;
     public static final int DEFAULT_NB_SHARDS = 5;
     public static final int DEFAULT_NB_REPLICA = 1;
     public static final int DEFAULT_PORT = 9300;
@@ -216,66 +124,13 @@ public class ElasticSearchConfiguration {
     public static ElasticSearchConfiguration fromProperties(Configuration configuration) throws ConfigurationException {
         return builder()
             .addHosts(getHosts(configuration))
-            .indexMailboxName(computeMailboxIndexName(configuration))
-            .readAliasMailboxName(computeMailboxReadAlias(configuration))
-            .writeAliasMailboxName(computeMailboxWriteAlias(configuration))
-            .indexQuotaRatioName(computeQuotaSearchIndexName(configuration))
-            .readAliasQuotaRatioName(computeQuotaSearchReadAlias(configuration))
-            .writeAliasQuotaRatioName(computeQuotaSearchWriteAlias(configuration))
             .nbShards(configuration.getInteger(ELASTICSEARCH_NB_SHARDS, DEFAULT_NB_SHARDS))
             .nbReplica(configuration.getInteger(ELASTICSEARCH_NB_REPLICA, DEFAULT_NB_REPLICA))
             .minDelay(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_RETRY_CONNECTION_MIN_DELAY, null)))
             .maxRetries(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_RETRY_CONNECTION_MAX_RETRIES, null)))
-            .indexAttachment(provideIndexAttachments(configuration))
             .build();
     }
 
-    public static Optional<IndexName> computeMailboxIndexName(Configuration configuration) {
-        return OptionalUtils.or(
-            Optional.ofNullable(configuration.getString(ELASTICSEARCH_INDEX_MAILBOX_NAME))
-                .map(IndexName::new),
-            Optional.ofNullable(configuration.getString(ELASTICSEARCH_INDEX_NAME))
-                .map(IndexName::new));
-    }
-
-    public static Optional<WriteAliasName> computeMailboxWriteAlias(Configuration configuration) {
-        return OptionalUtils.or(
-            Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_WRITE_MAILBOX_NAME))
-                .map(WriteAliasName::new),
-            Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_WRITE_NAME))
-                .map(WriteAliasName::new));
-    }
-
-    public static Optional<ReadAliasName> computeMailboxReadAlias(Configuration configuration) {
-        return OptionalUtils.or(
-            Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_READ_MAILBOX_NAME))
-                .map(ReadAliasName::new),
-            Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_READ_NAME))
-                .map(ReadAliasName::new));
-    }
-
-    public static Optional<IndexName> computeQuotaSearchIndexName(Configuration configuration) {
-        return Optional.ofNullable(configuration.getString(ELASTICSEARCH_INDEX_QUOTA_RATIO_NAME))
-            .map(IndexName::new);
-    }
-
-    public static Optional<WriteAliasName> computeQuotaSearchWriteAlias(Configuration configuration) {
-        return Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_WRITE_QUOTA_RATIO_NAME))
-            .map(WriteAliasName::new);
-    }
-
-    public static Optional<ReadAliasName> computeQuotaSearchReadAlias(Configuration configuration) {
-        return Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_READ_QUOTA_RATIO_NAME))
-                .map(ReadAliasName::new);
-    }
-
-    private static IndexAttachments provideIndexAttachments(Configuration configuration) {
-        if (configuration.getBoolean(ELASTICSEARCH_INDEX_ATTACHMENTS, DEFAULT_INDEX_ATTACHMENTS)) {
-            return IndexAttachments.YES;
-        }
-        return IndexAttachments.NO;
-    }
-
     private static ImmutableList<Host> getHosts(Configuration propertiesReader) throws ConfigurationException {
         AbstractConfiguration.setDefaultListDelimiter(',');
         Optional<String> masterHost = Optional.ofNullable(
@@ -313,51 +168,23 @@ public class ElasticSearchConfiguration {
     }
 
     private final ImmutableList<Host> hosts;
-    private final IndexName indexMailboxName;
-    private final ReadAliasName readAliasMailboxName;
-    private final WriteAliasName writeAliasMailboxName;
-    private final IndexName indexQuotaRatioName;
-    private final ReadAliasName readAliasQuotaRatioName;
-    private final WriteAliasName writeAliasQuotaRatioName;
     private final int nbShards;
     private final int nbReplica;
     private final int minDelay;
     private final int maxRetries;
-    private final IndexAttachments indexAttachment;
 
-    private ElasticSearchConfiguration(ImmutableList<Host> hosts, IndexName indexMailboxName, ReadAliasName readAliasMailboxName,
-                                      WriteAliasName writeAliasMailboxName, IndexName indexQuotaRatioName, ReadAliasName readAliasQuotaRatioName, WriteAliasName writeAliasQuotaRatioName, int nbShards, int nbReplica, int minDelay,
-                                      int maxRetries, IndexAttachments indexAttachment) {
+    private ElasticSearchConfiguration(ImmutableList<Host> hosts,int nbShards, int nbReplica, int minDelay, int maxRetries) {
         this.hosts = hosts;
-        this.indexMailboxName = indexMailboxName;
-        this.readAliasMailboxName = readAliasMailboxName;
-        this.writeAliasMailboxName = writeAliasMailboxName;
-        this.indexQuotaRatioName = indexQuotaRatioName;
-        this.readAliasQuotaRatioName = readAliasQuotaRatioName;
-        this.writeAliasQuotaRatioName = writeAliasQuotaRatioName;
         this.nbShards = nbShards;
         this.nbReplica = nbReplica;
         this.minDelay = minDelay;
         this.maxRetries = maxRetries;
-        this.indexAttachment = indexAttachment;
     }
 
     public ImmutableList<Host> getHosts() {
         return hosts;
     }
 
-    public IndexName getIndexMailboxName() {
-        return indexMailboxName;
-    }
-
-    public ReadAliasName getReadAliasMailboxName() {
-        return readAliasMailboxName;
-    }
-
-    public WriteAliasName getWriteAliasMailboxName() {
-        return writeAliasMailboxName;
-    }
-
     public int getNbShards() {
         return nbShards;
     }
@@ -374,22 +201,6 @@ public class ElasticSearchConfiguration {
         return maxRetries;
     }
 
-    public IndexAttachments getIndexAttachment() {
-        return indexAttachment;
-    }
-
-    public IndexName getIndexQuotaRatioName() {
-        return indexQuotaRatioName;
-    }
-
-    public ReadAliasName getReadAliasQuotaRatioName() {
-        return readAliasQuotaRatioName;
-    }
-
-    public WriteAliasName getWriteAliasQuotaRatioName() {
-        return writeAliasQuotaRatioName;
-    }
-
     @Override
     public final boolean equals(Object o) {
         if (o instanceof ElasticSearchConfiguration) {
@@ -399,21 +210,13 @@ public class ElasticSearchConfiguration {
                 && Objects.equals(this.nbReplica, that.nbReplica)
                 && Objects.equals(this.minDelay, that.minDelay)
                 && Objects.equals(this.maxRetries, that.maxRetries)
-                && Objects.equals(this.indexAttachment, that.indexAttachment)
-                && Objects.equals(this.hosts, that.hosts)
-                && Objects.equals(this.indexMailboxName, that.indexMailboxName)
-                && Objects.equals(this.readAliasMailboxName, that.readAliasMailboxName)
-                && Objects.equals(this.writeAliasMailboxName, that.writeAliasMailboxName)
-                && Objects.equals(this.indexQuotaRatioName, that.indexQuotaRatioName)
-                && Objects.equals(this.readAliasQuotaRatioName, that.readAliasQuotaRatioName)
-                && Objects.equals(this.writeAliasQuotaRatioName, that.writeAliasQuotaRatioName);
+                && Objects.equals(this.hosts, that.hosts);
         }
         return false;
     }
 
     @Override
     public final int hashCode() {
-        return Objects.hash(hosts, indexMailboxName, readAliasMailboxName, writeAliasMailboxName, nbShards,
-            nbReplica, minDelay, maxRetries, indexAttachment, indexQuotaRatioName, readAliasQuotaRatioName, writeAliasMailboxName);
+        return Objects.hash(hosts, nbShards, nbReplica, minDelay, maxRetries);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexAttachments.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexAttachments.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexAttachments.java
deleted file mode 100644
index dabbfb3..0000000
--- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexAttachments.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.james.backends.es;
-
-public enum IndexAttachments {
-    NO, YES
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/MailboxElasticSearchConstants.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/MailboxElasticSearchConstants.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/MailboxElasticSearchConstants.java
deleted file mode 100644
index d3c1022..0000000
--- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/MailboxElasticSearchConstants.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.james.backends.es;
-
-import org.apache.james.backends.es.IndexName;
-import org.apache.james.backends.es.ReadAliasName;
-import org.apache.james.backends.es.TypeName;
-import org.apache.james.backends.es.WriteAliasName;
-
-public interface MailboxElasticSearchConstants {
-
-    interface InjectionNames {
-        String MAILBOX = "mailbox";
-    }
-
-    WriteAliasName DEFAULT_MAILBOX_WRITE_ALIAS = new WriteAliasName("mailboxWriteAlias");
-    ReadAliasName DEFAULT_MAILBOX_READ_ALIAS = new ReadAliasName("mailboxReadAlias");
-    IndexName DEFAULT_MAILBOX_INDEX = new IndexName("mailbox_v1");
-    TypeName MESSAGE_TYPE = new TypeName("message");
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/QuotaRatioElasticSearchConstants.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/QuotaRatioElasticSearchConstants.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/QuotaRatioElasticSearchConstants.java
deleted file mode 100644
index 3bc650d..0000000
--- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/QuotaRatioElasticSearchConstants.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.james.backends.es;
-
-import org.apache.james.backends.es.IndexName;
-import org.apache.james.backends.es.ReadAliasName;
-import org.apache.james.backends.es.TypeName;
-import org.apache.james.backends.es.WriteAliasName;
-
-public interface QuotaRatioElasticSearchConstants {
-
-    interface InjectionNames {
-        String QUOTA_RATIO = "quotaRatio";
-    }
-
-    WriteAliasName DEFAULT_QUOTA_RATIO_WRITE_ALIAS = new WriteAliasName("quotaRatioWriteAlias");
-    ReadAliasName DEFAULT_QUOTA_RATIO_READ_ALIAS = new ReadAliasName("quotaRatioReadAlias");
-    IndexName DEFAULT_QUOTA_RATIO_INDEX = new IndexName("quota_ratio_v1");
-    TypeName QUOTA_RATIO_TYPE = new TypeName("quotaRatio");
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchConfigurationTest.java
----------------------------------------------------------------------
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 3021a08..14bb7ae 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
@@ -130,267 +130,6 @@ public class ElasticSearchConfigurationTest {
     }
 
     @Test
-    public void getIndexMailboxNameShouldReturnOldConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.index.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexMailboxName())
-            .isEqualTo(new IndexName(name));
-    }
-
-    @Test
-    public void getIndexMailboxNameShouldReturnNewConfiguredValueWhenBoth() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.index.name", "other");
-        configuration.addProperty("elasticsearch.index.mailbox.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexMailboxName())
-            .isEqualTo(new IndexName(name));
-    }
-
-    @Test
-    public void getIndexMailboxNameShouldReturnConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.index.mailbox.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexMailboxName())
-            .isEqualTo(new IndexName(name));
-    }
-
-    @Test
-    public void getIndexMailboxNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexMailboxName())
-            .isEqualTo(MailboxElasticSearchConstants.DEFAULT_MAILBOX_INDEX);
-    }
-
-    @Test
-    public void getReadAliasMailboxNameShouldReturnOldConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.alias.read.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getReadAliasMailboxName())
-            .isEqualTo(new ReadAliasName(name));
-    }
-
-    @Test
-    public void getReadAliasMailboxNameShouldReturnConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.alias.read.mailbox.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getReadAliasMailboxName())
-            .isEqualTo(new ReadAliasName(name));
-    }
-
-    @Test
-    public void getReadAliasMailboxNameShouldReturnNewConfiguredValueWhenBoth() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.alias.read.mailbox.name", name);
-        configuration.addProperty("elasticsearch.alias.read.name", "other");
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getReadAliasMailboxName())
-            .isEqualTo(new ReadAliasName(name));
-    }
-
-    @Test
-    public void getReadAliasMailboxNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getReadAliasMailboxName())
-            .isEqualTo(MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS);
-    }
-
-    @Test
-    public void getWriteAliasMailboxNameShouldReturnOldConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.alias.write.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getWriteAliasMailboxName())
-            .isEqualTo(new WriteAliasName(name));
-    }
-
-    @Test
-    public void getWriteAliasMailboxNameShouldReturnConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.alias.write.mailbox.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getWriteAliasMailboxName())
-            .isEqualTo(new WriteAliasName(name));
-    }
-
-    @Test
-    public void getWriteAliasMailboxNameShouldReturnNewConfiguredValueWhenBoth() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.alias.write.mailbox.name", name);
-        configuration.addProperty("elasticsearch.alias.write.name", "other");
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getWriteAliasMailboxName())
-            .isEqualTo(new WriteAliasName(name));
-    }
-
-    @Test
-    public void getWriteAliasMailboxNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getWriteAliasMailboxName())
-            .isEqualTo(MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS);
-    }
-
-    @Test
-    public void getReadAliasQuotaRatioNameShouldReturnConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.alias.read.quota.ratio.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getReadAliasQuotaRatioName())
-            .isEqualTo(new ReadAliasName(name));
-    }
-
-    @Test
-    public void getReadAliasQuotaRatioNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getReadAliasQuotaRatioName())
-            .isEqualTo(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_READ_ALIAS);
-    }
-
-    @Test
-    public void getWriteAliasQuotaRatioNameShouldReturnConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.alias.write.quota.ratio.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getWriteAliasQuotaRatioName())
-            .isEqualTo(new WriteAliasName(name));
-    }
-
-    @Test
-    public void getWriteAliasQuotaRatioNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getWriteAliasQuotaRatioName())
-            .isEqualTo(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS);
-    }
-
-    @Test
-    public void getIndexQuotaRatioNameShouldReturnConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.index.quota.ratio.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexQuotaRatioName())
-            .isEqualTo(new IndexName(name));
-    }
-
-    @Test
-    public void getIndexQuotaRatioNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexQuotaRatioName())
-            .isEqualTo(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_INDEX);
-    }
-
-    @Test
-    public void getIndexAttachmentShouldReturnConfiguredValueWhenTrue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.indexAttachments", true);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexAttachment())
-            .isEqualTo(IndexAttachments.YES);
-    }
-
-    @Test
-    public void getIndexAttachmentShouldReturnConfiguredValueWhenFalse() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.indexAttachments", false);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexAttachment())
-            .isEqualTo(IndexAttachments.NO);
-    }
-
-    @Test
-    public void getIndexAttachmentShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexAttachment())
-            .isEqualTo(IndexAttachments.YES);
-    }
-
-
-    @Test
     public void getHostsShouldReturnConfiguredHostsWhenNoPort() throws ConfigurationException {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
         String hostname = "myHost";

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/ElasticSearchMailboxConfiguration.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/ElasticSearchMailboxConfiguration.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/ElasticSearchMailboxConfiguration.java
new file mode 100644
index 0000000..86e46f4
--- /dev/null
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/ElasticSearchMailboxConfiguration.java
@@ -0,0 +1,214 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.james.mailbox.elasticsearch;
+
+import java.util.Objects;
+import java.util.Optional;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.james.backends.es.IndexName;
+import org.apache.james.backends.es.ReadAliasName;
+import org.apache.james.backends.es.WriteAliasName;
+import org.apache.james.util.OptionalUtils;
+
+public class ElasticSearchMailboxConfiguration {
+
+    public static class Builder {
+        private Optional<IndexName> indexMailboxName;
+        private Optional<ReadAliasName> readAliasMailboxName;
+        private Optional<WriteAliasName> writeAliasMailboxName;
+        private Optional<IndexAttachments> indexAttachment;
+
+        public Builder() {
+            indexMailboxName = Optional.empty();
+            readAliasMailboxName = Optional.empty();
+            writeAliasMailboxName = Optional.empty();
+            indexAttachment = Optional.empty();
+        }
+
+        public Builder indexMailboxName(IndexName indexMailboxName) {
+            return indexMailboxName(Optional.of(indexMailboxName));
+        }
+
+        public Builder indexMailboxName(Optional<IndexName> indexMailboxName) {
+            this.indexMailboxName = indexMailboxName;
+            return this;
+        }
+
+        public Builder readAliasMailboxName(ReadAliasName readAliasMailboxName) {
+            return readAliasMailboxName(Optional.of(readAliasMailboxName));
+        }
+
+        public Builder readAliasMailboxName(Optional<ReadAliasName> readAliasMailboxName) {
+            this.readAliasMailboxName = readAliasMailboxName;
+            return this;
+        }
+
+        public Builder writeAliasMailboxName(WriteAliasName writeAliasMailboxName) {
+            return writeAliasMailboxName(Optional.of(writeAliasMailboxName));
+        }
+
+        public Builder writeAliasMailboxName(Optional<WriteAliasName> writeAliasMailboxName) {
+            this.writeAliasMailboxName = writeAliasMailboxName;
+            return this;
+        }
+
+
+        public Builder indexAttachment(IndexAttachments indexAttachment) {
+            this.indexAttachment = Optional.of(indexAttachment);
+            return this;
+        }
+
+
+
+        public ElasticSearchMailboxConfiguration build() {
+            return new ElasticSearchMailboxConfiguration(
+                indexMailboxName.orElse(MailboxElasticSearchConstants.DEFAULT_MAILBOX_INDEX),
+                readAliasMailboxName.orElse(MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS),
+                writeAliasMailboxName.orElse(MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS),
+                indexAttachment.orElse(IndexAttachments.YES));
+        }
+    }
+
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    public static final String ELASTICSEARCH_HOSTS = "elasticsearch.hosts";
+    public static final String ELASTICSEARCH_MASTER_HOST = "elasticsearch.masterHost";
+    public static final String ELASTICSEARCH_PORT = "elasticsearch.port";
+    public static final String ELASTICSEARCH_INDEX_NAME = "elasticsearch.index.name";
+    public static final String ELASTICSEARCH_INDEX_MAILBOX_NAME = "elasticsearch.index.mailbox.name";
+    public static final String ELASTICSEARCH_NB_REPLICA = "elasticsearch.nb.replica";
+    public static final String ELASTICSEARCH_NB_SHARDS = "elasticsearch.nb.shards";
+    public static final String ELASTICSEARCH_ALIAS_READ_NAME = "elasticsearch.alias.read.name";
+    public static final String ELASTICSEARCH_ALIAS_WRITE_NAME = "elasticsearch.alias.write.name";
+    public static final String ELASTICSEARCH_ALIAS_READ_MAILBOX_NAME = "elasticsearch.alias.read.mailbox.name";
+    public static final String ELASTICSEARCH_ALIAS_WRITE_MAILBOX_NAME = "elasticsearch.alias.write.mailbox.name";
+    public static final String ELASTICSEARCH_INDEX_QUOTA_RATIO_NAME = "elasticsearch.index.quota.ratio.name";
+    public static final String ELASTICSEARCH_ALIAS_READ_QUOTA_RATIO_NAME = "elasticsearch.alias.read.quota.ratio.name";
+    public static final String ELASTICSEARCH_ALIAS_WRITE_QUOTA_RATIO_NAME = "elasticsearch.alias.write.quota.ratio.name";
+    public static final String ELASTICSEARCH_RETRY_CONNECTION_MIN_DELAY = "elasticsearch.retryConnection.minDelay";
+    public static final String ELASTICSEARCH_RETRY_CONNECTION_MAX_RETRIES = "elasticsearch.retryConnection.maxRetries";
+    public static final String ELASTICSEARCH_INDEX_ATTACHMENTS = "elasticsearch.indexAttachments";
+
+    public static final int DEFAULT_CONNECTION_MAX_RETRIES = 7;
+    public static final int DEFAULT_CONNECTION_MIN_DELAY = 3000;
+    public static final boolean DEFAULT_INDEX_ATTACHMENTS = true;
+    public static final int DEFAULT_NB_SHARDS = 5;
+    public static final int DEFAULT_NB_REPLICA = 1;
+    public static final int DEFAULT_PORT = 9300;
+    private static final String LOCALHOST = "127.0.0.1";
+    public static final Optional<Integer> DEFAULT_PORT_AS_OPTIONAL = Optional.of(DEFAULT_PORT);
+
+    public static final ElasticSearchMailboxConfiguration DEFAULT_CONFIGURATION = builder().build();
+
+    public static ElasticSearchMailboxConfiguration fromProperties(Configuration configuration) {
+        return builder()
+            .indexMailboxName(computeMailboxIndexName(configuration))
+            .readAliasMailboxName(computeMailboxReadAlias(configuration))
+            .writeAliasMailboxName(computeMailboxWriteAlias(configuration))
+            .indexAttachment(provideIndexAttachments(configuration))
+            .build();
+    }
+
+    public static Optional<IndexName> computeMailboxIndexName(Configuration configuration) {
+        return OptionalUtils.or(
+            Optional.ofNullable(configuration.getString(ELASTICSEARCH_INDEX_MAILBOX_NAME))
+                .map(IndexName::new),
+            Optional.ofNullable(configuration.getString(ELASTICSEARCH_INDEX_NAME))
+                .map(IndexName::new));
+    }
+
+    public static Optional<WriteAliasName> computeMailboxWriteAlias(Configuration configuration) {
+        return OptionalUtils.or(
+            Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_WRITE_MAILBOX_NAME))
+                .map(WriteAliasName::new),
+            Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_WRITE_NAME))
+                .map(WriteAliasName::new));
+    }
+
+    public static Optional<ReadAliasName> computeMailboxReadAlias(Configuration configuration) {
+        return OptionalUtils.or(
+            Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_READ_MAILBOX_NAME))
+                .map(ReadAliasName::new),
+            Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_READ_NAME))
+                .map(ReadAliasName::new));
+    }
+
+
+    private static IndexAttachments provideIndexAttachments(Configuration configuration) {
+        if (configuration.getBoolean(ELASTICSEARCH_INDEX_ATTACHMENTS, DEFAULT_INDEX_ATTACHMENTS)) {
+            return IndexAttachments.YES;
+        }
+        return IndexAttachments.NO;
+    }
+
+
+
+
+    private final IndexName indexMailboxName;
+    private final ReadAliasName readAliasMailboxName;
+    private final WriteAliasName writeAliasMailboxName;
+    private final IndexAttachments indexAttachment;
+
+    private ElasticSearchMailboxConfiguration(IndexName indexMailboxName, ReadAliasName readAliasMailboxName,
+                                              WriteAliasName writeAliasMailboxName, IndexAttachments indexAttachment) {
+        this.indexMailboxName = indexMailboxName;
+        this.readAliasMailboxName = readAliasMailboxName;
+        this.writeAliasMailboxName = writeAliasMailboxName;
+        this.indexAttachment = indexAttachment;
+    }
+
+
+    public IndexName getIndexMailboxName() {
+        return indexMailboxName;
+    }
+
+    public ReadAliasName getReadAliasMailboxName() {
+        return readAliasMailboxName;
+    }
+
+    public WriteAliasName getWriteAliasMailboxName() {
+        return writeAliasMailboxName;
+    }
+
+    public IndexAttachments getIndexAttachment() {
+        return indexAttachment;
+    }
+
+    @Override
+    public final boolean equals(Object o) {
+        if (o instanceof ElasticSearchMailboxConfiguration) {
+            ElasticSearchMailboxConfiguration that = (ElasticSearchMailboxConfiguration) o;
+
+            return Objects.equals(this.indexAttachment, that.indexAttachment)
+                && Objects.equals(this.indexMailboxName, that.indexMailboxName)
+                && Objects.equals(this.readAliasMailboxName, that.readAliasMailboxName)
+                && Objects.equals(this.writeAliasMailboxName, that.writeAliasMailboxName);
+        }
+        return false;
+    }
+
+    @Override
+    public final int hashCode() {
+        return Objects.hash(indexMailboxName, readAliasMailboxName, writeAliasMailboxName, indexAttachment, writeAliasMailboxName);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/IndexAttachments.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/IndexAttachments.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/IndexAttachments.java
new file mode 100644
index 0000000..9d80a4a
--- /dev/null
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/IndexAttachments.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.james.mailbox.elasticsearch;
+
+public enum IndexAttachments {
+    NO, YES
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxElasticSearchConstants.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxElasticSearchConstants.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxElasticSearchConstants.java
new file mode 100644
index 0000000..0f7f11d
--- /dev/null
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxElasticSearchConstants.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.james.mailbox.elasticsearch;
+
+import org.apache.james.backends.es.IndexName;
+import org.apache.james.backends.es.ReadAliasName;
+import org.apache.james.backends.es.TypeName;
+import org.apache.james.backends.es.WriteAliasName;
+
+public interface MailboxElasticSearchConstants {
+
+    interface InjectionNames {
+        String MAILBOX = "mailbox";
+    }
+
+    WriteAliasName DEFAULT_MAILBOX_WRITE_ALIAS = new WriteAliasName("mailboxWriteAlias");
+    ReadAliasName DEFAULT_MAILBOX_READ_ALIAS = new ReadAliasName("mailboxReadAlias");
+    IndexName DEFAULT_MAILBOX_INDEX = new IndexName("mailbox_v1");
+    TypeName MESSAGE_TYPE = new TypeName("message");
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIndexCreationUtil.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIndexCreationUtil.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIndexCreationUtil.java
index c03773b..d234e0d 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIndexCreationUtil.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIndexCreationUtil.java
@@ -22,7 +22,6 @@ package org.apache.james.mailbox.elasticsearch;
 import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.IndexCreationFactory;
 import org.apache.james.backends.es.IndexName;
-import org.apache.james.backends.es.MailboxElasticSearchConstants;
 import org.apache.james.backends.es.NodeMappingFactory;
 import org.apache.james.backends.es.ReadAliasName;
 import org.apache.james.backends.es.WriteAliasName;

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
index 3d461da..d6acd0b 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
@@ -69,7 +69,6 @@ import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
 
 import java.io.IOException;
 
-import org.apache.james.backends.es.MailboxElasticSearchConstants;
 import org.apache.james.backends.es.NodeMappingFactory;
 import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants.EMailer;
 import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants.Property;

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
index 495e33d..ed008ef 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
@@ -31,12 +31,12 @@ import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.apache.james.backends.es.ElasticSearchIndexer;
-import org.apache.james.backends.es.MailboxElasticSearchConstants;
 import org.apache.james.backends.es.UpdatedRepresentation;
 import org.apache.james.mailbox.MailboxManager.MessageCapabilities;
 import org.apache.james.mailbox.MailboxManager.SearchCapabilities;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
 import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants;
 import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;
 import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher;

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
index 53df8d6..b6d9527 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
@@ -28,8 +28,8 @@ import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import org.apache.james.backends.es.IndexAttachments;
 import org.apache.james.mailbox.MailboxSession.User;
+import org.apache.james.mailbox.elasticsearch.IndexAttachments;
 import org.apache.james.mailbox.elasticsearch.query.DateResolutionFormater;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
index c40d5c9..aacd790 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
@@ -25,9 +25,9 @@ import java.util.List;
 import javax.inject.Inject;
 import javax.mail.Flags;
 
-import org.apache.james.backends.es.IndexAttachments;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession.User;
+import org.apache.james.mailbox.elasticsearch.IndexAttachments;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
index 991453a..666177d 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
@@ -28,8 +28,6 @@ import java.util.concurrent.Executors;
 import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
 import org.apache.james.backends.es.EmbeddedElasticSearch;
-import org.apache.james.backends.es.IndexAttachments;
-import org.apache.james.backends.es.MailboxElasticSearchConstants;
 import org.apache.james.backends.es.utils.TestingClientProvider;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchMailboxConfigurationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchMailboxConfigurationTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchMailboxConfigurationTest.java
new file mode 100644
index 0000000..dca02ad
--- /dev/null
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchMailboxConfigurationTest.java
@@ -0,0 +1,219 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.james.mailbox.elasticsearch;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.james.backends.es.IndexName;
+import org.apache.james.backends.es.ReadAliasName;
+import org.apache.james.backends.es.WriteAliasName;
+import org.junit.Test;
+
+public class ElasticSearchMailboxConfigurationTest {
+    @Test
+    public void getIndexMailboxNameShouldReturnOldConfiguredValue() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.index.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchMailboxConfiguration elasticSearchConfiguration = ElasticSearchMailboxConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexMailboxName())
+            .isEqualTo(new IndexName(name));
+    }
+
+    @Test
+    public void getIndexMailboxNameShouldReturnNewConfiguredValueWhenBoth() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.index.name", "other");
+        configuration.addProperty("elasticsearch.index.mailbox.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchMailboxConfiguration elasticSearchConfiguration = ElasticSearchMailboxConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexMailboxName())
+            .isEqualTo(new IndexName(name));
+    }
+
+    @Test
+    public void getIndexMailboxNameShouldReturnConfiguredValue() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.index.mailbox.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchMailboxConfiguration elasticSearchConfiguration = ElasticSearchMailboxConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexMailboxName())
+            .isEqualTo(new IndexName(name));
+    }
+
+    @Test
+    public void getIndexMailboxNameShouldReturnDefaultValueWhenMissing() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchMailboxConfiguration elasticSearchConfiguration = ElasticSearchMailboxConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexMailboxName())
+            .isEqualTo(MailboxElasticSearchConstants.DEFAULT_MAILBOX_INDEX);
+    }
+
+    @Test
+    public void getReadAliasMailboxNameShouldReturnOldConfiguredValue() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.alias.read.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchMailboxConfiguration elasticSearchConfiguration = ElasticSearchMailboxConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getReadAliasMailboxName())
+            .isEqualTo(new ReadAliasName(name));
+    }
+
+    @Test
+    public void getReadAliasMailboxNameShouldReturnConfiguredValue() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.alias.read.mailbox.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchMailboxConfiguration elasticSearchConfiguration = ElasticSearchMailboxConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getReadAliasMailboxName())
+            .isEqualTo(new ReadAliasName(name));
+    }
+
+    @Test
+    public void getReadAliasMailboxNameShouldReturnNewConfiguredValueWhenBoth() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.alias.read.mailbox.name", name);
+        configuration.addProperty("elasticsearch.alias.read.name", "other");
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchMailboxConfiguration elasticSearchConfiguration = ElasticSearchMailboxConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getReadAliasMailboxName())
+            .isEqualTo(new ReadAliasName(name));
+    }
+
+    @Test
+    public void getReadAliasMailboxNameShouldReturnDefaultValueWhenMissing() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchMailboxConfiguration elasticSearchConfiguration = ElasticSearchMailboxConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getReadAliasMailboxName())
+            .isEqualTo(MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS);
+    }
+
+    @Test
+    public void getWriteAliasMailboxNameShouldReturnOldConfiguredValue() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.alias.write.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchMailboxConfiguration elasticSearchConfiguration = ElasticSearchMailboxConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getWriteAliasMailboxName())
+            .isEqualTo(new WriteAliasName(name));
+    }
+
+    @Test
+    public void getWriteAliasMailboxNameShouldReturnConfiguredValue() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.alias.write.mailbox.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchMailboxConfiguration elasticSearchConfiguration = ElasticSearchMailboxConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getWriteAliasMailboxName())
+            .isEqualTo(new WriteAliasName(name));
+    }
+
+    @Test
+    public void getWriteAliasMailboxNameShouldReturnNewConfiguredValueWhenBoth() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.alias.write.mailbox.name", name);
+        configuration.addProperty("elasticsearch.alias.write.name", "other");
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchMailboxConfiguration elasticSearchConfiguration = ElasticSearchMailboxConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getWriteAliasMailboxName())
+            .isEqualTo(new WriteAliasName(name));
+    }
+
+    @Test
+    public void getWriteAliasMailboxNameShouldReturnDefaultValueWhenMissing() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchMailboxConfiguration elasticSearchConfiguration = ElasticSearchMailboxConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getWriteAliasMailboxName())
+            .isEqualTo(MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS);
+    }
+
+    @Test
+    public void getIndexAttachmentShouldReturnConfiguredValueWhenTrue() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.indexAttachments", true);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchMailboxConfiguration elasticSearchConfiguration = ElasticSearchMailboxConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexAttachment())
+            .isEqualTo(IndexAttachments.YES);
+    }
+
+    @Test
+    public void getIndexAttachmentShouldReturnConfiguredValueWhenFalse() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.indexAttachments", false);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchMailboxConfiguration elasticSearchConfiguration = ElasticSearchMailboxConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexAttachment())
+            .isEqualTo(IndexAttachments.NO);
+    }
+
+    @Test
+    public void getIndexAttachmentShouldReturnDefaultValueWhenMissing() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchMailboxConfiguration elasticSearchConfiguration = ElasticSearchMailboxConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexAttachment())
+            .isEqualTo(IndexAttachments.YES);
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
index 9443c9c..40b641e 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
@@ -32,7 +32,7 @@ import java.util.Optional;
 import javax.mail.Flags;
 
 import org.apache.james.mailbox.MessageUid;
-import org.apache.james.backends.es.IndexAttachments;
+import org.apache.james.mailbox.elasticsearch.IndexAttachments;
 import org.apache.james.mailbox.extractor.ParsedContent;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.inmemory.InMemoryMessageId;

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
index 3b50399..fa080f3 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
@@ -35,7 +35,7 @@ import javax.mail.util.SharedByteArrayInputStream;
 import org.apache.james.mailbox.FlagsBuilder;
 import org.apache.james.mailbox.MailboxSession.User;
 import org.apache.james.mailbox.MessageUid;
-import org.apache.james.backends.es.IndexAttachments;
+import org.apache.james.mailbox.elasticsearch.IndexAttachments;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.MessageId;

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaConfiguration.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaConfiguration.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaConfiguration.java
new file mode 100644
index 0000000..c14f339
--- /dev/null
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaConfiguration.java
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.james.quota.search.elasticsearch;
+
+import java.util.Objects;
+import java.util.Optional;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.james.backends.es.IndexName;
+import org.apache.james.backends.es.ReadAliasName;
+import org.apache.james.backends.es.WriteAliasName;
+
+public class ElasticSearchQuotaConfiguration {
+
+    public static class Builder {
+
+        private Optional<IndexName> indexQuotaRatioName;
+        private Optional<ReadAliasName> readAliasQuotaRatioName;
+        private Optional<WriteAliasName> writeAliasQuotaRatioName;
+
+        public Builder() {
+            indexQuotaRatioName = Optional.empty();
+            readAliasQuotaRatioName = Optional.empty();
+            writeAliasQuotaRatioName = Optional.empty();
+        }
+
+        public Builder indexQuotaRatioName(IndexName indexQuotaRatioName) {
+            return indexQuotaRatioName(Optional.of(indexQuotaRatioName));
+        }
+
+        public Builder indexQuotaRatioName(Optional<IndexName> indexQuotaRatioName) {
+            this.indexQuotaRatioName = indexQuotaRatioName;
+            return this;
+        }
+
+        public Builder readAliasQuotaRatioName(ReadAliasName readAliasQuotaRatioName) {
+            return readAliasQuotaRatioName(Optional.of(readAliasQuotaRatioName));
+        }
+
+        public Builder readAliasQuotaRatioName(Optional<ReadAliasName> readAliasQuotaRatioName) {
+            this.readAliasQuotaRatioName = readAliasQuotaRatioName;
+            return this;
+        }
+
+        public Builder writeAliasQuotaRatioName(WriteAliasName writeAliasQuotaRatioName) {
+            return writeAliasQuotaRatioName(Optional.of(writeAliasQuotaRatioName));
+        }
+
+        public Builder writeAliasQuotaRatioName(Optional<WriteAliasName> writeAliasQuotaRatioName) {
+            this.writeAliasQuotaRatioName = writeAliasQuotaRatioName;
+            return this;
+        }
+
+
+        public ElasticSearchQuotaConfiguration build() {
+            return new ElasticSearchQuotaConfiguration(
+                indexQuotaRatioName.orElse(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_INDEX),
+                readAliasQuotaRatioName.orElse(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_READ_ALIAS),
+                writeAliasQuotaRatioName.orElse(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS));
+        }
+    }
+
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    public static final String ELASTICSEARCH_INDEX_QUOTA_RATIO_NAME = "elasticsearch.index.quota.ratio.name";
+    public static final String ELASTICSEARCH_ALIAS_READ_QUOTA_RATIO_NAME = "elasticsearch.alias.read.quota.ratio.name";
+    public static final String ELASTICSEARCH_ALIAS_WRITE_QUOTA_RATIO_NAME = "elasticsearch.alias.write.quota.ratio.name";
+
+    public static final ElasticSearchQuotaConfiguration DEFAULT_CONFIGURATION = builder().build();
+
+    public static ElasticSearchQuotaConfiguration fromProperties(Configuration configuration) throws ConfigurationException {
+        return builder()
+            .indexQuotaRatioName(computeQuotaSearchIndexName(configuration))
+            .readAliasQuotaRatioName(computeQuotaSearchReadAlias(configuration))
+            .writeAliasQuotaRatioName(computeQuotaSearchWriteAlias(configuration))
+            .build();
+    }
+
+    public static Optional<IndexName> computeQuotaSearchIndexName(Configuration configuration) {
+        return Optional.ofNullable(configuration.getString(ELASTICSEARCH_INDEX_QUOTA_RATIO_NAME))
+            .map(IndexName::new);
+    }
+
+    public static Optional<WriteAliasName> computeQuotaSearchWriteAlias(Configuration configuration) {
+        return Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_WRITE_QUOTA_RATIO_NAME))
+            .map(WriteAliasName::new);
+    }
+
+    public static Optional<ReadAliasName> computeQuotaSearchReadAlias(Configuration configuration) {
+        return Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_READ_QUOTA_RATIO_NAME))
+                .map(ReadAliasName::new);
+    }
+
+    private final IndexName indexQuotaRatioName;
+    private final ReadAliasName readAliasQuotaRatioName;
+    private final WriteAliasName writeAliasQuotaRatioName;
+
+    private ElasticSearchQuotaConfiguration(IndexName indexQuotaRatioName, ReadAliasName readAliasQuotaRatioName, WriteAliasName writeAliasQuotaRatioName) {
+        this.indexQuotaRatioName = indexQuotaRatioName;
+        this.readAliasQuotaRatioName = readAliasQuotaRatioName;
+        this.writeAliasQuotaRatioName = writeAliasQuotaRatioName;
+    }
+
+    public IndexName getIndexQuotaRatioName() {
+        return indexQuotaRatioName;
+    }
+
+    public ReadAliasName getReadAliasQuotaRatioName() {
+        return readAliasQuotaRatioName;
+    }
+
+    public WriteAliasName getWriteAliasQuotaRatioName() {
+        return writeAliasQuotaRatioName;
+    }
+
+    @Override
+    public final boolean equals(Object o) {
+        if (o instanceof ElasticSearchQuotaConfiguration) {
+            ElasticSearchQuotaConfiguration that = (ElasticSearchQuotaConfiguration) o;
+
+            return Objects.equals(this.indexQuotaRatioName, that.indexQuotaRatioName)
+                && Objects.equals(this.readAliasQuotaRatioName, that.readAliasQuotaRatioName)
+                && Objects.equals(this.writeAliasQuotaRatioName, that.writeAliasQuotaRatioName);
+        }
+        return false;
+    }
+
+    @Override
+    public final int hashCode() {
+        return Objects.hash(indexQuotaRatioName, readAliasQuotaRatioName);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearcher.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearcher.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearcher.java
index 59bb8f6..21d55a8 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearcher.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearcher.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.quota.search.elasticsearch;
 
-import static org.apache.james.backends.es.QuotaRatioElasticSearchConstants.QUOTA_RATIO_TYPE;
+import static org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants.QUOTA_RATIO_TYPE;
 import static org.apache.james.quota.search.elasticsearch.json.JsonMessageConstants.USER;
 
 import java.util.Arrays;

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioElasticSearchConstants.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioElasticSearchConstants.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioElasticSearchConstants.java
new file mode 100644
index 0000000..649ab68
--- /dev/null
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioElasticSearchConstants.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.james.quota.search.elasticsearch;
+
+import org.apache.james.backends.es.IndexName;
+import org.apache.james.backends.es.ReadAliasName;
+import org.apache.james.backends.es.TypeName;
+import org.apache.james.backends.es.WriteAliasName;
+
+public interface QuotaRatioElasticSearchConstants {
+
+    interface InjectionNames {
+        String QUOTA_RATIO = "quotaRatio";
+    }
+
+    WriteAliasName DEFAULT_QUOTA_RATIO_WRITE_ALIAS = new WriteAliasName("quotaRatioWriteAlias");
+    ReadAliasName DEFAULT_QUOTA_RATIO_READ_ALIAS = new ReadAliasName("quotaRatioReadAlias");
+    IndexName DEFAULT_QUOTA_RATIO_INDEX = new IndexName("quota_ratio_v1");
+    TypeName QUOTA_RATIO_TYPE = new TypeName("quotaRatio");
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioMappingFactory.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioMappingFactory.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioMappingFactory.java
index 096a8e5..128f1d1 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioMappingFactory.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioMappingFactory.java
@@ -32,7 +32,6 @@ import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
 
 import java.io.IOException;
 
-import org.apache.james.backends.es.QuotaRatioElasticSearchConstants;
 import org.elasticsearch.common.xcontent.XContentBuilder;
 
 public class QuotaRatioMappingFactory {

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaSearchIndexCreationUtil.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaSearchIndexCreationUtil.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaSearchIndexCreationUtil.java
index 5f8d654..f546230 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaSearchIndexCreationUtil.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaSearchIndexCreationUtil.java
@@ -24,7 +24,6 @@ import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.IndexCreationFactory;
 import org.apache.james.backends.es.IndexName;
 import org.apache.james.backends.es.NodeMappingFactory;
-import org.apache.james.backends.es.QuotaRatioElasticSearchConstants;
 import org.elasticsearch.client.Client;
 
 public class QuotaSearchIndexCreationUtil {

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
index 6e7a1d0..1bdd295 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
@@ -22,10 +22,10 @@ import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.apache.james.backends.es.ElasticSearchIndexer;
-import org.apache.james.backends.es.QuotaRatioElasticSearchConstants;
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxSession.User;
+import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants;
 import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;


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


[04/11] james-project git commit: JAMES-2590 Move ElasticSearch configuration classes to ES-backend

Posted by ad...@apache.org.
http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/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
deleted file mode 100644
index f63960e..0000000
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchConfiguration.java
+++ /dev/null
@@ -1,423 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.modules.mailbox;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-
-import org.apache.commons.configuration.AbstractConfiguration;
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.james.backends.es.IndexName;
-import org.apache.james.backends.es.ReadAliasName;
-import org.apache.james.backends.es.WriteAliasName;
-import org.apache.james.mailbox.elasticsearch.IndexAttachments;
-import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
-import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants;
-import org.apache.james.util.Host;
-import org.apache.james.util.OptionalUtils;
-
-import com.github.steveash.guavate.Guavate;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-
-public class ElasticSearchConfiguration {
-
-    public static class Builder {
-
-        private final ImmutableList.Builder<Host> hosts;
-        private Optional<IndexName> indexMailboxName;
-        private Optional<ReadAliasName> readAliasMailboxName;
-        private Optional<WriteAliasName> writeAliasMailboxName;
-        private Optional<IndexName> indexQuotaRatioName;
-        private Optional<ReadAliasName> readAliasQuotaRatioName;
-        private Optional<WriteAliasName> writeAliasQuotaRatioName;
-        private Optional<Integer> nbShards;
-        private Optional<Integer> nbReplica;
-        private Optional<Integer> minDelay;
-        private Optional<Integer> maxRetries;
-        private Optional<IndexAttachments> indexAttachment;
-
-        public Builder() {
-            hosts = ImmutableList.builder();
-            indexMailboxName = Optional.empty();
-            readAliasMailboxName = Optional.empty();
-            writeAliasMailboxName = Optional.empty();
-            indexQuotaRatioName = Optional.empty();
-            readAliasQuotaRatioName = Optional.empty();
-            writeAliasQuotaRatioName = Optional.empty();
-            nbShards = Optional.empty();
-            nbReplica = Optional.empty();
-            minDelay = Optional.empty();
-            maxRetries = Optional.empty();
-            indexAttachment = Optional.empty();
-        }
-
-        public Builder addHost(Host host) {
-            this.hosts.add(host);
-            return this;
-        }
-
-        public Builder addHosts(Collection<Host> hosts) {
-            this.hosts.addAll(hosts);
-            return this;
-        }
-
-        public Builder indexMailboxName(IndexName indexMailboxName) {
-            return indexMailboxName(Optional.of(indexMailboxName));
-        }
-
-        public Builder indexMailboxName(Optional<IndexName> indexMailboxName) {
-            this.indexMailboxName = indexMailboxName;
-            return this;
-        }
-
-        public Builder readAliasMailboxName(ReadAliasName readAliasMailboxName) {
-            return readAliasMailboxName(Optional.of(readAliasMailboxName));
-        }
-
-        public Builder readAliasMailboxName(Optional<ReadAliasName> readAliasMailboxName) {
-            this.readAliasMailboxName = readAliasMailboxName;
-            return this;
-        }
-
-        public Builder writeAliasMailboxName(WriteAliasName writeAliasMailboxName) {
-            return writeAliasMailboxName(Optional.of(writeAliasMailboxName));
-        }
-
-        public Builder writeAliasMailboxName(Optional<WriteAliasName> writeAliasMailboxName) {
-            this.writeAliasMailboxName = writeAliasMailboxName;
-            return this;
-        }
-
-        public Builder indexQuotaRatioName(IndexName indexQuotaRatioName) {
-            return indexQuotaRatioName(Optional.of(indexQuotaRatioName));
-        }
-
-        public Builder indexQuotaRatioName(Optional<IndexName> indexQuotaRatioName) {
-            this.indexQuotaRatioName = indexQuotaRatioName;
-            return this;
-        }
-
-        public Builder readAliasQuotaRatioName(ReadAliasName readAliasQuotaRatioName) {
-            return readAliasQuotaRatioName(Optional.of(readAliasQuotaRatioName));
-        }
-
-        public Builder readAliasQuotaRatioName(Optional<ReadAliasName> readAliasQuotaRatioName) {
-            this.readAliasQuotaRatioName = readAliasQuotaRatioName;
-            return this;
-        }
-
-        public Builder writeAliasQuotaRatioName(WriteAliasName writeAliasQuotaRatioName) {
-            return writeAliasQuotaRatioName(Optional.of(writeAliasQuotaRatioName));
-        }
-
-        public Builder writeAliasQuotaRatioName(Optional<WriteAliasName> writeAliasQuotaRatioName) {
-            this.writeAliasQuotaRatioName = writeAliasQuotaRatioName;
-            return this;
-        }
-
-        public Builder indexAttachment(IndexAttachments indexAttachment) {
-            this.indexAttachment = Optional.of(indexAttachment);
-            return this;
-        }
-
-        public Builder nbShards(Optional<Integer> nbShards) {
-            this.nbShards = nbShards;
-            return this;
-        }
-
-        public Builder nbReplica(Optional<Integer> nbReplica) {
-            this.nbReplica = nbReplica;
-            return this;
-        }
-
-        public Builder minDelay(Optional<Integer> minDelay) {
-            this.minDelay = minDelay;
-            return this;
-        }
-
-        public Builder maxRetries(Optional<Integer> maxRetries) {
-            this.maxRetries = maxRetries;
-            return this;
-        }
-
-        public ElasticSearchConfiguration build() {
-            ImmutableList<Host> hosts = this.hosts.build();
-            Preconditions.checkState(!hosts.isEmpty(), "You need to specify ElasticSearch host");
-            return new ElasticSearchConfiguration(
-                hosts,
-                indexMailboxName.orElse(MailboxElasticSearchConstants.DEFAULT_MAILBOX_INDEX),
-                readAliasMailboxName.orElse(MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS),
-                writeAliasMailboxName.orElse(MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS),
-                indexQuotaRatioName.orElse(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_INDEX),
-                readAliasQuotaRatioName.orElse(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_READ_ALIAS),
-                writeAliasQuotaRatioName.orElse(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS),
-                nbShards.orElse(DEFAULT_NB_SHARDS),
-                nbReplica.orElse(DEFAULT_NB_REPLICA),
-                minDelay.orElse(DEFAULT_CONNECTION_MIN_DELAY),
-                maxRetries.orElse(DEFAULT_CONNECTION_MAX_RETRIES),
-                indexAttachment.orElse(IndexAttachments.YES));
-        }
-    }
-
-    public static Builder builder() {
-        return new Builder();
-    }
-
-    public static final String ELASTICSEARCH_HOSTS = "elasticsearch.hosts";
-    public static final String ELASTICSEARCH_MASTER_HOST = "elasticsearch.masterHost";
-    public static final String ELASTICSEARCH_PORT = "elasticsearch.port";
-    public static final String ELASTICSEARCH_INDEX_NAME = "elasticsearch.index.name";
-    public static final String ELASTICSEARCH_INDEX_MAILBOX_NAME = "elasticsearch.index.mailbox.name";
-    public static final String ELASTICSEARCH_NB_REPLICA = "elasticsearch.nb.replica";
-    public static final String ELASTICSEARCH_NB_SHARDS = "elasticsearch.nb.shards";
-    public static final String ELASTICSEARCH_ALIAS_READ_NAME = "elasticsearch.alias.read.name";
-    public static final String ELASTICSEARCH_ALIAS_WRITE_NAME = "elasticsearch.alias.write.name";
-    public static final String ELASTICSEARCH_ALIAS_READ_MAILBOX_NAME = "elasticsearch.alias.read.mailbox.name";
-    public static final String ELASTICSEARCH_ALIAS_WRITE_MAILBOX_NAME = "elasticsearch.alias.write.mailbox.name";
-    public static final String ELASTICSEARCH_INDEX_QUOTA_RATIO_NAME = "elasticsearch.index.quota.ratio.name";
-    public static final String ELASTICSEARCH_ALIAS_READ_QUOTA_RATIO_NAME = "elasticsearch.alias.read.quota.ratio.name";
-    public static final String ELASTICSEARCH_ALIAS_WRITE_QUOTA_RATIO_NAME = "elasticsearch.alias.write.quota.ratio.name";
-    public static final String ELASTICSEARCH_RETRY_CONNECTION_MIN_DELAY = "elasticsearch.retryConnection.minDelay";
-    public static final String ELASTICSEARCH_RETRY_CONNECTION_MAX_RETRIES = "elasticsearch.retryConnection.maxRetries";
-    public static final String ELASTICSEARCH_INDEX_ATTACHMENTS = "elasticsearch.indexAttachments";
-
-    public static final int DEFAULT_CONNECTION_MAX_RETRIES = 7;
-    public static final int DEFAULT_CONNECTION_MIN_DELAY = 3000;
-    public static final boolean DEFAULT_INDEX_ATTACHMENTS = true;
-    public static final int DEFAULT_NB_SHARDS = 1;
-    public static final int DEFAULT_NB_REPLICA = 0;
-    public static final int DEFAULT_PORT = 9300;
-    private static final String LOCALHOST = "127.0.0.1";
-    public static final Optional<Integer> DEFAULT_PORT_AS_OPTIONAL = Optional.of(DEFAULT_PORT);
-
-    public static final ElasticSearchConfiguration DEFAULT_CONFIGURATION = builder()
-        .addHost(Host.from(LOCALHOST, DEFAULT_PORT))
-        .build();
-
-    public static ElasticSearchConfiguration fromProperties(Configuration configuration) throws ConfigurationException {
-        return builder()
-            .addHosts(getHosts(configuration))
-            .indexMailboxName(computeMailboxIndexName(configuration))
-            .readAliasMailboxName(computeMailboxReadAlias(configuration))
-            .writeAliasMailboxName(computeMailboxWriteAlias(configuration))
-            .indexQuotaRatioName(computeQuotaSearchIndexName(configuration))
-            .readAliasQuotaRatioName(computeQuotaSearchReadAlias(configuration))
-            .writeAliasQuotaRatioName(computeQuotaSearchWriteAlias(configuration))
-            .nbShards(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_NB_SHARDS, null)))
-            .nbReplica(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_NB_REPLICA, null)))
-            .minDelay(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_RETRY_CONNECTION_MIN_DELAY, null)))
-            .maxRetries(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_RETRY_CONNECTION_MAX_RETRIES, null)))
-            .indexAttachment(provideIndexAttachments(configuration))
-            .build();
-    }
-
-    public static Optional<IndexName> computeMailboxIndexName(Configuration configuration) {
-        return OptionalUtils.or(
-            Optional.ofNullable(configuration.getString(ELASTICSEARCH_INDEX_MAILBOX_NAME))
-                .map(IndexName::new),
-            Optional.ofNullable(configuration.getString(ELASTICSEARCH_INDEX_NAME))
-                .map(IndexName::new));
-    }
-
-    public static Optional<WriteAliasName> computeMailboxWriteAlias(Configuration configuration) {
-        return OptionalUtils.or(
-            Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_WRITE_MAILBOX_NAME))
-                .map(WriteAliasName::new),
-            Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_WRITE_NAME))
-                .map(WriteAliasName::new));
-    }
-
-    public static Optional<ReadAliasName> computeMailboxReadAlias(Configuration configuration) {
-        return OptionalUtils.or(
-            Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_READ_MAILBOX_NAME))
-                .map(ReadAliasName::new),
-            Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_READ_NAME))
-                .map(ReadAliasName::new));
-    }
-
-    public static Optional<IndexName> computeQuotaSearchIndexName(Configuration configuration) {
-        return Optional.ofNullable(configuration.getString(ELASTICSEARCH_INDEX_QUOTA_RATIO_NAME))
-            .map(IndexName::new);
-    }
-
-    public static Optional<WriteAliasName> computeQuotaSearchWriteAlias(Configuration configuration) {
-        return Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_WRITE_QUOTA_RATIO_NAME))
-            .map(WriteAliasName::new);
-    }
-
-    public static Optional<ReadAliasName> computeQuotaSearchReadAlias(Configuration configuration) {
-        return Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_READ_QUOTA_RATIO_NAME))
-                .map(ReadAliasName::new);
-    }
-
-    private static IndexAttachments provideIndexAttachments(Configuration configuration) {
-        if (configuration.getBoolean(ELASTICSEARCH_INDEX_ATTACHMENTS, DEFAULT_INDEX_ATTACHMENTS)) {
-            return IndexAttachments.YES;
-        }
-        return IndexAttachments.NO;
-    }
-
-    private static ImmutableList<Host> getHosts(Configuration propertiesReader) throws ConfigurationException {
-        AbstractConfiguration.setDefaultListDelimiter(',');
-        Optional<String> masterHost = Optional.ofNullable(
-            propertiesReader.getString(ELASTICSEARCH_MASTER_HOST, null));
-        Optional<Integer> masterPort = Optional.ofNullable(
-            propertiesReader.getInteger(ELASTICSEARCH_PORT, null));
-        List<String> multiHosts = Arrays.asList(propertiesReader.getStringArray(ELASTICSEARCH_HOSTS));
-
-        validateHostsConfigurationOptions(masterHost, masterPort, multiHosts);
-
-        if (masterHost.isPresent()) {
-            return ImmutableList.of(
-                Host.from(masterHost.get(),
-                masterPort.get()));
-        } else {
-            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,
-                                                  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.isEmpty() && masterHost.isPresent()) {
-            throw new ConfigurationException("You should choose between mono host set up and " + ELASTICSEARCH_HOSTS);
-        }
-        if (multiHosts.isEmpty() && !masterHost.isPresent()) {
-            throw new ConfigurationException("You should specify either (" + ELASTICSEARCH_MASTER_HOST + " and " + ELASTICSEARCH_PORT + ") or " + ELASTICSEARCH_HOSTS);
-        }
-    }
-
-    private final ImmutableList<Host> hosts;
-    private final IndexName indexMailboxName;
-    private final ReadAliasName readAliasMailboxName;
-    private final WriteAliasName writeAliasMailboxName;
-    private final IndexName indexQuotaRatioName;
-    private final ReadAliasName readAliasQuotaRatioName;
-    private final WriteAliasName writeAliasQuotaRatioName;
-    private final int nbShards;
-    private final int nbReplica;
-    private final int minDelay;
-    private final int maxRetries;
-    private final IndexAttachments indexAttachment;
-
-    private ElasticSearchConfiguration(ImmutableList<Host> hosts, IndexName indexMailboxName, ReadAliasName readAliasMailboxName,
-                                      WriteAliasName writeAliasMailboxName, IndexName indexQuotaRatioName, ReadAliasName readAliasQuotaRatioName, WriteAliasName writeAliasQuotaRatioName, int nbShards, int nbReplica, int minDelay,
-                                      int maxRetries, IndexAttachments indexAttachment) {
-        this.hosts = hosts;
-        this.indexMailboxName = indexMailboxName;
-        this.readAliasMailboxName = readAliasMailboxName;
-        this.writeAliasMailboxName = writeAliasMailboxName;
-        this.indexQuotaRatioName = indexQuotaRatioName;
-        this.readAliasQuotaRatioName = readAliasQuotaRatioName;
-        this.writeAliasQuotaRatioName = writeAliasQuotaRatioName;
-        this.nbShards = nbShards;
-        this.nbReplica = nbReplica;
-        this.minDelay = minDelay;
-        this.maxRetries = maxRetries;
-        this.indexAttachment = indexAttachment;
-    }
-
-    public ImmutableList<Host> getHosts() {
-        return hosts;
-    }
-
-    public IndexName getIndexMailboxName() {
-        return indexMailboxName;
-    }
-
-    public ReadAliasName getReadAliasMailboxName() {
-        return readAliasMailboxName;
-    }
-
-    public WriteAliasName getWriteAliasMailboxName() {
-        return writeAliasMailboxName;
-    }
-
-    public int getNbShards() {
-        return nbShards;
-    }
-
-    public int getNbReplica() {
-        return nbReplica;
-    }
-
-    public int getMinDelay() {
-        return minDelay;
-    }
-
-    public int getMaxRetries() {
-        return maxRetries;
-    }
-
-    public IndexAttachments getIndexAttachment() {
-        return indexAttachment;
-    }
-
-    public IndexName getIndexQuotaRatioName() {
-        return indexQuotaRatioName;
-    }
-
-    public ReadAliasName getReadAliasQuotaRatioName() {
-        return readAliasQuotaRatioName;
-    }
-
-    public WriteAliasName getWriteAliasQuotaRatioName() {
-        return writeAliasQuotaRatioName;
-    }
-
-    @Override
-    public final boolean equals(Object o) {
-        if (o instanceof ElasticSearchConfiguration) {
-            ElasticSearchConfiguration that = (ElasticSearchConfiguration) o;
-
-            return Objects.equals(this.nbShards, that.nbShards)
-                && Objects.equals(this.nbReplica, that.nbReplica)
-                && Objects.equals(this.minDelay, that.minDelay)
-                && Objects.equals(this.maxRetries, that.maxRetries)
-                && Objects.equals(this.indexAttachment, that.indexAttachment)
-                && Objects.equals(this.hosts, that.hosts)
-                && Objects.equals(this.indexMailboxName, that.indexMailboxName)
-                && Objects.equals(this.readAliasMailboxName, that.readAliasMailboxName)
-                && Objects.equals(this.writeAliasMailboxName, that.writeAliasMailboxName)
-                && Objects.equals(this.indexQuotaRatioName, that.indexQuotaRatioName)
-                && Objects.equals(this.readAliasQuotaRatioName, that.readAliasQuotaRatioName)
-                && Objects.equals(this.writeAliasQuotaRatioName, that.writeAliasQuotaRatioName);
-        }
-        return false;
-    }
-
-    @Override
-    public final int hashCode() {
-        return Objects.hash(hosts, indexMailboxName, readAliasMailboxName, writeAliasMailboxName, nbShards,
-            nbReplica, minDelay, maxRetries, indexAttachment, indexQuotaRatioName, readAliasQuotaRatioName, writeAliasMailboxName);
-    }
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
index 9af4daa..3d89665 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
@@ -32,9 +32,10 @@ import javax.inject.Singleton;
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.backends.es.ClientProviderImpl;
+import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
-import org.apache.james.mailbox.elasticsearch.IndexAttachments;
-import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
+import org.apache.james.backends.es.IndexAttachments;
+import org.apache.james.backends.es.MailboxElasticSearchConstants;
 import org.apache.james.mailbox.elasticsearch.MailboxIndexCreationUtil;
 import org.apache.james.mailbox.elasticsearch.events.ElasticSearchListeningMessageSearchIndex;
 import org.apache.james.mailbox.elasticsearch.query.QueryConverter;

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
index ad9dd6f..e7e6e0b 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
@@ -23,11 +23,12 @@ import java.util.concurrent.ExecutorService;
 
 import javax.inject.Named;
 
+import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
+import org.apache.james.backends.es.QuotaRatioElasticSearchConstants;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.quota.search.QuotaSearcher;
 import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaSearcher;
-import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants;
 import org.apache.james.quota.search.elasticsearch.events.ElasticSearchQuotaMailboxListener;
 import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;
 import org.elasticsearch.client.Client;

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
index a9e3c52..54074c0 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
@@ -31,11 +31,11 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.james.mailbox.elasticsearch.IndexAttachments;
+import org.apache.james.backends.es.IndexAttachments;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.store.search.PDFTextExtractor;
 import org.apache.james.modules.TestJMAPServerModule;
-import org.apache.james.modules.mailbox.ElasticSearchConfiguration;
+import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.modules.protocols.ImapGuiceProbe;
 import org.apache.james.util.Host;
 import org.apache.james.util.docker.Images;

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/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
deleted file mode 100644
index dd03104..0000000
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/ElasticSearchConfigurationTest.java
+++ /dev/null
@@ -1,518 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.modules.mailbox;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-
-import java.util.Optional;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.PropertiesConfiguration;
-import org.apache.james.backends.es.IndexName;
-import org.apache.james.backends.es.ReadAliasName;
-import org.apache.james.backends.es.WriteAliasName;
-import org.apache.james.mailbox.elasticsearch.IndexAttachments;
-import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
-import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants;
-import org.apache.james.util.Host;
-import org.junit.Test;
-
-import com.google.common.collect.ImmutableList;
-
-public class ElasticSearchConfigurationTest {
-
-    @Test
-    public void getNbReplicaShouldReturnConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        int value = 36;
-        configuration.addProperty("elasticsearch.nb.replica", value);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getNbReplica())
-            .isEqualTo(value);
-    }
-
-    @Test
-    public void getNbReplicaShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getNbReplica())
-            .isEqualTo(ElasticSearchConfiguration.DEFAULT_NB_REPLICA);
-    }
-
-    @Test
-    public void getNbShardsShouldReturnConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        int value = 36;
-        configuration.addProperty("elasticsearch.nb.shards", value);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getNbShards())
-            .isEqualTo(value);
-    }
-
-    @Test
-    public void getNbShardsShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getNbShards())
-            .isEqualTo(ElasticSearchConfiguration.DEFAULT_NB_SHARDS);
-    }
-
-    @Test
-    public void getMaxRetriesShouldReturnConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        int value = 36;
-        configuration.addProperty("elasticsearch.retryConnection.maxRetries", value);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getMaxRetries())
-            .isEqualTo(value);
-    }
-
-    @Test
-    public void getMaxRetriesShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getMaxRetries())
-            .isEqualTo(ElasticSearchConfiguration.DEFAULT_CONNECTION_MAX_RETRIES);
-    }
-
-    @Test
-    public void getMinDelayShouldReturnConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        int value = 36;
-        configuration.addProperty("elasticsearch.retryConnection.minDelay", value);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getMinDelay())
-            .isEqualTo(value);
-    }
-
-    @Test
-    public void getMinDelayShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getMinDelay())
-            .isEqualTo(ElasticSearchConfiguration.DEFAULT_CONNECTION_MIN_DELAY);
-    }
-
-    @Test
-    public void getIndexMailboxNameShouldReturnOldConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.index.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexMailboxName())
-            .isEqualTo(new IndexName(name));
-    }
-
-    @Test
-    public void getIndexMailboxNameShouldReturnNewConfiguredValueWhenBoth() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.index.name", "other");
-        configuration.addProperty("elasticsearch.index.mailbox.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexMailboxName())
-            .isEqualTo(new IndexName(name));
-    }
-
-    @Test
-    public void getIndexMailboxNameShouldReturnConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.index.mailbox.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexMailboxName())
-            .isEqualTo(new IndexName(name));
-    }
-
-    @Test
-    public void getIndexMailboxNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexMailboxName())
-            .isEqualTo(MailboxElasticSearchConstants.DEFAULT_MAILBOX_INDEX);
-    }
-
-    @Test
-    public void getReadAliasMailboxNameShouldReturnOldConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.alias.read.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getReadAliasMailboxName())
-            .isEqualTo(new ReadAliasName(name));
-    }
-
-    @Test
-    public void getReadAliasMailboxNameShouldReturnConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.alias.read.mailbox.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getReadAliasMailboxName())
-            .isEqualTo(new ReadAliasName(name));
-    }
-
-    @Test
-    public void getReadAliasMailboxNameShouldReturnNewConfiguredValueWhenBoth() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.alias.read.mailbox.name", name);
-        configuration.addProperty("elasticsearch.alias.read.name", "other");
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getReadAliasMailboxName())
-            .isEqualTo(new ReadAliasName(name));
-    }
-
-    @Test
-    public void getReadAliasMailboxNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getReadAliasMailboxName())
-            .isEqualTo(MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS);
-    }
-
-    @Test
-    public void getWriteAliasMailboxNameShouldReturnOldConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.alias.write.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getWriteAliasMailboxName())
-            .isEqualTo(new WriteAliasName(name));
-    }
-
-    @Test
-    public void getWriteAliasMailboxNameShouldReturnConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.alias.write.mailbox.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getWriteAliasMailboxName())
-            .isEqualTo(new WriteAliasName(name));
-    }
-
-    @Test
-    public void getWriteAliasMailboxNameShouldReturnNewConfiguredValueWhenBoth() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.alias.write.mailbox.name", name);
-        configuration.addProperty("elasticsearch.alias.write.name", "other");
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getWriteAliasMailboxName())
-            .isEqualTo(new WriteAliasName(name));
-    }
-
-    @Test
-    public void getWriteAliasMailboxNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getWriteAliasMailboxName())
-            .isEqualTo(MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS);
-    }
-
-    @Test
-    public void getReadAliasQuotaRatioNameShouldReturnConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.alias.read.quota.ratio.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getReadAliasQuotaRatioName())
-            .isEqualTo(new ReadAliasName(name));
-    }
-
-    @Test
-    public void getReadAliasQuotaRatioNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getReadAliasQuotaRatioName())
-            .isEqualTo(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_READ_ALIAS);
-    }
-
-    @Test
-    public void getWriteAliasQuotaRatioNameShouldReturnConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.alias.write.quota.ratio.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getWriteAliasQuotaRatioName())
-            .isEqualTo(new WriteAliasName(name));
-    }
-
-    @Test
-    public void getWriteAliasQuotaRatioNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getWriteAliasQuotaRatioName())
-            .isEqualTo(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS);
-    }
-
-    @Test
-    public void getIndexQuotaRatioNameShouldReturnConfiguredValue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String name = "name";
-        configuration.addProperty("elasticsearch.index.quota.ratio.name", name);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexQuotaRatioName())
-            .isEqualTo(new IndexName(name));
-    }
-
-    @Test
-    public void getIndexQuotaRatioNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexQuotaRatioName())
-            .isEqualTo(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_INDEX);
-    }
-
-    @Test
-    public void getIndexAttachmentShouldReturnConfiguredValueWhenTrue() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.indexAttachments", true);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexAttachment())
-            .isEqualTo(IndexAttachments.YES);
-    }
-
-    @Test
-    public void getIndexAttachmentShouldReturnConfiguredValueWhenFalse() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.indexAttachments", false);
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexAttachment())
-            .isEqualTo(IndexAttachments.NO);
-    }
-
-    @Test
-    public void getIndexAttachmentShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getIndexAttachment())
-            .isEqualTo(IndexAttachments.YES);
-    }
-
-
-    @Test
-    public void getHostsShouldReturnConfiguredHostsWhenNoPort() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String hostname = "myHost";
-        configuration.addProperty("elasticsearch.hosts", hostname);
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getHosts())
-            .containsOnly(Host.from(hostname, ElasticSearchConfiguration.DEFAULT_PORT));
-    }
-
-    @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";
-        int port = 2154;
-        configuration.addProperty("elasticsearch.hosts", hostname + ":" + port);
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getHosts())
-            .containsOnly(Host.from(hostname, port));
-    }
-
-    @Test
-    public void getHostsShouldReturnConfiguredMasterHost() throws ConfigurationException {
-        PropertiesConfiguration configuration = new PropertiesConfiguration();
-        String hostname = "myHost";
-        configuration.addProperty("elasticsearch.masterHost", hostname);
-        int port = 9300;
-        configuration.addProperty("elasticsearch.port", port);
-
-        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
-
-        assertThat(elasticSearchConfiguration.getHosts())
-            .containsOnly(Host.from(hostname, port));
-    }
-
-    @Test
-    public void validateHostsConfigurationOptionsShouldThrowWhenNoHostSpecify() {
-        assertThatThrownBy(() ->
-            ElasticSearchConfiguration.validateHostsConfigurationOptions(
-                Optional.empty(),
-                Optional.empty(),
-                ImmutableList.of()))
-            .isInstanceOf(ConfigurationException.class)
-            .hasMessage("You should specify either (" + ElasticSearchConfiguration.ELASTICSEARCH_MASTER_HOST +
-                " and " + ElasticSearchConfiguration.ELASTICSEARCH_PORT +
-                ") or " + ElasticSearchConfiguration.ELASTICSEARCH_HOSTS);
-    }
-
-    @Test
-    public void validateHostsConfigurationOptionsShouldThrowWhenMonoAndMultiHostSpecified() {
-        assertThatThrownBy(() ->
-            ElasticSearchConfiguration.validateHostsConfigurationOptions(
-                Optional.of("localhost"),
-                Optional.of(9200),
-                ImmutableList.of("localhost:9200")))
-            .isInstanceOf(ConfigurationException.class)
-            .hasMessage("You should choose between mono host set up and " + ElasticSearchConfiguration.ELASTICSEARCH_HOSTS);
-    }
-
-    @Test
-    public void validateHostsConfigurationOptionsShouldThrowWhenMonoHostWithoutPort() {
-        assertThatThrownBy(() ->
-            ElasticSearchConfiguration.validateHostsConfigurationOptions(
-                Optional.of("localhost"),
-                Optional.empty(),
-                ImmutableList.of()))
-            .isInstanceOf(ConfigurationException.class)
-            .hasMessage(ElasticSearchConfiguration.ELASTICSEARCH_MASTER_HOST +
-                " and " + ElasticSearchConfiguration.ELASTICSEARCH_PORT + " should be specified together");
-    }
-
-    @Test
-    public void validateHostsConfigurationOptionsShouldThrowWhenMonoHostWithoutAddress() {
-        assertThatThrownBy(() ->
-        ElasticSearchConfiguration.validateHostsConfigurationOptions(
-            Optional.empty(),
-            Optional.of(9200),
-            ImmutableList.of()))
-        .isInstanceOf(ConfigurationException.class)
-        .hasMessage(ElasticSearchConfiguration.ELASTICSEARCH_MASTER_HOST + " and " +
-            ElasticSearchConfiguration.ELASTICSEARCH_PORT + " should be specified together");
-    }
-
-    @Test
-    public void validateHostsConfigurationOptionsShouldAcceptMonoHostConfiguration() throws Exception {
-        ElasticSearchConfiguration.validateHostsConfigurationOptions(
-            Optional.of("localhost"),
-            Optional.of(9200),
-            ImmutableList.of());
-    }
-
-    @Test
-    public void validateHostsConfigurationOptionsShouldAcceptMultiHostConfiguration() throws Exception {
-        ElasticSearchConfiguration.validateHostsConfigurationOptions(
-            Optional.empty(),
-            Optional.empty(),
-            ImmutableList.of("localhost:9200"));
-    }
-
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
index 48f25f0..cf42497 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
@@ -33,7 +33,7 @@ import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.quota.search.QuotaSearchTestSystem;
 import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaSearcher;
-import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants;
+import org.apache.james.backends.es.QuotaRatioElasticSearchConstants;
 import org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil;
 import org.apache.james.quota.search.elasticsearch.events.ElasticSearchQuotaMailboxListener;
 import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;


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


[02/11] james-project git commit: JAMES-2592 Use assertThatThrownBy instead of ExpectedException

Posted by ad...@apache.org.
JAMES-2592 Use assertThatThrownBy instead of ExpectedException


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

Branch: refs/heads/3.2.x
Commit: 219b961d44dea1dffe3ff37658f8b1393605d9db
Parents: 8bdf5c8
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Nov 13 16:29:13 2018 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Fri Dec 7 17:11:56 2018 +0100

----------------------------------------------------------------------
 .../backends/es/ClientProviderImplTest.java     | 86 ++++++++------------
 1 file changed, 33 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/219b961d/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplTest.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplTest.java
index 95f1014..a901199 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplTest.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplTest.java
@@ -20,129 +20,109 @@
 package org.apache.james.backends.es;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.elasticsearch.common.settings.Settings;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.ExpectedException;
 
 import java.util.Optional;
 
 public class ClientProviderImplTest {
 
-    @Rule
-    public ExpectedException expectedException = ExpectedException.none();
-
     @Test
     public void fromHostsStringShouldThrowOnNullString() {
-        expectedException.expect(NullPointerException.class);
-
-        ClientProviderImpl.fromHostsString(null, Optional.empty());
+        assertThatThrownBy(() -> ClientProviderImpl.fromHostsString(null, Optional.empty()))
+                .isInstanceOf(NullPointerException.class);
     }
 
     @Test
     public void fromHostsStringShouldThrowOnEmptyString() {
-        expectedException.expect(IllegalArgumentException.class);
-
-        ClientProviderImpl.fromHostsString("", Optional.empty());
+        assertThatThrownBy(() -> ClientProviderImpl.fromHostsString("", Optional.empty()))
+                .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     public void forHostShouldThrowOnNullHost() {
-        expectedException.expect(NullPointerException.class);
-
-        ClientProviderImpl.forHost(null, 9200, Optional.empty());
+        assertThatThrownBy(() -> ClientProviderImpl.forHost(null, 9200, Optional.empty()))
+                .isInstanceOf(NullPointerException.class);
     }
 
     @Test
     public void forHostShouldThrowOnEmptyHost() {
-        expectedException.expect(IllegalArgumentException.class);
-
-        ClientProviderImpl.forHost("", 9200, Optional.empty());
+        assertThatThrownBy(() -> ClientProviderImpl.forHost("", 9200, Optional.empty()))
+                .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     public void forHostShouldThrowOnNegativePort() {
-        expectedException.expect(IllegalArgumentException.class);
-
-        ClientProviderImpl.forHost("localhost", -1, Optional.empty());
+        assertThatThrownBy(() -> ClientProviderImpl.forHost("localhost", -1, Optional.empty()))
+                .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     public void forHostShouldThrowOnZeroPort() {
-        expectedException.expect(IllegalArgumentException.class);
-
-        ClientProviderImpl.forHost("localhost", 0, Optional.empty());
+        assertThatThrownBy(() -> ClientProviderImpl.forHost("localhost", 0, Optional.empty()))
+                .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     public void forHostShouldThrowOnTooBigPort() {
-        expectedException.expect(IllegalArgumentException.class);
-
-        ClientProviderImpl.forHost("localhost", 65536, Optional.empty());
+        assertThatThrownBy(() -> ClientProviderImpl.forHost("localhost", 65536, Optional.empty()))
+                .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     public void fromHostsStringShouldEmptyAddress() {
-        expectedException.expect(IllegalArgumentException.class);
-
-        ClientProviderImpl.fromHostsString(":9200", Optional.empty());
+        assertThatThrownBy(() -> ClientProviderImpl.fromHostsString(":9200", Optional.empty()))
+                .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     public void fromHostsStringShouldThrowOnAbsentPort() {
-        expectedException.expect(IllegalArgumentException.class);
-
-        ClientProviderImpl.fromHostsString("localhost", Optional.empty());
+        assertThatThrownBy(() -> ClientProviderImpl.fromHostsString("localhost", Optional.empty()))
+                .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     public void fromHostsStringShouldThrowWhenTooMuchParts() {
-        expectedException.expect(IllegalArgumentException.class);
-
-        ClientProviderImpl.fromHostsString("localhost:9200:9200", Optional.empty());
+        assertThatThrownBy(() -> ClientProviderImpl.fromHostsString("localhost:9200:9200", Optional.empty()))
+                .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     public void fromHostsStringShouldThrowOnEmptyPort() {
-        expectedException.expect(NumberFormatException.class);
-
-        ClientProviderImpl.fromHostsString("localhost:", Optional.empty());
+        assertThatThrownBy(() -> ClientProviderImpl.fromHostsString("localhost:", Optional.empty()))
+                .isInstanceOf(NumberFormatException.class);
     }
 
     @Test
     public void fromHostsStringShouldThrowOnInvalidPort() {
-        expectedException.expect(NumberFormatException.class);
-
-        ClientProviderImpl.fromHostsString("localhost:invalid", Optional.empty());
+        assertThatThrownBy(() -> ClientProviderImpl.fromHostsString("localhost:invalid", Optional.empty()))
+                .isInstanceOf(NumberFormatException.class);
     }
 
     @Test
     public void fromHostsStringShouldThrowOnNegativePort() {
-        expectedException.expect(IllegalArgumentException.class);
-
-        ClientProviderImpl.fromHostsString("localhost:-1", Optional.empty());
+        assertThatThrownBy(() -> ClientProviderImpl.fromHostsString("localhost:-1", Optional.empty()))
+                .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     public void fromHostsStringShouldThrowOnZeroPort() {
-        expectedException.expect(IllegalArgumentException.class);
-
-        ClientProviderImpl.fromHostsString("localhost:0", Optional.empty());
+        assertThatThrownBy(() -> ClientProviderImpl.fromHostsString("localhost:0", Optional.empty()))
+                .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     public void fromHostsStringShouldThrowOnTooBigPort() {
-        expectedException.expect(IllegalArgumentException.class);
-
-        ClientProviderImpl.fromHostsString("localhost:65536", Optional.empty());
+        assertThatThrownBy(() -> ClientProviderImpl.fromHostsString("localhost:65536", Optional.empty()))
+                .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
     public void fromHostsStringShouldThrowIfOneHostIsInvalid() {
-        expectedException.expect(IllegalArgumentException.class);
-
-        ClientProviderImpl.fromHostsString("localhost:9200,localhost", Optional.empty());
+        assertThatThrownBy(() -> ClientProviderImpl.fromHostsString("localhost:9200,localhost", Optional.empty()))
+                .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test


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


[06/11] james-project git commit: JAMES-2590 Split elasticSearch configurations

Posted by ad...@apache.org.
http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaConfigurationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaConfigurationTest.java b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaConfigurationTest.java
new file mode 100644
index 0000000..a57a10e
--- /dev/null
+++ b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaConfigurationTest.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.james.quota.search.elasticsearch;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.james.backends.es.IndexName;
+import org.apache.james.backends.es.ReadAliasName;
+import org.apache.james.backends.es.WriteAliasName;
+import org.junit.Test;
+
+public class ElasticSearchQuotaConfigurationTest {
+
+    @Test
+    public void getReadAliasQuotaRatioNameShouldReturnConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.alias.read.quota.ratio.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchQuotaConfiguration elasticSearchConfiguration = ElasticSearchQuotaConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getReadAliasQuotaRatioName())
+            .isEqualTo(new ReadAliasName(name));
+    }
+
+    @Test
+    public void getReadAliasQuotaRatioNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchQuotaConfiguration elasticSearchConfiguration = ElasticSearchQuotaConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getReadAliasQuotaRatioName())
+            .isEqualTo(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_READ_ALIAS);
+    }
+
+    @Test
+    public void getWriteAliasQuotaRatioNameShouldReturnConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.alias.write.quota.ratio.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchQuotaConfiguration elasticSearchConfiguration = ElasticSearchQuotaConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getWriteAliasQuotaRatioName())
+            .isEqualTo(new WriteAliasName(name));
+    }
+
+    @Test
+    public void getWriteAliasQuotaRatioNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchQuotaConfiguration elasticSearchConfiguration = ElasticSearchQuotaConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getWriteAliasQuotaRatioName())
+            .isEqualTo(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS);
+    }
+
+    @Test
+    public void getIndexQuotaRatioNameShouldReturnConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.index.quota.ratio.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchQuotaConfiguration elasticSearchConfiguration = ElasticSearchQuotaConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexQuotaRatioName())
+            .isEqualTo(new IndexName(name));
+    }
+
+    @Test
+    public void getIndexQuotaRatioNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchQuotaConfiguration elasticSearchConfiguration = ElasticSearchQuotaConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexQuotaRatioName())
+            .isEqualTo(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_INDEX);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
index cf3ba91..2d511cf 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
@@ -26,7 +26,6 @@ import java.util.concurrent.Executors;
 import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
 import org.apache.james.backends.es.EmbeddedElasticSearch;
-import org.apache.james.backends.es.QuotaRatioElasticSearchConstants;
 import org.apache.james.backends.es.utils.TestingClientProvider;
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.domainlist.memory.MemoryDomainList;

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
index 6e8e678..4ea8e30 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
@@ -36,7 +36,7 @@ import org.apache.james.mailbox.MailboxListener.QuotaUsageUpdatedEvent;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.quota.QuotaFixture.Counts;
 import org.apache.james.mailbox.quota.QuotaFixture.Sizes;
-import org.apache.james.backends.es.QuotaRatioElasticSearchConstants;
+import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants;
 import org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil;
 import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;
 import org.elasticsearch.action.search.SearchResponse;

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
index 72042d0..eb0ddae 100644
--- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -38,8 +38,8 @@ import org.apache.james.imap.main.DefaultImapDecoderFactory;
 import org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
-import org.apache.james.backends.es.IndexAttachments;
-import org.apache.james.backends.es.MailboxElasticSearchConstants;
+import org.apache.james.mailbox.elasticsearch.IndexAttachments;
+import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
 import org.apache.james.mailbox.elasticsearch.MailboxIndexCreationUtil;
 import org.apache.james.mailbox.elasticsearch.events.ElasticSearchListeningMessageSearchIndex;
 import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
index ed5de5e..ad05503 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
@@ -34,8 +34,9 @@ import org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.backends.es.ClientProviderImpl;
 import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
-import org.apache.james.backends.es.IndexAttachments;
-import org.apache.james.backends.es.MailboxElasticSearchConstants;
+import org.apache.james.mailbox.elasticsearch.ElasticSearchMailboxConfiguration;
+import org.apache.james.mailbox.elasticsearch.IndexAttachments;
+import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
 import org.apache.james.mailbox.elasticsearch.MailboxIndexCreationUtil;
 import org.apache.james.mailbox.elasticsearch.events.ElasticSearchListeningMessageSearchIndex;
 import org.apache.james.mailbox.elasticsearch.query.QueryConverter;
@@ -44,6 +45,7 @@ import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
+import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaConfiguration;
 import org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil;
 import org.apache.james.util.retry.RetryExecutorUtil;
 import org.apache.james.utils.PropertiesProvider;
@@ -75,8 +77,8 @@ public class ElasticSearchMailboxModule extends AbstractModule {
     @Singleton
     @Named(MailboxElasticSearchConstants.InjectionNames.MAILBOX)
     private ElasticSearchIndexer createMailboxElasticSearchIndexer(Client client,
-                                               @Named("AsyncExecutor") ExecutorService executor,
-                                               ElasticSearchConfiguration configuration) {
+                                                                   @Named("AsyncExecutor") ExecutorService executor,
+                                                                   ElasticSearchMailboxConfiguration configuration) {
         return new ElasticSearchIndexer(
             client,
             executor,
@@ -90,7 +92,7 @@ public class ElasticSearchMailboxModule extends AbstractModule {
                                                                      QueryConverter queryConverter,
                                                                      MailboxId.Factory mailboxIdFactory,
                                                                      MessageId.Factory messageIdFactory,
-                                                                     ElasticSearchConfiguration configuration) {
+                                                                     ElasticSearchMailboxConfiguration configuration) {
         return new ElasticSearchSearcher(
             client,
             queryConverter,
@@ -115,29 +117,45 @@ public class ElasticSearchMailboxModule extends AbstractModule {
 
     @Provides
     @Singleton
+    private ElasticSearchMailboxConfiguration getElasticSearchMailboxConfiguration(PropertiesProvider propertiesProvider) throws ConfigurationException {
+        try {
+            Configuration configuration = propertiesProvider.getConfiguration(ELASTICSEARCH_CONFIGURATION_NAME);
+            return ElasticSearchMailboxConfiguration.fromProperties(configuration);
+        } catch (FileNotFoundException e) {
+            LOGGER.warn("Could not find " + ELASTICSEARCH_CONFIGURATION_NAME + " configuration file. Providing a default ElasticSearchMailboxConfiguration");
+            return ElasticSearchMailboxConfiguration.DEFAULT_CONFIGURATION;
+        }
+    }
+
+    @Provides
+    @Singleton
     protected Client provideClient(ElasticSearchConfiguration configuration,
+                                   ElasticSearchMailboxConfiguration mailboxConfiguration,
+                                   ElasticSearchQuotaConfiguration quotaConfiguration,
                                    AsyncRetryExecutor executor) throws ExecutionException, InterruptedException {
 
         return RetryExecutorUtil.retryOnExceptions(executor, configuration.getMaxRetries(), configuration.getMinDelay(), NoNodeAvailableException.class)
-            .getWithRetry(context -> connectToCluster(configuration))
+            .getWithRetry(context -> connectToCluster(configuration, mailboxConfiguration, quotaConfiguration))
             .get();
     }
 
-    private Client connectToCluster(ElasticSearchConfiguration configuration) {
+    private Client connectToCluster(ElasticSearchConfiguration configuration,
+                                    ElasticSearchMailboxConfiguration mailboxConfiguration,
+                                    ElasticSearchQuotaConfiguration quotaConfiguration) {
         LOGGER.info("Trying to connect to ElasticSearch service at {}", LocalDateTime.now());
 
         Client client = ClientProviderImpl.fromHosts(configuration.getHosts()).get();
 
         MailboxIndexCreationUtil.prepareClient(client,
-            configuration.getReadAliasMailboxName(),
-            configuration.getWriteAliasMailboxName(),
-            configuration.getIndexMailboxName(),
+            mailboxConfiguration.getReadAliasMailboxName(),
+            mailboxConfiguration.getWriteAliasMailboxName(),
+            mailboxConfiguration.getIndexMailboxName(),
             configuration);
 
         QuotaSearchIndexCreationUtil.prepareClient(client,
-            configuration.getReadAliasQuotaRatioName(),
-            configuration.getWriteAliasMailboxName(),
-            configuration.getIndexQuotaRatioName(),
+            quotaConfiguration.getReadAliasQuotaRatioName(),
+            quotaConfiguration.getWriteAliasQuotaRatioName(),
+            quotaConfiguration.getIndexQuotaRatioName(),
             configuration);
 
         return client;
@@ -145,7 +163,7 @@ public class ElasticSearchMailboxModule extends AbstractModule {
 
     @Provides
     @Singleton
-    public IndexAttachments provideIndexAttachments(ElasticSearchConfiguration configuration) {
+    public IndexAttachments provideIndexAttachments(ElasticSearchMailboxConfiguration configuration) {
         return configuration.getIndexAttachment();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
index e7e6e0b..78bc752 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
@@ -19,19 +19,27 @@
 
 package org.apache.james.modules.mailbox;
 
+import static org.apache.james.modules.mailbox.ElasticSearchMailboxModule.ELASTICSEARCH_CONFIGURATION_NAME;
+
+import java.io.FileNotFoundException;
 import java.util.concurrent.ExecutorService;
 
 import javax.inject.Named;
 
-import org.apache.james.backends.es.ElasticSearchConfiguration;
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.backends.es.ElasticSearchIndexer;
-import org.apache.james.backends.es.QuotaRatioElasticSearchConstants;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.quota.search.QuotaSearcher;
+import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaConfiguration;
 import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaSearcher;
+import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants;
 import org.apache.james.quota.search.elasticsearch.events.ElasticSearchQuotaMailboxListener;
 import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;
+import org.apache.james.utils.PropertiesProvider;
 import org.elasticsearch.client.Client;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
@@ -39,6 +47,8 @@ import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
 
 public class ElasticSearchQuotaSearcherModule extends AbstractModule {
+    private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchQuotaSearcherModule.class);
+
     @Override
     protected void configure() {
         Multibinder.newSetBinder(binder(), MailboxListener.class)
@@ -48,20 +58,34 @@ public class ElasticSearchQuotaSearcherModule extends AbstractModule {
 
     @Provides
     @Singleton
-    public QuotaSearcher provideSearcher(Client client, ElasticSearchConfiguration configuration) {
+    public QuotaSearcher provideSearcher(Client client, ElasticSearchQuotaConfiguration configuration) {
         return new ElasticSearchQuotaSearcher(client,
             configuration.getReadAliasQuotaRatioName());
     }
 
+
+
+    @Provides
+    @Singleton
+    private ElasticSearchQuotaConfiguration getElasticSearchQuotaConfiguration(PropertiesProvider propertiesProvider) throws ConfigurationException {
+        try {
+            Configuration configuration = propertiesProvider.getConfiguration(ELASTICSEARCH_CONFIGURATION_NAME);
+            return ElasticSearchQuotaConfiguration.fromProperties(configuration);
+        } catch (FileNotFoundException e) {
+            LOGGER.warn("Could not find " + ELASTICSEARCH_CONFIGURATION_NAME + " configuration file. Providing a default ElasticSearchQuotaConfiguration");
+            return ElasticSearchQuotaConfiguration.DEFAULT_CONFIGURATION;
+        }
+    }
+
     @Provides
     @Singleton
     public ElasticSearchQuotaMailboxListener provideListener(Client client,
                                                              @Named("AsyncExecutor") ExecutorService executor,
-                                                             ElasticSearchConfiguration configuration) {
+                                                             ElasticSearchQuotaConfiguration configuration) {
         return new ElasticSearchQuotaMailboxListener(
             new ElasticSearchIndexer(client,
                 executor,
-                configuration.getWriteAliasMailboxName(),
+                configuration.getWriteAliasQuotaRatioName(),
                 QuotaRatioElasticSearchConstants.QUOTA_RATIO_TYPE),
                 new QuotaRatioToElasticSearchJson());
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
index 54074c0..5b5b33f 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
@@ -31,11 +31,10 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.james.backends.es.IndexAttachments;
+import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.store.search.PDFTextExtractor;
 import org.apache.james.modules.TestJMAPServerModule;
-import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.modules.protocols.ImapGuiceProbe;
 import org.apache.james.util.Host;
 import org.apache.james.util.docker.Images;
@@ -75,7 +74,6 @@ class JamesServerWithRetryConnectionTest {
         private ElasticSearchConfiguration getElasticSearchConfigurationForDocker() {
             return ElasticSearchConfiguration.builder()
                 .addHost(Host.from(elasticSearchContainer.getHostIp(), elasticSearchContainer.getMappedPort(ELASTIC_SEARCH_PORT)))
-                .indexAttachment(IndexAttachments.NO)
                 .build();
         }
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
index 5388cfa..2eddc4c 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
@@ -34,7 +34,7 @@ import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.quota.search.QuotaSearchTestSystem;
 import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaSearcher;
-import org.apache.james.backends.es.QuotaRatioElasticSearchConstants;
+import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants;
 import org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil;
 import org.apache.james.quota.search.elasticsearch.events.ElasticSearchQuotaMailboxListener;
 import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;


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


[11/11] james-project git commit: JAMES-2620 Built artifacts should be installed to prevent downloading them from maven repository

Posted by ad...@apache.org.
JAMES-2620 Built artifacts should be installed to prevent downloading them from maven repository


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

Branch: refs/heads/3.2.x
Commit: 3b932460f2927d00d595b9268bb452187ac0f3c2
Parents: 23936bb
Author: Antoine Duprat <ad...@linagora.com>
Authored: Mon Dec 3 11:25:51 2018 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Fri Dec 7 17:12:12 2018 +0100

----------------------------------------------------------------------
 dockerfiles/compilation/java-8/integration_tests.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/3b932460/dockerfiles/compilation/java-8/integration_tests.sh
----------------------------------------------------------------------
diff --git a/dockerfiles/compilation/java-8/integration_tests.sh b/dockerfiles/compilation/java-8/integration_tests.sh
index ae30787..0fab296 100755
--- a/dockerfiles/compilation/java-8/integration_tests.sh
+++ b/dockerfiles/compilation/java-8/integration_tests.sh
@@ -53,5 +53,5 @@ git clone $ORIGIN/.
 git checkout $SHA1
 
 
-mvn -DskipTests -pl org.apache.james:apache-james-mpt-external-james -am compile
+mvn -DskipTests -pl org.apache.james:apache-james-mpt-external-james -am package
 mvn -Dtest=JamesDeploymentValidation -pl org.apache.james:apache-james-mpt-external-james test


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


[05/11] james-project git commit: JAMES-2590 Move ElasticSearch configuration classes to ES-backend

Posted by ad...@apache.org.
JAMES-2590 Move ElasticSearch configuration classes to ES-backend


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

Branch: refs/heads/3.2.x
Commit: a3f6c0b907cf341dda01af472ea3000c89455242
Parents: bf833c8
Author: Antoine Duprat <ad...@linagora.com>
Authored: Mon Nov 12 20:52:32 2018 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Fri Dec 7 17:11:56 2018 +0100

----------------------------------------------------------------------
 backends-common/elasticsearch/pom.xml           |   9 +
 .../backends/es/ElasticSearchConfiguration.java | 417 +++++++++++++++
 .../james/backends/es/IndexAttachments.java     |  24 +
 .../es/MailboxElasticSearchConstants.java       |  37 ++
 .../es/QuotaRatioElasticSearchConstants.java    |  37 ++
 .../es/ElasticSearchConfigurationTest.java      | 512 ++++++++++++++++++
 .../mailbox/elasticsearch/IndexAttachments.java |  24 -
 .../MailboxElasticSearchConstants.java          |  37 --
 .../elasticsearch/MailboxIndexCreationUtil.java |   1 +
 .../elasticsearch/MailboxMappingFactory.java    |   1 +
 ...lasticSearchListeningMessageSearchIndex.java |   2 +-
 .../elasticsearch/json/IndexableMessage.java    |   2 +-
 .../json/MessageToElasticSearchJson.java        |   2 +-
 .../ElasticSearchIntegrationTest.java           |   2 +
 .../json/IndexableMessageTest.java              |   2 +-
 .../json/MessageToElasticSearchJsonTest.java    |   2 +-
 .../ElasticSearchQuotaSearcher.java             |   2 +-
 .../QuotaRatioElasticSearchConstants.java       |  37 --
 .../elasticsearch/QuotaRatioMappingFactory.java |   1 +
 .../QuotaSearchIndexCreationUtil.java           |   1 +
 .../ElasticSearchQuotaMailboxListener.java      |   2 +-
 ...ticSearchQuotaSearchTestSystemExtension.java |   1 +
 .../ElasticSearchQuotaMailboxListenerTest.java  |   2 +-
 .../host/ElasticSearchHostSystem.java           |   4 +-
 .../mailbox/ElasticSearchConfiguration.java     | 423 ---------------
 .../mailbox/ElasticSearchMailboxModule.java     |   5 +-
 .../ElasticSearchQuotaSearcherModule.java       |   3 +-
 .../JamesServerWithRetryConnectionTest.java     |   4 +-
 .../mailbox/ElasticSearchConfigurationTest.java | 518 -------------------
 .../ElasticSearchQuotaSearchExtension.java      |   2 +-
 30 files changed, 1061 insertions(+), 1055 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/backends-common/elasticsearch/pom.xml
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/pom.xml b/backends-common/elasticsearch/pom.xml
index 02609a0..78b2af7 100644
--- a/backends-common/elasticsearch/pom.xml
+++ b/backends-common/elasticsearch/pom.xml
@@ -47,6 +47,10 @@
             <artifactId>throwing-lambdas</artifactId>
         </dependency>
         <dependency>
+            <groupId>commons-configuration</groupId>
+            <artifactId>commons-configuration</artifactId>
+        </dependency>
+        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <scope>test</scope>
@@ -74,6 +78,11 @@
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
+            <artifactId>jcl-over-slf4j</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchConfiguration.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..abb9026
--- /dev/null
+++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchConfiguration.java
@@ -0,0 +1,417 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.james.backends.es;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+
+import org.apache.commons.configuration.AbstractConfiguration;
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.james.util.Host;
+import org.apache.james.util.OptionalUtils;
+
+import com.github.steveash.guavate.Guavate;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+
+public class ElasticSearchConfiguration {
+
+    public static class Builder {
+
+        private final ImmutableList.Builder<Host> hosts;
+        private Optional<IndexName> indexMailboxName;
+        private Optional<ReadAliasName> readAliasMailboxName;
+        private Optional<WriteAliasName> writeAliasMailboxName;
+        private Optional<IndexName> indexQuotaRatioName;
+        private Optional<ReadAliasName> readAliasQuotaRatioName;
+        private Optional<WriteAliasName> writeAliasQuotaRatioName;
+        private Optional<Integer> nbShards;
+        private Optional<Integer> nbReplica;
+        private Optional<Integer> minDelay;
+        private Optional<Integer> maxRetries;
+        private Optional<IndexAttachments> indexAttachment;
+
+        public Builder() {
+            hosts = ImmutableList.builder();
+            indexMailboxName = Optional.empty();
+            readAliasMailboxName = Optional.empty();
+            writeAliasMailboxName = Optional.empty();
+            indexQuotaRatioName = Optional.empty();
+            readAliasQuotaRatioName = Optional.empty();
+            writeAliasQuotaRatioName = Optional.empty();
+            nbShards = Optional.empty();
+            nbReplica = Optional.empty();
+            minDelay = Optional.empty();
+            maxRetries = Optional.empty();
+            indexAttachment = Optional.empty();
+        }
+
+        public Builder addHost(Host host) {
+            this.hosts.add(host);
+            return this;
+        }
+
+        public Builder addHosts(Collection<Host> hosts) {
+            this.hosts.addAll(hosts);
+            return this;
+        }
+
+        public Builder indexMailboxName(IndexName indexMailboxName) {
+            return indexMailboxName(Optional.of(indexMailboxName));
+        }
+
+        public Builder indexMailboxName(Optional<IndexName> indexMailboxName) {
+            this.indexMailboxName = indexMailboxName;
+            return this;
+        }
+
+        public Builder readAliasMailboxName(ReadAliasName readAliasMailboxName) {
+            return readAliasMailboxName(Optional.of(readAliasMailboxName));
+        }
+
+        public Builder readAliasMailboxName(Optional<ReadAliasName> readAliasMailboxName) {
+            this.readAliasMailboxName = readAliasMailboxName;
+            return this;
+        }
+
+        public Builder writeAliasMailboxName(WriteAliasName writeAliasMailboxName) {
+            return writeAliasMailboxName(Optional.of(writeAliasMailboxName));
+        }
+
+        public Builder writeAliasMailboxName(Optional<WriteAliasName> writeAliasMailboxName) {
+            this.writeAliasMailboxName = writeAliasMailboxName;
+            return this;
+        }
+
+        public Builder indexQuotaRatioName(IndexName indexQuotaRatioName) {
+            return indexQuotaRatioName(Optional.of(indexQuotaRatioName));
+        }
+
+        public Builder indexQuotaRatioName(Optional<IndexName> indexQuotaRatioName) {
+            this.indexQuotaRatioName = indexQuotaRatioName;
+            return this;
+        }
+
+        public Builder readAliasQuotaRatioName(ReadAliasName readAliasQuotaRatioName) {
+            return readAliasQuotaRatioName(Optional.of(readAliasQuotaRatioName));
+        }
+
+        public Builder readAliasQuotaRatioName(Optional<ReadAliasName> readAliasQuotaRatioName) {
+            this.readAliasQuotaRatioName = readAliasQuotaRatioName;
+            return this;
+        }
+
+        public Builder writeAliasQuotaRatioName(WriteAliasName writeAliasQuotaRatioName) {
+            return writeAliasQuotaRatioName(Optional.of(writeAliasQuotaRatioName));
+        }
+
+        public Builder writeAliasQuotaRatioName(Optional<WriteAliasName> writeAliasQuotaRatioName) {
+            this.writeAliasQuotaRatioName = writeAliasQuotaRatioName;
+            return this;
+        }
+
+        public Builder indexAttachment(IndexAttachments indexAttachment) {
+            this.indexAttachment = Optional.of(indexAttachment);
+            return this;
+        }
+
+        public Builder nbShards(Optional<Integer> nbShards) {
+            this.nbShards = nbShards;
+            return this;
+        }
+
+        public Builder nbReplica(Optional<Integer> nbReplica) {
+            this.nbReplica = nbReplica;
+            return this;
+        }
+
+        public Builder minDelay(Optional<Integer> minDelay) {
+            this.minDelay = minDelay;
+            return this;
+        }
+
+        public Builder maxRetries(Optional<Integer> maxRetries) {
+            this.maxRetries = maxRetries;
+            return this;
+        }
+
+        public ElasticSearchConfiguration build() {
+            ImmutableList<Host> hosts = this.hosts.build();
+            Preconditions.checkState(!hosts.isEmpty(), "You need to specify ElasticSearch host");
+            return new ElasticSearchConfiguration(
+                hosts,
+                indexMailboxName.orElse(MailboxElasticSearchConstants.DEFAULT_MAILBOX_INDEX),
+                readAliasMailboxName.orElse(MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS),
+                writeAliasMailboxName.orElse(MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS),
+                indexQuotaRatioName.orElse(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_INDEX),
+                readAliasQuotaRatioName.orElse(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_READ_ALIAS),
+                writeAliasQuotaRatioName.orElse(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS),
+                nbShards.orElse(DEFAULT_NB_SHARDS),
+                nbReplica.orElse(DEFAULT_NB_REPLICA),
+                minDelay.orElse(DEFAULT_CONNECTION_MIN_DELAY),
+                maxRetries.orElse(DEFAULT_CONNECTION_MAX_RETRIES),
+                indexAttachment.orElse(IndexAttachments.YES));
+        }
+    }
+
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    public static final String ELASTICSEARCH_HOSTS = "elasticsearch.hosts";
+    public static final String ELASTICSEARCH_MASTER_HOST = "elasticsearch.masterHost";
+    public static final String ELASTICSEARCH_PORT = "elasticsearch.port";
+    public static final String ELASTICSEARCH_INDEX_NAME = "elasticsearch.index.name";
+    public static final String ELASTICSEARCH_INDEX_MAILBOX_NAME = "elasticsearch.index.mailbox.name";
+    public static final String ELASTICSEARCH_NB_REPLICA = "elasticsearch.nb.replica";
+    public static final String ELASTICSEARCH_NB_SHARDS = "elasticsearch.nb.shards";
+    public static final String ELASTICSEARCH_ALIAS_READ_NAME = "elasticsearch.alias.read.name";
+    public static final String ELASTICSEARCH_ALIAS_WRITE_NAME = "elasticsearch.alias.write.name";
+    public static final String ELASTICSEARCH_ALIAS_READ_MAILBOX_NAME = "elasticsearch.alias.read.mailbox.name";
+    public static final String ELASTICSEARCH_ALIAS_WRITE_MAILBOX_NAME = "elasticsearch.alias.write.mailbox.name";
+    public static final String ELASTICSEARCH_INDEX_QUOTA_RATIO_NAME = "elasticsearch.index.quota.ratio.name";
+    public static final String ELASTICSEARCH_ALIAS_READ_QUOTA_RATIO_NAME = "elasticsearch.alias.read.quota.ratio.name";
+    public static final String ELASTICSEARCH_ALIAS_WRITE_QUOTA_RATIO_NAME = "elasticsearch.alias.write.quota.ratio.name";
+    public static final String ELASTICSEARCH_RETRY_CONNECTION_MIN_DELAY = "elasticsearch.retryConnection.minDelay";
+    public static final String ELASTICSEARCH_RETRY_CONNECTION_MAX_RETRIES = "elasticsearch.retryConnection.maxRetries";
+    public static final String ELASTICSEARCH_INDEX_ATTACHMENTS = "elasticsearch.indexAttachments";
+
+    public static final int DEFAULT_CONNECTION_MAX_RETRIES = 7;
+    public static final int DEFAULT_CONNECTION_MIN_DELAY = 3000;
+    public static final boolean DEFAULT_INDEX_ATTACHMENTS = true;
+    public static final int DEFAULT_NB_SHARDS = 1;
+    public static final int DEFAULT_NB_REPLICA = 0;
+    public static final int DEFAULT_PORT = 9300;
+    private static final String LOCALHOST = "127.0.0.1";
+    public static final Optional<Integer> DEFAULT_PORT_AS_OPTIONAL = Optional.of(DEFAULT_PORT);
+
+    public static final ElasticSearchConfiguration DEFAULT_CONFIGURATION = builder()
+        .addHost(Host.from(LOCALHOST, DEFAULT_PORT))
+        .build();
+
+    public static ElasticSearchConfiguration fromProperties(Configuration configuration) throws ConfigurationException {
+        return builder()
+            .addHosts(getHosts(configuration))
+            .indexMailboxName(computeMailboxIndexName(configuration))
+            .readAliasMailboxName(computeMailboxReadAlias(configuration))
+            .writeAliasMailboxName(computeMailboxWriteAlias(configuration))
+            .indexQuotaRatioName(computeQuotaSearchIndexName(configuration))
+            .readAliasQuotaRatioName(computeQuotaSearchReadAlias(configuration))
+            .writeAliasQuotaRatioName(computeQuotaSearchWriteAlias(configuration))
+            .nbShards(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_NB_SHARDS, null)))
+            .nbReplica(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_NB_REPLICA, null)))
+            .minDelay(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_RETRY_CONNECTION_MIN_DELAY, null)))
+            .maxRetries(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_RETRY_CONNECTION_MAX_RETRIES, null)))
+            .indexAttachment(provideIndexAttachments(configuration))
+            .build();
+    }
+
+    public static Optional<IndexName> computeMailboxIndexName(Configuration configuration) {
+        return OptionalUtils.or(
+            Optional.ofNullable(configuration.getString(ELASTICSEARCH_INDEX_MAILBOX_NAME))
+                .map(IndexName::new),
+            Optional.ofNullable(configuration.getString(ELASTICSEARCH_INDEX_NAME))
+                .map(IndexName::new));
+    }
+
+    public static Optional<WriteAliasName> computeMailboxWriteAlias(Configuration configuration) {
+        return OptionalUtils.or(
+            Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_WRITE_MAILBOX_NAME))
+                .map(WriteAliasName::new),
+            Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_WRITE_NAME))
+                .map(WriteAliasName::new));
+    }
+
+    public static Optional<ReadAliasName> computeMailboxReadAlias(Configuration configuration) {
+        return OptionalUtils.or(
+            Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_READ_MAILBOX_NAME))
+                .map(ReadAliasName::new),
+            Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_READ_NAME))
+                .map(ReadAliasName::new));
+    }
+
+    public static Optional<IndexName> computeQuotaSearchIndexName(Configuration configuration) {
+        return Optional.ofNullable(configuration.getString(ELASTICSEARCH_INDEX_QUOTA_RATIO_NAME))
+            .map(IndexName::new);
+    }
+
+    public static Optional<WriteAliasName> computeQuotaSearchWriteAlias(Configuration configuration) {
+        return Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_WRITE_QUOTA_RATIO_NAME))
+            .map(WriteAliasName::new);
+    }
+
+    public static Optional<ReadAliasName> computeQuotaSearchReadAlias(Configuration configuration) {
+        return Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_READ_QUOTA_RATIO_NAME))
+                .map(ReadAliasName::new);
+    }
+
+    private static IndexAttachments provideIndexAttachments(Configuration configuration) {
+        if (configuration.getBoolean(ELASTICSEARCH_INDEX_ATTACHMENTS, DEFAULT_INDEX_ATTACHMENTS)) {
+            return IndexAttachments.YES;
+        }
+        return IndexAttachments.NO;
+    }
+
+    private static ImmutableList<Host> getHosts(Configuration propertiesReader) throws ConfigurationException {
+        AbstractConfiguration.setDefaultListDelimiter(',');
+        Optional<String> masterHost = Optional.ofNullable(
+            propertiesReader.getString(ELASTICSEARCH_MASTER_HOST, null));
+        Optional<Integer> masterPort = Optional.ofNullable(
+            propertiesReader.getInteger(ELASTICSEARCH_PORT, null));
+        List<String> multiHosts = Arrays.asList(propertiesReader.getStringArray(ELASTICSEARCH_HOSTS));
+
+        validateHostsConfigurationOptions(masterHost, masterPort, multiHosts);
+
+        if (masterHost.isPresent()) {
+            return ImmutableList.of(
+                Host.from(masterHost.get(),
+                masterPort.get()));
+        } else {
+            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,
+                                                  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.isEmpty() && masterHost.isPresent()) {
+            throw new ConfigurationException("You should choose between mono host set up and " + ELASTICSEARCH_HOSTS);
+        }
+        if (multiHosts.isEmpty() && !masterHost.isPresent()) {
+            throw new ConfigurationException("You should specify either (" + ELASTICSEARCH_MASTER_HOST + " and " + ELASTICSEARCH_PORT + ") or " + ELASTICSEARCH_HOSTS);
+        }
+    }
+
+    private final ImmutableList<Host> hosts;
+    private final IndexName indexMailboxName;
+    private final ReadAliasName readAliasMailboxName;
+    private final WriteAliasName writeAliasMailboxName;
+    private final IndexName indexQuotaRatioName;
+    private final ReadAliasName readAliasQuotaRatioName;
+    private final WriteAliasName writeAliasQuotaRatioName;
+    private final int nbShards;
+    private final int nbReplica;
+    private final int minDelay;
+    private final int maxRetries;
+    private final IndexAttachments indexAttachment;
+
+    private ElasticSearchConfiguration(ImmutableList<Host> hosts, IndexName indexMailboxName, ReadAliasName readAliasMailboxName,
+                                      WriteAliasName writeAliasMailboxName, IndexName indexQuotaRatioName, ReadAliasName readAliasQuotaRatioName, WriteAliasName writeAliasQuotaRatioName, int nbShards, int nbReplica, int minDelay,
+                                      int maxRetries, IndexAttachments indexAttachment) {
+        this.hosts = hosts;
+        this.indexMailboxName = indexMailboxName;
+        this.readAliasMailboxName = readAliasMailboxName;
+        this.writeAliasMailboxName = writeAliasMailboxName;
+        this.indexQuotaRatioName = indexQuotaRatioName;
+        this.readAliasQuotaRatioName = readAliasQuotaRatioName;
+        this.writeAliasQuotaRatioName = writeAliasQuotaRatioName;
+        this.nbShards = nbShards;
+        this.nbReplica = nbReplica;
+        this.minDelay = minDelay;
+        this.maxRetries = maxRetries;
+        this.indexAttachment = indexAttachment;
+    }
+
+    public ImmutableList<Host> getHosts() {
+        return hosts;
+    }
+
+    public IndexName getIndexMailboxName() {
+        return indexMailboxName;
+    }
+
+    public ReadAliasName getReadAliasMailboxName() {
+        return readAliasMailboxName;
+    }
+
+    public WriteAliasName getWriteAliasMailboxName() {
+        return writeAliasMailboxName;
+    }
+
+    public int getNbShards() {
+        return nbShards;
+    }
+
+    public int getNbReplica() {
+        return nbReplica;
+    }
+
+    public int getMinDelay() {
+        return minDelay;
+    }
+
+    public int getMaxRetries() {
+        return maxRetries;
+    }
+
+    public IndexAttachments getIndexAttachment() {
+        return indexAttachment;
+    }
+
+    public IndexName getIndexQuotaRatioName() {
+        return indexQuotaRatioName;
+    }
+
+    public ReadAliasName getReadAliasQuotaRatioName() {
+        return readAliasQuotaRatioName;
+    }
+
+    public WriteAliasName getWriteAliasQuotaRatioName() {
+        return writeAliasQuotaRatioName;
+    }
+
+    @Override
+    public final boolean equals(Object o) {
+        if (o instanceof ElasticSearchConfiguration) {
+            ElasticSearchConfiguration that = (ElasticSearchConfiguration) o;
+
+            return Objects.equals(this.nbShards, that.nbShards)
+                && Objects.equals(this.nbReplica, that.nbReplica)
+                && Objects.equals(this.minDelay, that.minDelay)
+                && Objects.equals(this.maxRetries, that.maxRetries)
+                && Objects.equals(this.indexAttachment, that.indexAttachment)
+                && Objects.equals(this.hosts, that.hosts)
+                && Objects.equals(this.indexMailboxName, that.indexMailboxName)
+                && Objects.equals(this.readAliasMailboxName, that.readAliasMailboxName)
+                && Objects.equals(this.writeAliasMailboxName, that.writeAliasMailboxName)
+                && Objects.equals(this.indexQuotaRatioName, that.indexQuotaRatioName)
+                && Objects.equals(this.readAliasQuotaRatioName, that.readAliasQuotaRatioName)
+                && Objects.equals(this.writeAliasQuotaRatioName, that.writeAliasQuotaRatioName);
+        }
+        return false;
+    }
+
+    @Override
+    public final int hashCode() {
+        return Objects.hash(hosts, indexMailboxName, readAliasMailboxName, writeAliasMailboxName, nbShards,
+            nbReplica, minDelay, maxRetries, indexAttachment, indexQuotaRatioName, readAliasQuotaRatioName, writeAliasMailboxName);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexAttachments.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexAttachments.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexAttachments.java
new file mode 100644
index 0000000..dabbfb3
--- /dev/null
+++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexAttachments.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.james.backends.es;
+
+public enum IndexAttachments {
+    NO, YES
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/MailboxElasticSearchConstants.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/MailboxElasticSearchConstants.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/MailboxElasticSearchConstants.java
new file mode 100644
index 0000000..d3c1022
--- /dev/null
+++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/MailboxElasticSearchConstants.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.james.backends.es;
+
+import org.apache.james.backends.es.IndexName;
+import org.apache.james.backends.es.ReadAliasName;
+import org.apache.james.backends.es.TypeName;
+import org.apache.james.backends.es.WriteAliasName;
+
+public interface MailboxElasticSearchConstants {
+
+    interface InjectionNames {
+        String MAILBOX = "mailbox";
+    }
+
+    WriteAliasName DEFAULT_MAILBOX_WRITE_ALIAS = new WriteAliasName("mailboxWriteAlias");
+    ReadAliasName DEFAULT_MAILBOX_READ_ALIAS = new ReadAliasName("mailboxReadAlias");
+    IndexName DEFAULT_MAILBOX_INDEX = new IndexName("mailbox_v1");
+    TypeName MESSAGE_TYPE = new TypeName("message");
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/QuotaRatioElasticSearchConstants.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/QuotaRatioElasticSearchConstants.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/QuotaRatioElasticSearchConstants.java
new file mode 100644
index 0000000..3bc650d
--- /dev/null
+++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/QuotaRatioElasticSearchConstants.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.james.backends.es;
+
+import org.apache.james.backends.es.IndexName;
+import org.apache.james.backends.es.ReadAliasName;
+import org.apache.james.backends.es.TypeName;
+import org.apache.james.backends.es.WriteAliasName;
+
+public interface QuotaRatioElasticSearchConstants {
+
+    interface InjectionNames {
+        String QUOTA_RATIO = "quotaRatio";
+    }
+
+    WriteAliasName DEFAULT_QUOTA_RATIO_WRITE_ALIAS = new WriteAliasName("quotaRatioWriteAlias");
+    ReadAliasName DEFAULT_QUOTA_RATIO_READ_ALIAS = new ReadAliasName("quotaRatioReadAlias");
+    IndexName DEFAULT_QUOTA_RATIO_INDEX = new IndexName("quota_ratio_v1");
+    TypeName QUOTA_RATIO_TYPE = new TypeName("quotaRatio");
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchConfigurationTest.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..6fa85ac
--- /dev/null
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchConfigurationTest.java
@@ -0,0 +1,512 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.james.backends.es;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.util.Optional;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.james.util.Host;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableList;
+
+public class ElasticSearchConfigurationTest {
+
+    @Test
+    public void getNbReplicaShouldReturnConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        int value = 36;
+        configuration.addProperty("elasticsearch.nb.replica", value);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getNbReplica())
+            .isEqualTo(value);
+    }
+
+    @Test
+    public void getNbReplicaShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getNbReplica())
+            .isEqualTo(ElasticSearchConfiguration.DEFAULT_NB_REPLICA);
+    }
+
+    @Test
+    public void getNbShardsShouldReturnConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        int value = 36;
+        configuration.addProperty("elasticsearch.nb.shards", value);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getNbShards())
+            .isEqualTo(value);
+    }
+
+    @Test
+    public void getNbShardsShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getNbShards())
+            .isEqualTo(ElasticSearchConfiguration.DEFAULT_NB_SHARDS);
+    }
+
+    @Test
+    public void getMaxRetriesShouldReturnConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        int value = 36;
+        configuration.addProperty("elasticsearch.retryConnection.maxRetries", value);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getMaxRetries())
+            .isEqualTo(value);
+    }
+
+    @Test
+    public void getMaxRetriesShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getMaxRetries())
+            .isEqualTo(ElasticSearchConfiguration.DEFAULT_CONNECTION_MAX_RETRIES);
+    }
+
+    @Test
+    public void getMinDelayShouldReturnConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        int value = 36;
+        configuration.addProperty("elasticsearch.retryConnection.minDelay", value);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getMinDelay())
+            .isEqualTo(value);
+    }
+
+    @Test
+    public void getMinDelayShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getMinDelay())
+            .isEqualTo(ElasticSearchConfiguration.DEFAULT_CONNECTION_MIN_DELAY);
+    }
+
+    @Test
+    public void getIndexMailboxNameShouldReturnOldConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.index.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexMailboxName())
+            .isEqualTo(new IndexName(name));
+    }
+
+    @Test
+    public void getIndexMailboxNameShouldReturnNewConfiguredValueWhenBoth() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.index.name", "other");
+        configuration.addProperty("elasticsearch.index.mailbox.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexMailboxName())
+            .isEqualTo(new IndexName(name));
+    }
+
+    @Test
+    public void getIndexMailboxNameShouldReturnConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.index.mailbox.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexMailboxName())
+            .isEqualTo(new IndexName(name));
+    }
+
+    @Test
+    public void getIndexMailboxNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexMailboxName())
+            .isEqualTo(MailboxElasticSearchConstants.DEFAULT_MAILBOX_INDEX);
+    }
+
+    @Test
+    public void getReadAliasMailboxNameShouldReturnOldConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.alias.read.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getReadAliasMailboxName())
+            .isEqualTo(new ReadAliasName(name));
+    }
+
+    @Test
+    public void getReadAliasMailboxNameShouldReturnConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.alias.read.mailbox.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getReadAliasMailboxName())
+            .isEqualTo(new ReadAliasName(name));
+    }
+
+    @Test
+    public void getReadAliasMailboxNameShouldReturnNewConfiguredValueWhenBoth() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.alias.read.mailbox.name", name);
+        configuration.addProperty("elasticsearch.alias.read.name", "other");
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getReadAliasMailboxName())
+            .isEqualTo(new ReadAliasName(name));
+    }
+
+    @Test
+    public void getReadAliasMailboxNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getReadAliasMailboxName())
+            .isEqualTo(MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS);
+    }
+
+    @Test
+    public void getWriteAliasMailboxNameShouldReturnOldConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.alias.write.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getWriteAliasMailboxName())
+            .isEqualTo(new WriteAliasName(name));
+    }
+
+    @Test
+    public void getWriteAliasMailboxNameShouldReturnConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.alias.write.mailbox.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getWriteAliasMailboxName())
+            .isEqualTo(new WriteAliasName(name));
+    }
+
+    @Test
+    public void getWriteAliasMailboxNameShouldReturnNewConfiguredValueWhenBoth() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.alias.write.mailbox.name", name);
+        configuration.addProperty("elasticsearch.alias.write.name", "other");
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getWriteAliasMailboxName())
+            .isEqualTo(new WriteAliasName(name));
+    }
+
+    @Test
+    public void getWriteAliasMailboxNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getWriteAliasMailboxName())
+            .isEqualTo(MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS);
+    }
+
+    @Test
+    public void getReadAliasQuotaRatioNameShouldReturnConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.alias.read.quota.ratio.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getReadAliasQuotaRatioName())
+            .isEqualTo(new ReadAliasName(name));
+    }
+
+    @Test
+    public void getReadAliasQuotaRatioNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getReadAliasQuotaRatioName())
+            .isEqualTo(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_READ_ALIAS);
+    }
+
+    @Test
+    public void getWriteAliasQuotaRatioNameShouldReturnConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.alias.write.quota.ratio.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getWriteAliasQuotaRatioName())
+            .isEqualTo(new WriteAliasName(name));
+    }
+
+    @Test
+    public void getWriteAliasQuotaRatioNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getWriteAliasQuotaRatioName())
+            .isEqualTo(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS);
+    }
+
+    @Test
+    public void getIndexQuotaRatioNameShouldReturnConfiguredValue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String name = "name";
+        configuration.addProperty("elasticsearch.index.quota.ratio.name", name);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexQuotaRatioName())
+            .isEqualTo(new IndexName(name));
+    }
+
+    @Test
+    public void getIndexQuotaRatioNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexQuotaRatioName())
+            .isEqualTo(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_INDEX);
+    }
+
+    @Test
+    public void getIndexAttachmentShouldReturnConfiguredValueWhenTrue() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.indexAttachments", true);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexAttachment())
+            .isEqualTo(IndexAttachments.YES);
+    }
+
+    @Test
+    public void getIndexAttachmentShouldReturnConfiguredValueWhenFalse() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.indexAttachments", false);
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexAttachment())
+            .isEqualTo(IndexAttachments.NO);
+    }
+
+    @Test
+    public void getIndexAttachmentShouldReturnDefaultValueWhenMissing() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("elasticsearch.hosts", "127.0.0.1");
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getIndexAttachment())
+            .isEqualTo(IndexAttachments.YES);
+    }
+
+
+    @Test
+    public void getHostsShouldReturnConfiguredHostsWhenNoPort() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String hostname = "myHost";
+        configuration.addProperty("elasticsearch.hosts", hostname);
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getHosts())
+            .containsOnly(Host.from(hostname, ElasticSearchConfiguration.DEFAULT_PORT));
+    }
+
+    @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";
+        int port = 2154;
+        configuration.addProperty("elasticsearch.hosts", hostname + ":" + port);
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getHosts())
+            .containsOnly(Host.from(hostname, port));
+    }
+
+    @Test
+    public void getHostsShouldReturnConfiguredMasterHost() throws ConfigurationException {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        String hostname = "myHost";
+        configuration.addProperty("elasticsearch.masterHost", hostname);
+        int port = 9300;
+        configuration.addProperty("elasticsearch.port", port);
+
+        ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
+
+        assertThat(elasticSearchConfiguration.getHosts())
+            .containsOnly(Host.from(hostname, port));
+    }
+
+    @Test
+    public void validateHostsConfigurationOptionsShouldThrowWhenNoHostSpecify() {
+        assertThatThrownBy(() ->
+            ElasticSearchConfiguration.validateHostsConfigurationOptions(
+                Optional.empty(),
+                Optional.empty(),
+                ImmutableList.of()))
+            .isInstanceOf(ConfigurationException.class)
+            .hasMessage("You should specify either (" + ElasticSearchConfiguration.ELASTICSEARCH_MASTER_HOST +
+                " and " + ElasticSearchConfiguration.ELASTICSEARCH_PORT +
+                ") or " + ElasticSearchConfiguration.ELASTICSEARCH_HOSTS);
+    }
+
+    @Test
+    public void validateHostsConfigurationOptionsShouldThrowWhenMonoAndMultiHostSpecified() {
+        assertThatThrownBy(() ->
+            ElasticSearchConfiguration.validateHostsConfigurationOptions(
+                Optional.of("localhost"),
+                Optional.of(9200),
+                ImmutableList.of("localhost:9200")))
+            .isInstanceOf(ConfigurationException.class)
+            .hasMessage("You should choose between mono host set up and " + ElasticSearchConfiguration.ELASTICSEARCH_HOSTS);
+    }
+
+    @Test
+    public void validateHostsConfigurationOptionsShouldThrowWhenMonoHostWithoutPort() {
+        assertThatThrownBy(() ->
+            ElasticSearchConfiguration.validateHostsConfigurationOptions(
+                Optional.of("localhost"),
+                Optional.empty(),
+                ImmutableList.of()))
+            .isInstanceOf(ConfigurationException.class)
+            .hasMessage(ElasticSearchConfiguration.ELASTICSEARCH_MASTER_HOST +
+                " and " + ElasticSearchConfiguration.ELASTICSEARCH_PORT + " should be specified together");
+    }
+
+    @Test
+    public void validateHostsConfigurationOptionsShouldThrowWhenMonoHostWithoutAddress() {
+        assertThatThrownBy(() ->
+        ElasticSearchConfiguration.validateHostsConfigurationOptions(
+            Optional.empty(),
+            Optional.of(9200),
+            ImmutableList.of()))
+        .isInstanceOf(ConfigurationException.class)
+        .hasMessage(ElasticSearchConfiguration.ELASTICSEARCH_MASTER_HOST + " and " +
+            ElasticSearchConfiguration.ELASTICSEARCH_PORT + " should be specified together");
+    }
+
+    @Test
+    public void validateHostsConfigurationOptionsShouldAcceptMonoHostConfiguration() throws Exception {
+        ElasticSearchConfiguration.validateHostsConfigurationOptions(
+            Optional.of("localhost"),
+            Optional.of(9200),
+            ImmutableList.of());
+    }
+
+    @Test
+    public void validateHostsConfigurationOptionsShouldAcceptMultiHostConfiguration() throws Exception {
+        ElasticSearchConfiguration.validateHostsConfigurationOptions(
+            Optional.empty(),
+            Optional.empty(),
+            ImmutableList.of("localhost:9200"));
+    }
+
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/IndexAttachments.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/IndexAttachments.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/IndexAttachments.java
deleted file mode 100644
index 9b94a0f..0000000
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/IndexAttachments.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.mailbox.elasticsearch;
-
-public enum IndexAttachments {
-    NO, YES
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxElasticSearchConstants.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxElasticSearchConstants.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxElasticSearchConstants.java
deleted file mode 100644
index 79797f4..0000000
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxElasticSearchConstants.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.mailbox.elasticsearch;
-
-import org.apache.james.backends.es.IndexName;
-import org.apache.james.backends.es.ReadAliasName;
-import org.apache.james.backends.es.TypeName;
-import org.apache.james.backends.es.WriteAliasName;
-
-public interface MailboxElasticSearchConstants {
-
-    interface InjectionNames {
-        String MAILBOX = "mailbox";
-    }
-
-    WriteAliasName DEFAULT_MAILBOX_WRITE_ALIAS = new WriteAliasName("mailboxWriteAlias");
-    ReadAliasName DEFAULT_MAILBOX_READ_ALIAS = new ReadAliasName("mailboxReadAlias");
-    IndexName DEFAULT_MAILBOX_INDEX = new IndexName("mailbox_v1");
-    TypeName MESSAGE_TYPE = new TypeName("message");
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIndexCreationUtil.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIndexCreationUtil.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIndexCreationUtil.java
index 89c7227..506c05b 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIndexCreationUtil.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIndexCreationUtil.java
@@ -21,6 +21,7 @@ package org.apache.james.mailbox.elasticsearch;
 
 import org.apache.james.backends.es.IndexCreationFactory;
 import org.apache.james.backends.es.IndexName;
+import org.apache.james.backends.es.MailboxElasticSearchConstants;
 import org.apache.james.backends.es.NodeMappingFactory;
 import org.apache.james.backends.es.ReadAliasName;
 import org.apache.james.backends.es.WriteAliasName;

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
index d6acd0b..3d461da 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
@@ -69,6 +69,7 @@ import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
 
 import java.io.IOException;
 
+import org.apache.james.backends.es.MailboxElasticSearchConstants;
 import org.apache.james.backends.es.NodeMappingFactory;
 import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants.EMailer;
 import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants.Property;

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
index ed008ef..495e33d 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
@@ -31,12 +31,12 @@ import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.apache.james.backends.es.ElasticSearchIndexer;
+import org.apache.james.backends.es.MailboxElasticSearchConstants;
 import org.apache.james.backends.es.UpdatedRepresentation;
 import org.apache.james.mailbox.MailboxManager.MessageCapabilities;
 import org.apache.james.mailbox.MailboxManager.SearchCapabilities;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
 import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants;
 import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;
 import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher;

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
index b6d9527..53df8d6 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
@@ -28,8 +28,8 @@ import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import org.apache.james.backends.es.IndexAttachments;
 import org.apache.james.mailbox.MailboxSession.User;
-import org.apache.james.mailbox.elasticsearch.IndexAttachments;
 import org.apache.james.mailbox.elasticsearch.query.DateResolutionFormater;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
index aacd790..c40d5c9 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
@@ -25,9 +25,9 @@ import java.util.List;
 import javax.inject.Inject;
 import javax.mail.Flags;
 
+import org.apache.james.backends.es.IndexAttachments;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession.User;
-import org.apache.james.mailbox.elasticsearch.IndexAttachments;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
index c6225c9..bb22f74 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
@@ -27,6 +27,8 @@ import java.util.concurrent.Executors;
 
 import org.apache.james.backends.es.ElasticSearchIndexer;
 import org.apache.james.backends.es.EmbeddedElasticSearch;
+import org.apache.james.backends.es.IndexAttachments;
+import org.apache.james.backends.es.MailboxElasticSearchConstants;
 import org.apache.james.backends.es.utils.TestingClientProvider;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
index 40b641e..9443c9c 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessageTest.java
@@ -32,7 +32,7 @@ import java.util.Optional;
 import javax.mail.Flags;
 
 import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.elasticsearch.IndexAttachments;
+import org.apache.james.backends.es.IndexAttachments;
 import org.apache.james.mailbox.extractor.ParsedContent;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.inmemory.InMemoryMessageId;

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
index fa080f3..3b50399 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
@@ -35,7 +35,7 @@ import javax.mail.util.SharedByteArrayInputStream;
 import org.apache.james.mailbox.FlagsBuilder;
 import org.apache.james.mailbox.MailboxSession.User;
 import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.elasticsearch.IndexAttachments;
+import org.apache.james.backends.es.IndexAttachments;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.MessageId;

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearcher.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearcher.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearcher.java
index 21d55a8..59bb8f6 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearcher.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearcher.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.quota.search.elasticsearch;
 
-import static org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants.QUOTA_RATIO_TYPE;
+import static org.apache.james.backends.es.QuotaRatioElasticSearchConstants.QUOTA_RATIO_TYPE;
 import static org.apache.james.quota.search.elasticsearch.json.JsonMessageConstants.USER;
 
 import java.util.Arrays;

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioElasticSearchConstants.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioElasticSearchConstants.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioElasticSearchConstants.java
deleted file mode 100644
index 6ce049f..0000000
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioElasticSearchConstants.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.quota.search.elasticsearch;
-
-import org.apache.james.backends.es.IndexName;
-import org.apache.james.backends.es.ReadAliasName;
-import org.apache.james.backends.es.TypeName;
-import org.apache.james.backends.es.WriteAliasName;
-
-public interface QuotaRatioElasticSearchConstants {
-
-    interface InjectionNames {
-        String QUOTA_RATIO = "quotaRatio";
-    }
-
-    WriteAliasName DEFAULT_QUOTA_RATIO_WRITE_ALIAS = new WriteAliasName("quotaRatioWriteAlias");
-    ReadAliasName DEFAULT_QUOTA_RATIO_READ_ALIAS = new ReadAliasName("quotaRatioReadAlias");
-    IndexName DEFAULT_QUOTA_RATIO_INDEX = new IndexName("quota_ratio_v1");
-    TypeName QUOTA_RATIO_TYPE = new TypeName("quotaRatio");
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioMappingFactory.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioMappingFactory.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioMappingFactory.java
index 128f1d1..096a8e5 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioMappingFactory.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaRatioMappingFactory.java
@@ -32,6 +32,7 @@ import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
 
 import java.io.IOException;
 
+import org.apache.james.backends.es.QuotaRatioElasticSearchConstants;
 import org.elasticsearch.common.xcontent.XContentBuilder;
 
 public class QuotaRatioMappingFactory {

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaSearchIndexCreationUtil.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaSearchIndexCreationUtil.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaSearchIndexCreationUtil.java
index 98a4698..a4a1103 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaSearchIndexCreationUtil.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaSearchIndexCreationUtil.java
@@ -23,6 +23,7 @@ import org.apache.james.backends.es.AliasName;
 import org.apache.james.backends.es.IndexCreationFactory;
 import org.apache.james.backends.es.IndexName;
 import org.apache.james.backends.es.NodeMappingFactory;
+import org.apache.james.backends.es.QuotaRatioElasticSearchConstants;
 import org.elasticsearch.client.Client;
 
 public class QuotaSearchIndexCreationUtil {

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
index 1bdd295..6e7a1d0 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
@@ -22,10 +22,10 @@ import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.apache.james.backends.es.ElasticSearchIndexer;
+import org.apache.james.backends.es.QuotaRatioElasticSearchConstants;
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxSession.User;
-import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants;
 import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
index cf35a03..e38b37d 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
@@ -25,6 +25,7 @@ import java.util.concurrent.Executors;
 
 import org.apache.james.backends.es.ElasticSearchIndexer;
 import org.apache.james.backends.es.EmbeddedElasticSearch;
+import org.apache.james.backends.es.QuotaRatioElasticSearchConstants;
 import org.apache.james.backends.es.utils.TestingClientProvider;
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.domainlist.memory.MemoryDomainList;

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
index a9ef7de..fa94dbe 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
@@ -35,7 +35,7 @@ import org.apache.james.mailbox.MailboxListener.QuotaUsageUpdatedEvent;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.quota.QuotaFixture.Counts;
 import org.apache.james.mailbox.quota.QuotaFixture.Sizes;
-import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants;
+import org.apache.james.backends.es.QuotaRatioElasticSearchConstants;
 import org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil;
 import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;
 import org.elasticsearch.action.search.SearchResponse;

http://git-wip-us.apache.org/repos/asf/james-project/blob/a3f6c0b9/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
index 7feed5d..93ce690 100644
--- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -37,8 +37,8 @@ import org.apache.james.imap.main.DefaultImapDecoderFactory;
 import org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
-import org.apache.james.mailbox.elasticsearch.IndexAttachments;
-import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
+import org.apache.james.backends.es.IndexAttachments;
+import org.apache.james.backends.es.MailboxElasticSearchConstants;
 import org.apache.james.mailbox.elasticsearch.MailboxIndexCreationUtil;
 import org.apache.james.mailbox.elasticsearch.events.ElasticSearchListeningMessageSearchIndex;
 import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;


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


[09/11] james-project git commit: JAMES-2590 IndexCreationFactory should depend on ES configuration

Posted by ad...@apache.org.
JAMES-2590 IndexCreationFactory should depend on ES 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/1d6aae0f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1d6aae0f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1d6aae0f

Branch: refs/heads/3.2.x
Commit: 1d6aae0f0b6b055716d432aae546e44ce3a01fd5
Parents: a3f6c0b
Author: Antoine Duprat <ad...@linagora.com>
Authored: Mon Nov 12 21:09:39 2018 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Fri Dec 7 17:11:56 2018 +0100

----------------------------------------------------------------------
 .../backends/es/ElasticSearchConfiguration.java | 14 +++++----
 .../james/backends/es/IndexCreationFactory.java | 32 ++++++--------------
 .../es/ElasticSearchConfigurationTest.java      | 23 ++++++++++++++
 .../backends/es/ElasticSearchIndexerTest.java   |  2 +-
 .../backends/es/IndexCreationFactoryTest.java   | 32 +++-----------------
 .../backends/es/NodeMappingFactoryTest.java     |  2 +-
 .../backends/es/search/ScrollIterableTest.java  |  3 +-
 .../elasticsearch/MailboxIndexCreationUtil.java | 11 ++++---
 .../ElasticSearchIntegrationTest.java           |  4 ++-
 .../QuotaSearchIndexCreationUtil.java           | 11 ++++---
 ...ticSearchQuotaSearchTestSystemExtension.java |  3 +-
 .../ElasticSearchQuotaMailboxListenerTest.java  |  3 +-
 .../host/ElasticSearchHostSystem.java           |  4 ++-
 .../mailbox/ElasticSearchMailboxModule.java     |  6 ++--
 .../james/modules/TestElasticSearchModule.java  |  3 +-
 .../ElasticSearchQuotaSearchExtension.java      |  4 ++-
 16 files changed, 81 insertions(+), 76 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/1d6aae0f/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchConfiguration.java
----------------------------------------------------------------------
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 abb9026..b97d9d7 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
@@ -137,13 +137,15 @@ public class ElasticSearchConfiguration {
             return this;
         }
 
-        public Builder nbShards(Optional<Integer> nbShards) {
-            this.nbShards = nbShards;
+        public Builder nbShards(int nbShards) {
+            Preconditions.checkArgument(nbShards > 0, "You need the number of shards to be strictly positive");
+            this.nbShards = Optional.of(nbShards);
             return this;
         }
 
-        public Builder nbReplica(Optional<Integer> nbReplica) {
-            this.nbReplica = nbReplica;
+        public Builder nbReplica(int nbReplica) {
+            Preconditions.checkArgument(nbReplica >= 0, "You need the number of replica to be positive");
+            this.nbReplica = Optional.of(nbReplica);
             return this;
         }
 
@@ -220,8 +222,8 @@ public class ElasticSearchConfiguration {
             .indexQuotaRatioName(computeQuotaSearchIndexName(configuration))
             .readAliasQuotaRatioName(computeQuotaSearchReadAlias(configuration))
             .writeAliasQuotaRatioName(computeQuotaSearchWriteAlias(configuration))
-            .nbShards(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_NB_SHARDS, null)))
-            .nbReplica(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_NB_REPLICA, null)))
+            .nbShards(configuration.getInteger(ELASTICSEARCH_NB_SHARDS, DEFAULT_NB_SHARDS))
+            .nbReplica(configuration.getInteger(ELASTICSEARCH_NB_REPLICA, DEFAULT_NB_REPLICA))
             .minDelay(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_RETRY_CONNECTION_MIN_DELAY, null)))
             .maxRetries(Optional.ofNullable(configuration.getInteger(ELASTICSEARCH_RETRY_CONNECTION_MAX_RETRIES, null)))
             .indexAttachment(provideIndexAttachments(configuration))

http://git-wip-us.apache.org/repos/asf/james-project/blob/1d6aae0f/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexCreationFactory.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexCreationFactory.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexCreationFactory.java
index 7da3d8a..586c3bf 100644
--- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexCreationFactory.java
+++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexCreationFactory.java
@@ -23,7 +23,8 @@ import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Optional;
+
+import javax.inject.Inject;
 
 import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest;
 import org.elasticsearch.action.admin.indices.alias.get.GetAliasesRequest;
@@ -38,8 +39,6 @@ import com.google.common.base.Preconditions;
 public class IndexCreationFactory {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(IndexCreationFactory.class);
-    private static final int DEFAULT_NB_SHARDS = 1;
-    private static final int DEFAULT_NB_REPLICA = 0;
     public static final String CASE_INSENSITIVE = "case_insensitive";
     public static final String KEEP_MAIL_AND_URL = "keep_mail_and_url";
     public static final String SNOWBALL_KEEP_MAIL_AND_URL = "snowball_keep_mail_and_token";
@@ -47,14 +46,15 @@ public class IndexCreationFactory {
 
     private IndexName indexName;
     private ArrayList<AliasName> aliases;
-    private Optional<Integer> nbShards;
-    private Optional<Integer> nbReplica;
+    private int nbShards;
+    private int nbReplica;
 
-    public IndexCreationFactory() {
+    @Inject
+    public IndexCreationFactory(ElasticSearchConfiguration configuration) {
         indexName = null;
         aliases = new ArrayList<>();
-        nbShards = Optional.empty();
-        nbReplica = Optional.empty();
+        nbShards = configuration.getNbShards();
+        nbReplica = configuration.getNbReplica();
     }
 
     public IndexCreationFactory useIndex(IndexName indexName) {
@@ -69,24 +69,10 @@ public class IndexCreationFactory {
         return this;
     }
 
-    public IndexCreationFactory nbShards(int nbShards) {
-        Preconditions.checkArgument(nbShards > 0, "You need the number of shards to be strictly positive");
-        this.nbShards = Optional.of(nbShards);
-        return this;
-    }
-
-    public IndexCreationFactory nbReplica(int nbReplica) {
-        Preconditions.checkArgument(nbReplica >= 0, "You need the number of replica to be positive");
-        this.nbReplica = Optional.of(nbReplica);
-        return this;
-    }
-
     public Client createIndexAndAliases(Client client) {
         Preconditions.checkNotNull(indexName);
         try {
-            createIndexIfNeeded(client, indexName, generateSetting(
-                nbShards.orElse(DEFAULT_NB_SHARDS),
-                nbReplica.orElse(DEFAULT_NB_REPLICA)));
+            createIndexIfNeeded(client, indexName, generateSetting(nbShards, nbReplica));
             aliases.forEach(alias -> createAliasIfNeeded(client, indexName, alias));
         } catch (IOException e) {
             LOGGER.error("Error while creating index : ", e);

http://git-wip-us.apache.org/repos/asf/james-project/blob/1d6aae0f/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchConfigurationTest.java
----------------------------------------------------------------------
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 6fa85ac..3021a08 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
@@ -509,4 +509,27 @@ public class ElasticSearchConfigurationTest {
     }
 
 
+    @Test
+    public void nbReplicaShouldThrowWhenNegative() {
+        assertThatThrownBy(() ->
+                ElasticSearchConfiguration.builder()
+                        .nbReplica(-1))
+                .isInstanceOf(IllegalArgumentException.class);
+    }
+
+    @Test
+    public void nbShardsShouldThrowWhenNegative() {
+        assertThatThrownBy(() ->
+                ElasticSearchConfiguration.builder()
+                        .nbShards(-1))
+                .isInstanceOf(IllegalArgumentException.class);
+    }
+
+    @Test
+    public void nbShardsShouldThrowWhenZero() {
+        assertThatThrownBy(() ->
+                ElasticSearchConfiguration.builder()
+                        .nbShards(0))
+                .isInstanceOf(IllegalArgumentException.class);
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/1d6aae0f/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java
index ee37e80..fa51c8f 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java
@@ -57,7 +57,7 @@ public class ElasticSearchIndexerTest {
     public void setup() {
         node = embeddedElasticSearch.getNode();
         TestingClientProvider clientProvider = new TestingClientProvider(node);
-        new IndexCreationFactory()
+        new IndexCreationFactory(ElasticSearchConfiguration.DEFAULT_CONFIGURATION)
             .useIndex(INDEX_NAME)
             .addAlias(ALIAS_NAME)
             .createIndexAndAliases(clientProvider.get());

http://git-wip-us.apache.org/repos/asf/james-project/blob/1d6aae0f/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/IndexCreationFactoryTest.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/IndexCreationFactoryTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/IndexCreationFactoryTest.java
index 1c9f1d8..8c51bc2 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/IndexCreationFactoryTest.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/IndexCreationFactoryTest.java
@@ -43,7 +43,7 @@ public class IndexCreationFactoryTest {
     @Before
     public void setUp() {
         clientProvider = new TestingClientProvider(embeddedElasticSearch.getNode());
-        new IndexCreationFactory()
+        new IndexCreationFactory(ElasticSearchConfiguration.DEFAULT_CONFIGURATION)
             .useIndex(INDEX_NAME)
             .addAlias(ALIAS_NAME)
             .createIndexAndAliases(clientProvider.get());
@@ -51,7 +51,7 @@ public class IndexCreationFactoryTest {
 
     @Test
     public void createIndexAndAliasShouldNotThrowWhenCalledSeveralTime() {
-        new IndexCreationFactory()
+        new IndexCreationFactory(ElasticSearchConfiguration.DEFAULT_CONFIGURATION)
             .useIndex(INDEX_NAME)
             .addAlias(ALIAS_NAME)
             .createIndexAndAliases(clientProvider.get());
@@ -60,7 +60,7 @@ public class IndexCreationFactoryTest {
     @Test
     public void useIndexShouldThrowWhenNull() {
         assertThatThrownBy(() ->
-            new IndexCreationFactory()
+            new IndexCreationFactory(ElasticSearchConfiguration.DEFAULT_CONFIGURATION)
                 .useIndex(null))
             .isInstanceOf(NullPointerException.class);
     }
@@ -68,32 +68,8 @@ public class IndexCreationFactoryTest {
     @Test
     public void addAliasShouldThrowWhenNull() {
         assertThatThrownBy(() ->
-            new IndexCreationFactory()
+            new IndexCreationFactory(ElasticSearchConfiguration.DEFAULT_CONFIGURATION)
                 .addAlias(null))
             .isInstanceOf(NullPointerException.class);
     }
-
-    @Test
-    public void nbReplicaShouldThrowWhenNegative() {
-        assertThatThrownBy(() ->
-            new IndexCreationFactory()
-                .nbReplica(-1))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
-    @Test
-    public void nbShardsShouldThrowWhenNegative() {
-        assertThatThrownBy(() ->
-            new IndexCreationFactory()
-                .nbShards(-1))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
-    @Test
-    public void nbShardsShouldThrowWhenZero() {
-        assertThatThrownBy(() ->
-            new IndexCreationFactory()
-                .nbShards(0))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/1d6aae0f/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/NodeMappingFactoryTest.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/NodeMappingFactoryTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/NodeMappingFactoryTest.java
index 50e2f1e..60170a5 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/NodeMappingFactoryTest.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/NodeMappingFactoryTest.java
@@ -46,7 +46,7 @@ public class NodeMappingFactoryTest {
     @Before
     public void setUp() throws Exception {
         clientProvider = new TestingClientProvider(embeddedElasticSearch.getNode());
-        new IndexCreationFactory()
+        new IndexCreationFactory(ElasticSearchConfiguration.DEFAULT_CONFIGURATION)
             .useIndex(INDEX_NAME)
             .addAlias(ALIAS_NAME)
             .createIndexAndAliases(clientProvider.get());

http://git-wip-us.apache.org/repos/asf/james-project/blob/1d6aae0f/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/search/ScrollIterableTest.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/search/ScrollIterableTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/search/ScrollIterableTest.java
index 4c65a9b..01032e6 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/search/ScrollIterableTest.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/search/ScrollIterableTest.java
@@ -29,6 +29,7 @@ import java.util.List;
 import java.util.stream.Collectors;
 
 import org.apache.james.backends.es.ClientProvider;
+import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.EmbeddedElasticSearch;
 import org.apache.james.backends.es.IndexCreationFactory;
 import org.apache.james.backends.es.IndexName;
@@ -67,7 +68,7 @@ public class ScrollIterableTest {
     @Before
     public void setUp() throws Exception {
         clientProvider = new TestingClientProvider(embeddedElasticSearch.getNode());
-        new IndexCreationFactory()
+        new IndexCreationFactory(ElasticSearchConfiguration.DEFAULT_CONFIGURATION)
             .useIndex(INDEX_NAME)
             .addAlias(ALIAS_NAME)
             .createIndexAndAliases(clientProvider.get());

http://git-wip-us.apache.org/repos/asf/james-project/blob/1d6aae0f/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIndexCreationUtil.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIndexCreationUtil.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIndexCreationUtil.java
index 506c05b..c03773b 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIndexCreationUtil.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIndexCreationUtil.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.mailbox.elasticsearch;
 
+import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.IndexCreationFactory;
 import org.apache.james.backends.es.IndexName;
 import org.apache.james.backends.es.MailboxElasticSearchConstants;
@@ -32,10 +33,11 @@ public class MailboxIndexCreationUtil {
     public static Client prepareClient(Client client,
                                        ReadAliasName readAlias,
                                        WriteAliasName writeAlias,
-                                       IndexName indexName) {
+                                       IndexName indexName,
+                                       ElasticSearchConfiguration configuration) {
 
         return NodeMappingFactory.applyMapping(
-            new IndexCreationFactory()
+            new IndexCreationFactory(configuration)
                 .useIndex(indexName)
                 .addAlias(readAlias)
                 .addAlias(writeAlias)
@@ -45,10 +47,11 @@ public class MailboxIndexCreationUtil {
             MailboxMappingFactory.getMappingContent());
     }
 
-    public static Client prepareDefaultClient(Client client) {
+    public static Client prepareDefaultClient(Client client, ElasticSearchConfiguration configuration) {
         return prepareClient(client,
             MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS,
             MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS,
-            MailboxElasticSearchConstants.DEFAULT_MAILBOX_INDEX);
+            MailboxElasticSearchConstants.DEFAULT_MAILBOX_INDEX,
+                configuration);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/1d6aae0f/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
index bb22f74..991453a 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
@@ -25,6 +25,7 @@ import java.nio.charset.StandardCharsets;
 import java.time.ZoneId;
 import java.util.concurrent.Executors;
 
+import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
 import org.apache.james.backends.es.EmbeddedElasticSearch;
 import org.apache.james.backends.es.IndexAttachments;
@@ -94,7 +95,8 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest
     @Override
     protected void initializeMailboxManager() throws Exception {
         Client client = MailboxIndexCreationUtil.prepareDefaultClient(
-            new TestingClientProvider(embeddedElasticSearch.getNode()).get());
+            new TestingClientProvider(embeddedElasticSearch.getNode()).get(),
+                ElasticSearchConfiguration.DEFAULT_CONFIGURATION);
 
         storeMailboxManager = new InMemoryIntegrationResources()
             .createMailboxManager(new SimpleGroupMembershipResolver());

http://git-wip-us.apache.org/repos/asf/james-project/blob/1d6aae0f/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaSearchIndexCreationUtil.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaSearchIndexCreationUtil.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaSearchIndexCreationUtil.java
index a4a1103..5f8d654 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaSearchIndexCreationUtil.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/QuotaSearchIndexCreationUtil.java
@@ -20,6 +20,7 @@
 package org.apache.james.quota.search.elasticsearch;
 
 import org.apache.james.backends.es.AliasName;
+import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.IndexCreationFactory;
 import org.apache.james.backends.es.IndexName;
 import org.apache.james.backends.es.NodeMappingFactory;
@@ -31,10 +32,11 @@ public class QuotaSearchIndexCreationUtil {
     public static Client prepareClient(Client client,
                                        AliasName readAlias,
                                        AliasName writeAlias,
-                                       IndexName indexName) {
+                                       IndexName indexName,
+                                       ElasticSearchConfiguration configuration) {
 
         return NodeMappingFactory.applyMapping(
-            new IndexCreationFactory()
+            new IndexCreationFactory(configuration)
                 .useIndex(indexName)
                 .addAlias(readAlias)
                 .addAlias(writeAlias)
@@ -44,10 +46,11 @@ public class QuotaSearchIndexCreationUtil {
             QuotaRatioMappingFactory.getMappingContent());
     }
 
-    public static Client prepareDefaultClient(Client client) {
+    public static Client prepareDefaultClient(Client client, ElasticSearchConfiguration configuration) {
         return prepareClient(client,
             QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_READ_ALIAS,
             QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS,
-            QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_INDEX);
+            QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_INDEX,
+            configuration);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/1d6aae0f/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
index e38b37d..cf3ba91 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
@@ -23,6 +23,7 @@ import static org.mockito.Mockito.mock;
 
 import java.util.concurrent.Executors;
 
+import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
 import org.apache.james.backends.es.EmbeddedElasticSearch;
 import org.apache.james.backends.es.QuotaRatioElasticSearchConstants;
@@ -59,7 +60,7 @@ public class ElasticSearchQuotaSearchTestSystemExtension implements ParameterRes
     public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
         try {
             Client client = QuotaSearchIndexCreationUtil.prepareDefaultClient(
-                new TestingClientProvider(embeddedElasticSearch.getNode()).get());
+                new TestingClientProvider(embeddedElasticSearch.getNode()).get(), ElasticSearchConfiguration.DEFAULT_CONFIGURATION);
 
             InMemoryIntegrationResources.Resources resources = new InMemoryIntegrationResources().createResources(new SimpleGroupMembershipResolver());
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/1d6aae0f/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
index fa94dbe..6e8e678 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
@@ -27,6 +27,7 @@ import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
 
 import java.util.concurrent.Executors;
 
+import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
 import org.apache.james.backends.es.EmbeddedElasticSearch;
 import org.apache.james.backends.es.utils.TestingClientProvider;
@@ -63,7 +64,7 @@ public class ElasticSearchQuotaMailboxListenerTest {
     @Before
     public void setUp() {
         client = QuotaSearchIndexCreationUtil.prepareDefaultClient(
-            new TestingClientProvider(embeddedElasticSearch.getNode()).get());
+            new TestingClientProvider(embeddedElasticSearch.getNode()).get(), ElasticSearchConfiguration.DEFAULT_CONFIGURATION);
 
         quotaMailboxListener = new ElasticSearchQuotaMailboxListener(
             new ElasticSearchIndexer(client,

http://git-wip-us.apache.org/repos/asf/james-project/blob/1d6aae0f/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
index 93ce690..72042d0 100644
--- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -26,6 +26,7 @@ import java.util.concurrent.Executors;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.NotImplementedException;
+import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
 import org.apache.james.backends.es.EmbeddedElasticSearch;
 import org.apache.james.backends.es.utils.TestingClientProvider;
@@ -89,7 +90,8 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
 
     private void initFields() throws MailboxException {
         Client client = MailboxIndexCreationUtil.prepareDefaultClient(
-            new TestingClientProvider(embeddedElasticSearch.getNode()).get());
+            new TestingClientProvider(embeddedElasticSearch.getNode()).get(),
+                ElasticSearchConfiguration.DEFAULT_CONFIGURATION);
 
         InMemoryMailboxSessionMapperFactory factory = new InMemoryMailboxSessionMapperFactory();
         InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();

http://git-wip-us.apache.org/repos/asf/james-project/blob/1d6aae0f/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
index 3d89665..ed5de5e 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
@@ -131,12 +131,14 @@ public class ElasticSearchMailboxModule extends AbstractModule {
         MailboxIndexCreationUtil.prepareClient(client,
             configuration.getReadAliasMailboxName(),
             configuration.getWriteAliasMailboxName(),
-            configuration.getIndexMailboxName());
+            configuration.getIndexMailboxName(),
+            configuration);
 
         QuotaSearchIndexCreationUtil.prepareClient(client,
             configuration.getReadAliasQuotaRatioName(),
             configuration.getWriteAliasMailboxName(),
-            configuration.getIndexQuotaRatioName());
+            configuration.getIndexQuotaRatioName(),
+            configuration);
 
         return client;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/1d6aae0f/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/TestElasticSearchModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/TestElasticSearchModule.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/TestElasticSearchModule.java
index e8e41d7..0ada1f6 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/TestElasticSearchModule.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/TestElasticSearchModule.java
@@ -21,6 +21,7 @@ package org.apache.james.modules;
 
 import javax.inject.Singleton;
 
+import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.EmbeddedElasticSearch;
 import org.apache.james.backends.es.utils.TestingClientProvider;
 import org.apache.james.mailbox.elasticsearch.MailboxIndexCreationUtil;
@@ -46,6 +47,6 @@ public class TestElasticSearchModule extends AbstractModule {
     @Singleton
     protected Client provideClientProvider() {
         Client client = new TestingClientProvider(embeddedElasticSearch.getNode()).get();
-        return MailboxIndexCreationUtil.prepareDefaultClient(client);
+        return MailboxIndexCreationUtil.prepareDefaultClient(client, ElasticSearchConfiguration.DEFAULT_CONFIGURATION);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/1d6aae0f/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
index cf42497..5388cfa 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
@@ -23,6 +23,7 @@ import static org.mockito.Mockito.mock;
 
 import java.util.concurrent.Executors;
 
+import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
 import org.apache.james.backends.es.EmbeddedElasticSearch;
 import org.apache.james.backends.es.utils.TestingClientProvider;
@@ -60,7 +61,8 @@ public class ElasticSearchQuotaSearchExtension implements ParameterResolver, Bef
             embeddedElasticSearch.before();
 
             Client client = QuotaSearchIndexCreationUtil.prepareDefaultClient(
-                new TestingClientProvider(embeddedElasticSearch.getNode()).get());
+                new TestingClientProvider(embeddedElasticSearch.getNode()).get(),
+                ElasticSearchConfiguration.DEFAULT_CONFIGURATION);
 
             InMemoryIntegrationResources.Resources resources = new InMemoryIntegrationResources().createResources(new SimpleGroupMembershipResolver());
 


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