http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaConfigurationTest.java ---------------------------------------------------------------------- diff --git a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaConfigurationTest.java b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaConfigurationTest.java new file mode 100644 index 0000000..a57a10e --- /dev/null +++ b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaConfigurationTest.java @@ -0,0 +1,104 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.james.quota.search.elasticsearch; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.james.backends.es.IndexName; +import org.apache.james.backends.es.ReadAliasName; +import org.apache.james.backends.es.WriteAliasName; +import org.junit.Test; + +public class ElasticSearchQuotaConfigurationTest { + + @Test + public void getReadAliasQuotaRatioNameShouldReturnConfiguredValue() throws ConfigurationException { + PropertiesConfiguration configuration = new PropertiesConfiguration(); + String name = "name"; + configuration.addProperty("elasticsearch.alias.read.quota.ratio.name", name); + configuration.addProperty("elasticsearch.hosts", "127.0.0.1"); + + ElasticSearchQuotaConfiguration elasticSearchConfiguration = ElasticSearchQuotaConfiguration.fromProperties(configuration); + + assertThat(elasticSearchConfiguration.getReadAliasQuotaRatioName()) + .isEqualTo(new ReadAliasName(name)); + } + + @Test + public void getReadAliasQuotaRatioNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException { + PropertiesConfiguration configuration = new PropertiesConfiguration(); + configuration.addProperty("elasticsearch.hosts", "127.0.0.1"); + + ElasticSearchQuotaConfiguration elasticSearchConfiguration = ElasticSearchQuotaConfiguration.fromProperties(configuration); + + assertThat(elasticSearchConfiguration.getReadAliasQuotaRatioName()) + .isEqualTo(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_READ_ALIAS); + } + + @Test + public void getWriteAliasQuotaRatioNameShouldReturnConfiguredValue() throws ConfigurationException { + PropertiesConfiguration configuration = new PropertiesConfiguration(); + String name = "name"; + configuration.addProperty("elasticsearch.alias.write.quota.ratio.name", name); + configuration.addProperty("elasticsearch.hosts", "127.0.0.1"); + + ElasticSearchQuotaConfiguration elasticSearchConfiguration = ElasticSearchQuotaConfiguration.fromProperties(configuration); + + assertThat(elasticSearchConfiguration.getWriteAliasQuotaRatioName()) + .isEqualTo(new WriteAliasName(name)); + } + + @Test + public void getWriteAliasQuotaRatioNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException { + PropertiesConfiguration configuration = new PropertiesConfiguration(); + configuration.addProperty("elasticsearch.hosts", "127.0.0.1"); + + ElasticSearchQuotaConfiguration elasticSearchConfiguration = ElasticSearchQuotaConfiguration.fromProperties(configuration); + + assertThat(elasticSearchConfiguration.getWriteAliasQuotaRatioName()) + .isEqualTo(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS); + } + + @Test + public void getIndexQuotaRatioNameShouldReturnConfiguredValue() throws ConfigurationException { + PropertiesConfiguration configuration = new PropertiesConfiguration(); + String name = "name"; + configuration.addProperty("elasticsearch.index.quota.ratio.name", name); + configuration.addProperty("elasticsearch.hosts", "127.0.0.1"); + + ElasticSearchQuotaConfiguration elasticSearchConfiguration = ElasticSearchQuotaConfiguration.fromProperties(configuration); + + assertThat(elasticSearchConfiguration.getIndexQuotaRatioName()) + .isEqualTo(new IndexName(name)); + } + + @Test + public void getIndexQuotaRatioNameShouldReturnDefaultValueWhenMissing() throws ConfigurationException { + PropertiesConfiguration configuration = new PropertiesConfiguration(); + configuration.addProperty("elasticsearch.hosts", "127.0.0.1"); + + ElasticSearchQuotaConfiguration elasticSearchConfiguration = ElasticSearchQuotaConfiguration.fromProperties(configuration); + + assertThat(elasticSearchConfiguration.getIndexQuotaRatioName()) + .isEqualTo(QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_INDEX); + } +} \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java ---------------------------------------------------------------------- diff --git a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java index cf3ba91..2d511cf 100644 --- a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java +++ b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java @@ -26,7 +26,6 @@ import java.util.concurrent.Executors; import org.apache.james.backends.es.ElasticSearchConfiguration; import org.apache.james.backends.es.ElasticSearchIndexer; import org.apache.james.backends.es.EmbeddedElasticSearch; -import org.apache.james.backends.es.QuotaRatioElasticSearchConstants; import org.apache.james.backends.es.utils.TestingClientProvider; import org.apache.james.dnsservice.api.DNSService; import org.apache.james.domainlist.memory.MemoryDomainList; http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java ---------------------------------------------------------------------- diff --git a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java index 6e8e678..4ea8e30 100644 --- a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java +++ b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java @@ -36,7 +36,7 @@ import org.apache.james.mailbox.MailboxListener.QuotaUsageUpdatedEvent; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.quota.QuotaFixture.Counts; import org.apache.james.mailbox.quota.QuotaFixture.Sizes; -import org.apache.james.backends.es.QuotaRatioElasticSearchConstants; +import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants; import org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil; import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson; import org.elasticsearch.action.search.SearchResponse; http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java index 72042d0..eb0ddae 100644 --- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java +++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java @@ -38,8 +38,8 @@ import org.apache.james.imap.main.DefaultImapDecoderFactory; import org.apache.james.imap.processor.main.DefaultImapProcessorFactory; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver; -import org.apache.james.backends.es.IndexAttachments; -import org.apache.james.backends.es.MailboxElasticSearchConstants; +import org.apache.james.mailbox.elasticsearch.IndexAttachments; +import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants; import org.apache.james.mailbox.elasticsearch.MailboxIndexCreationUtil; import org.apache.james.mailbox.elasticsearch.events.ElasticSearchListeningMessageSearchIndex; import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson; http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java index ed5de5e..ad05503 100644 --- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java +++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java @@ -34,8 +34,9 @@ import org.apache.commons.configuration.ConfigurationException; import org.apache.james.backends.es.ClientProviderImpl; import org.apache.james.backends.es.ElasticSearchConfiguration; import org.apache.james.backends.es.ElasticSearchIndexer; -import org.apache.james.backends.es.IndexAttachments; -import org.apache.james.backends.es.MailboxElasticSearchConstants; +import org.apache.james.mailbox.elasticsearch.ElasticSearchMailboxConfiguration; +import org.apache.james.mailbox.elasticsearch.IndexAttachments; +import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants; import org.apache.james.mailbox.elasticsearch.MailboxIndexCreationUtil; import org.apache.james.mailbox.elasticsearch.events.ElasticSearchListeningMessageSearchIndex; import org.apache.james.mailbox.elasticsearch.query.QueryConverter; @@ -44,6 +45,7 @@ import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex; import org.apache.james.mailbox.store.search.MessageSearchIndex; +import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaConfiguration; import org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil; import org.apache.james.util.retry.RetryExecutorUtil; import org.apache.james.utils.PropertiesProvider; @@ -75,8 +77,8 @@ public class ElasticSearchMailboxModule extends AbstractModule { @Singleton @Named(MailboxElasticSearchConstants.InjectionNames.MAILBOX) private ElasticSearchIndexer createMailboxElasticSearchIndexer(Client client, - @Named("AsyncExecutor") ExecutorService executor, - ElasticSearchConfiguration configuration) { + @Named("AsyncExecutor") ExecutorService executor, + ElasticSearchMailboxConfiguration configuration) { return new ElasticSearchIndexer( client, executor, @@ -90,7 +92,7 @@ public class ElasticSearchMailboxModule extends AbstractModule { QueryConverter queryConverter, MailboxId.Factory mailboxIdFactory, MessageId.Factory messageIdFactory, - ElasticSearchConfiguration configuration) { + ElasticSearchMailboxConfiguration configuration) { return new ElasticSearchSearcher( client, queryConverter, @@ -115,29 +117,45 @@ public class ElasticSearchMailboxModule extends AbstractModule { @Provides @Singleton + private ElasticSearchMailboxConfiguration getElasticSearchMailboxConfiguration(PropertiesProvider propertiesProvider) throws ConfigurationException { + try { + Configuration configuration = propertiesProvider.getConfiguration(ELASTICSEARCH_CONFIGURATION_NAME); + return ElasticSearchMailboxConfiguration.fromProperties(configuration); + } catch (FileNotFoundException e) { + LOGGER.warn("Could not find " + ELASTICSEARCH_CONFIGURATION_NAME + " configuration file. Providing a default ElasticSearchMailboxConfiguration"); + return ElasticSearchMailboxConfiguration.DEFAULT_CONFIGURATION; + } + } + + @Provides + @Singleton protected Client provideClient(ElasticSearchConfiguration configuration, + ElasticSearchMailboxConfiguration mailboxConfiguration, + ElasticSearchQuotaConfiguration quotaConfiguration, AsyncRetryExecutor executor) throws ExecutionException, InterruptedException { return RetryExecutorUtil.retryOnExceptions(executor, configuration.getMaxRetries(), configuration.getMinDelay(), NoNodeAvailableException.class) - .getWithRetry(context -> connectToCluster(configuration)) + .getWithRetry(context -> connectToCluster(configuration, mailboxConfiguration, quotaConfiguration)) .get(); } - private Client connectToCluster(ElasticSearchConfiguration configuration) { + private Client connectToCluster(ElasticSearchConfiguration configuration, + ElasticSearchMailboxConfiguration mailboxConfiguration, + ElasticSearchQuotaConfiguration quotaConfiguration) { LOGGER.info("Trying to connect to ElasticSearch service at {}", LocalDateTime.now()); Client client = ClientProviderImpl.fromHosts(configuration.getHosts()).get(); MailboxIndexCreationUtil.prepareClient(client, - configuration.getReadAliasMailboxName(), - configuration.getWriteAliasMailboxName(), - configuration.getIndexMailboxName(), + mailboxConfiguration.getReadAliasMailboxName(), + mailboxConfiguration.getWriteAliasMailboxName(), + mailboxConfiguration.getIndexMailboxName(), configuration); QuotaSearchIndexCreationUtil.prepareClient(client, - configuration.getReadAliasQuotaRatioName(), - configuration.getWriteAliasMailboxName(), - configuration.getIndexQuotaRatioName(), + quotaConfiguration.getReadAliasQuotaRatioName(), + quotaConfiguration.getWriteAliasQuotaRatioName(), + quotaConfiguration.getIndexQuotaRatioName(), configuration); return client; @@ -145,7 +163,7 @@ public class ElasticSearchMailboxModule extends AbstractModule { @Provides @Singleton - public IndexAttachments provideIndexAttachments(ElasticSearchConfiguration configuration) { + public IndexAttachments provideIndexAttachments(ElasticSearchMailboxConfiguration configuration) { return configuration.getIndexAttachment(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java index e7e6e0b..78bc752 100644 --- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java +++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java @@ -19,19 +19,27 @@ package org.apache.james.modules.mailbox; +import static org.apache.james.modules.mailbox.ElasticSearchMailboxModule.ELASTICSEARCH_CONFIGURATION_NAME; + +import java.io.FileNotFoundException; import java.util.concurrent.ExecutorService; import javax.inject.Named; -import org.apache.james.backends.es.ElasticSearchConfiguration; +import org.apache.commons.configuration.Configuration; +import org.apache.commons.configuration.ConfigurationException; import org.apache.james.backends.es.ElasticSearchIndexer; -import org.apache.james.backends.es.QuotaRatioElasticSearchConstants; import org.apache.james.mailbox.MailboxListener; import org.apache.james.quota.search.QuotaSearcher; +import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaConfiguration; import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaSearcher; +import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants; import org.apache.james.quota.search.elasticsearch.events.ElasticSearchQuotaMailboxListener; import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson; +import org.apache.james.utils.PropertiesProvider; import org.elasticsearch.client.Client; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.inject.AbstractModule; import com.google.inject.Provides; @@ -39,6 +47,8 @@ import com.google.inject.Singleton; import com.google.inject.multibindings.Multibinder; public class ElasticSearchQuotaSearcherModule extends AbstractModule { + private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchQuotaSearcherModule.class); + @Override protected void configure() { Multibinder.newSetBinder(binder(), MailboxListener.class) @@ -48,20 +58,34 @@ public class ElasticSearchQuotaSearcherModule extends AbstractModule { @Provides @Singleton - public QuotaSearcher provideSearcher(Client client, ElasticSearchConfiguration configuration) { + public QuotaSearcher provideSearcher(Client client, ElasticSearchQuotaConfiguration configuration) { return new ElasticSearchQuotaSearcher(client, configuration.getReadAliasQuotaRatioName()); } + + + @Provides + @Singleton + private ElasticSearchQuotaConfiguration getElasticSearchQuotaConfiguration(PropertiesProvider propertiesProvider) throws ConfigurationException { + try { + Configuration configuration = propertiesProvider.getConfiguration(ELASTICSEARCH_CONFIGURATION_NAME); + return ElasticSearchQuotaConfiguration.fromProperties(configuration); + } catch (FileNotFoundException e) { + LOGGER.warn("Could not find " + ELASTICSEARCH_CONFIGURATION_NAME + " configuration file. Providing a default ElasticSearchQuotaConfiguration"); + return ElasticSearchQuotaConfiguration.DEFAULT_CONFIGURATION; + } + } + @Provides @Singleton public ElasticSearchQuotaMailboxListener provideListener(Client client, @Named("AsyncExecutor") ExecutorService executor, - ElasticSearchConfiguration configuration) { + ElasticSearchQuotaConfiguration configuration) { return new ElasticSearchQuotaMailboxListener( new ElasticSearchIndexer(client, executor, - configuration.getWriteAliasMailboxName(), + configuration.getWriteAliasQuotaRatioName(), QuotaRatioElasticSearchConstants.QUOTA_RATIO_TYPE), new QuotaRatioToElasticSearchJson()); } http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java ---------------------------------------------------------------------- diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java index 54074c0..5b5b33f 100644 --- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java +++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java @@ -31,11 +31,10 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -import org.apache.james.backends.es.IndexAttachments; +import org.apache.james.backends.es.ElasticSearchConfiguration; import org.apache.james.mailbox.extractor.TextExtractor; import org.apache.james.mailbox.store.search.PDFTextExtractor; import org.apache.james.modules.TestJMAPServerModule; -import org.apache.james.backends.es.ElasticSearchConfiguration; import org.apache.james.modules.protocols.ImapGuiceProbe; import org.apache.james.util.Host; import org.apache.james.util.docker.Images; @@ -75,7 +74,6 @@ class JamesServerWithRetryConnectionTest { private ElasticSearchConfiguration getElasticSearchConfigurationForDocker() { return ElasticSearchConfiguration.builder() .addHost(Host.from(elasticSearchContainer.getHostIp(), elasticSearchContainer.getMappedPort(ELASTIC_SEARCH_PORT))) - .indexAttachment(IndexAttachments.NO) .build(); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/0cec75c3/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java index 5388cfa..2eddc4c 100644 --- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java +++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java @@ -34,7 +34,7 @@ import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; import org.apache.james.mailbox.mock.MockMailboxSession; import org.apache.james.quota.search.QuotaSearchTestSystem; import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaSearcher; -import org.apache.james.backends.es.QuotaRatioElasticSearchConstants; +import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants; import org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil; import org.apache.james.quota.search.elasticsearch.events.ElasticSearchQuotaMailboxListener; import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson; --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org