You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/05/30 02:24:19 UTC
[08/14] james-project git commit: JAMES-2404 Configuration of Quota
Search aliases
JAMES-2404 Configuration of Quota Search aliases
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b5816095
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b5816095
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b5816095
Branch: refs/heads/master
Commit: b5816095bbab124658d9aab5cb30a11799a278ae
Parents: 6a32746
Author: benwa <bt...@linagora.com>
Authored: Mon May 28 14:27:50 2018 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue May 29 15:32:53 2018 +0200
----------------------------------------------------------------------
.../mailbox/ElasticSearchConfiguration.java | 62 ++++++++++++++-
.../mailbox/ElasticSearchMailboxModule.java | 5 +-
.../ElasticSearchQuotaSearcherModule.java | 4 +-
.../mailbox/ElasticSearchConfigurationTest.java | 83 +++++++++++++++++++-
4 files changed, 143 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/b5816095/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchConfiguration.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchConfiguration.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchConfiguration.java
index c19bd96..230e480 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchConfiguration.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchConfiguration.java
@@ -31,6 +31,7 @@ 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;
@@ -50,6 +51,9 @@ public class ElasticSearchConfiguration {
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";
@@ -68,6 +72,9 @@ public class ElasticSearchConfiguration {
MailboxElasticSearchConstants.DEFAULT_MAILBOX_INDEX,
MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS,
MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS,
+ QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_INDEX,
+ QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_READ_ALIAS,
+ QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS,
DEFAULT_NB_SHARDS,
DEFAULT_NB_REPLICA,
DEFAULT_CONNECTION_MIN_DELAY,
@@ -81,15 +88,23 @@ public class ElasticSearchConfiguration {
int minDelay = configuration.getInt(ELASTICSEARCH_RETRY_CONNECTION_MIN_DELAY, DEFAULT_CONNECTION_MIN_DELAY);
IndexAttachments indexAttachments = provideIndexAttachments(configuration);
ImmutableList<Host> hosts = getHosts(configuration);
+
ReadAliasName readAlias = computeMailboxReadAlias(configuration);
WriteAliasName writeAlias = computeMailboxWriteAlias(configuration);
IndexName indexName = computeMailboxIndexName(configuration);
+ IndexName quotaRatioIndexName = computeQuotaSearchIndexName(configuration);
+ ReadAliasName quotaSearchReadAlias = computeQuotaSearchReadAlias(configuration);
+ WriteAliasName quotaSearchWriteAlias = computeQuotaSearchWriteAlias(configuration);
+
return new ElasticSearchConfiguration(
hosts,
indexName,
readAlias,
writeAlias,
+ quotaRatioIndexName,
+ quotaSearchReadAlias,
+ quotaSearchWriteAlias,
nbShards,
nbReplica,
minDelay,
@@ -124,6 +139,24 @@ public class ElasticSearchConfiguration {
.orElse(MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS);
}
+ public static IndexName computeQuotaSearchIndexName(PropertiesConfiguration configuration) {
+ return Optional.ofNullable(configuration.getString(ELASTICSEARCH_INDEX_QUOTA_RATIO_NAME))
+ .map(IndexName::new)
+ .orElse(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_INDEX);
+ }
+
+ public static WriteAliasName computeQuotaSearchWriteAlias(PropertiesConfiguration configuration) {
+ return Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_WRITE_QUOTA_RATIO_NAME))
+ .map(WriteAliasName::new)
+ .orElse(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS);
+ }
+
+ public static ReadAliasName computeQuotaSearchReadAlias(PropertiesConfiguration configuration) {
+ return Optional.ofNullable(configuration.getString(ELASTICSEARCH_ALIAS_READ_QUOTA_RATIO_NAME))
+ .map(ReadAliasName::new)
+ .orElse(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_READ_ALIAS);
+ }
+
private static IndexAttachments provideIndexAttachments(PropertiesConfiguration configuration) {
if (configuration.getBoolean(ELASTICSEARCH_INDEX_ATTACHMENTS, DEFAULT_INDEX_ATTACHMENTS)) {
return IndexAttachments.YES;
@@ -170,19 +203,25 @@ public class ElasticSearchConfiguration {
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;
- public ElasticSearchConfiguration(ImmutableList<Host> hosts, IndexName indexMailboxName, ReadAliasName readAliasMailboxName,
- WriteAliasName writeAliasMailboxName, int nbShards, int nbReplica, int minDelay,
+ 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;
@@ -226,6 +265,18 @@ public class ElasticSearchConfiguration {
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) {
@@ -239,7 +290,10 @@ public class ElasticSearchConfiguration {
&& 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.writeAliasMailboxName, that.writeAliasMailboxName)
+ && Objects.equals(this.indexQuotaRatioName, that.indexQuotaRatioName)
+ && Objects.equals(this.readAliasQuotaRatioName, that.readAliasQuotaRatioName)
+ && Objects.equals(this.writeAliasQuotaRatioName, that.writeAliasQuotaRatioName);
}
return false;
}
@@ -247,6 +301,6 @@ public class ElasticSearchConfiguration {
@Override
public final int hashCode() {
return Objects.hash(hosts, indexMailboxName, readAliasMailboxName, writeAliasMailboxName, nbShards,
- nbReplica, minDelay, maxRetries, indexAttachment);
+ nbReplica, minDelay, maxRetries, indexAttachment, indexQuotaRatioName, readAliasQuotaRatioName, writeAliasMailboxName);
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b5816095/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 48e254b..5bfd220 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
@@ -132,7 +132,10 @@ public class ElasticSearchMailboxModule extends AbstractModule {
configuration.getWriteAliasMailboxName(),
configuration.getIndexMailboxName());
- QuotaSearchIndexCreationUtil.prepareDefaultClient(client);
+ QuotaSearchIndexCreationUtil.prepareClient(client,
+ configuration.getReadAliasQuotaRatioName(),
+ configuration.getWriteAliasMailboxName(),
+ configuration.getIndexQuotaRatioName());
return client;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b5816095/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 0a10aac..ad9dd6f 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
@@ -49,7 +49,7 @@ public class ElasticSearchQuotaSearcherModule extends AbstractModule {
@Singleton
public QuotaSearcher provideSearcher(Client client, ElasticSearchConfiguration configuration) {
return new ElasticSearchQuotaSearcher(client,
- QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_READ_ALIAS);
+ configuration.getReadAliasQuotaRatioName());
}
@Provides
@@ -60,7 +60,7 @@ public class ElasticSearchQuotaSearcherModule extends AbstractModule {
return new ElasticSearchQuotaMailboxListener(
new ElasticSearchIndexer(client,
executor,
- QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS,
+ configuration.getWriteAliasMailboxName(),
QuotaRatioElasticSearchConstants.QUOTA_RATIO_TYPE),
new QuotaRatioToElasticSearchJson());
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b5816095/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/ElasticSearchConfigurationTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/ElasticSearchConfigurationTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/ElasticSearchConfigurationTest.java
index e6b13d3..bcaae13 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/ElasticSearchConfigurationTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/ElasticSearchConfigurationTest.java
@@ -28,8 +28,11 @@ import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.james.backends.es.AliasName;
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;
@@ -287,6 +290,78 @@ public class ElasticSearchConfigurationTest {
}
@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);
@@ -377,7 +452,7 @@ public class ElasticSearchConfigurationTest {
}
@Test
- public void validateHostsConfigurationOptionsShouldThrowWhenNoHostSpecify() throws Exception {
+ public void validateHostsConfigurationOptionsShouldThrowWhenNoHostSpecify() {
assertThatThrownBy(() ->
ElasticSearchConfiguration.validateHostsConfigurationOptions(
Optional.empty(),
@@ -390,7 +465,7 @@ public class ElasticSearchConfigurationTest {
}
@Test
- public void validateHostsConfigurationOptionsShouldThrowWhenMonoAndMultiHostSpecified() throws Exception {
+ public void validateHostsConfigurationOptionsShouldThrowWhenMonoAndMultiHostSpecified() {
assertThatThrownBy(() ->
ElasticSearchConfiguration.validateHostsConfigurationOptions(
Optional.of("localhost"),
@@ -401,7 +476,7 @@ public class ElasticSearchConfigurationTest {
}
@Test
- public void validateHostsConfigurationOptionsShouldThrowWhenMonoHostWithoutPort() throws Exception {
+ public void validateHostsConfigurationOptionsShouldThrowWhenMonoHostWithoutPort() {
assertThatThrownBy(() ->
ElasticSearchConfiguration.validateHostsConfigurationOptions(
Optional.of("localhost"),
@@ -413,7 +488,7 @@ public class ElasticSearchConfigurationTest {
}
@Test
- public void validateHostsConfigurationOptionsShouldThrowWhenMonoHostWithoutAddress() throws Exception {
+ public void validateHostsConfigurationOptionsShouldThrowWhenMonoHostWithoutAddress() {
assertThatThrownBy(() ->
ElasticSearchConfiguration.validateHostsConfigurationOptions(
Optional.empty(),
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org