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/fd49bd9b Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/fd49bd9b Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/fd49bd9b Branch: refs/heads/master Commit: fd49bd9b4305f1e88ebf632a9ecec85d0028ff84 Parents: 483a903 Author: Benoit Tellier <btell...@linagora.com> Authored: Tue Nov 13 15:18:40 2018 +0700 Committer: Benoit Tellier <btell...@linagora.com> Committed: Thu Nov 15 09:04:32 2018 +0700 ---------------------------------------------------------------------- .../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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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/fd49bd9b/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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org