This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 70fb5d12f92024a07b73474028db92b25c29d129 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Sat Oct 12 10:45:58 2019 +0700 JAMES-2917 Factorize RoutingKey generation logic --- .../org/apache/james/backends/es/RoutingKey.java | 4 ++ .../elasticsearch/MailboxIdRoutingKeyFactory.java | 41 +++---------------- .../ElasticSearchListeningMessageSearchIndex.java | 16 ++++---- .../search/ElasticSearchSearcher.java | 10 ++++- .../ElasticSearchIntegrationTest.java | 5 ++- .../MailboxIdRoutingKeyFactoryTest.java | 47 +++++----------------- ...asticSearchListeningMessageSearchIndexTest.java | 8 ++-- .../elasticsearch/UserRoutingKeyFactory.java | 41 +++---------------- .../events/ElasticSearchQuotaMailboxListener.java | 14 +++---- ...lasticSearchQuotaSearchTestSystemExtension.java | 3 +- .../elasticsearch/UserRoutingKeyFactoryTest.java | 47 +++++----------------- .../ElasticSearchQuotaMailboxListenerTest.java | 4 +- .../host/ElasticSearchHostSystem.java | 6 ++- .../mailbox/ElasticSearchMailboxModule.java | 10 ++++- .../mailbox/ElasticSearchQuotaSearcherModule.java | 4 +- .../routes/ElasticSearchQuotaSearchExtension.java | 4 +- 16 files changed, 90 insertions(+), 174 deletions(-) diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java index 05021e5..6ce3598 100644 --- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java +++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java @@ -26,6 +26,10 @@ import org.elasticsearch.common.Strings; import com.google.common.base.Preconditions; public class RoutingKey { + public interface Factory<T> { + RoutingKey from(T t); + } + public static RoutingKey fromString(String value) { return new RoutingKey(value); } diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIdRoutingKeyFactory.java similarity index 58% copy from backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java copy to mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIdRoutingKeyFactory.java index 05021e5..56fc834 100644 --- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java +++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIdRoutingKeyFactory.java @@ -17,43 +17,14 @@ * under the License. * ****************************************************************/ -package org.apache.james.backends.es; +package org.apache.james.mailbox.elasticsearch; -import java.util.Objects; - -import org.elasticsearch.common.Strings; - -import com.google.common.base.Preconditions; - -public class RoutingKey { - public static RoutingKey fromString(String value) { - return new RoutingKey(value); - } - - - private final String value; - - private RoutingKey(String value) { - Preconditions.checkArgument(!Strings.isNullOrEmpty(value), "RoutingKey must be specified"); - this.value = value; - } - - public String asString() { - return value; - } - - @Override - public final boolean equals(Object o) { - if (o instanceof RoutingKey) { - RoutingKey that = (RoutingKey) o; - - return Objects.equals(this.value, that.value); - } - return false; - } +import org.apache.james.backends.es.RoutingKey; +import org.apache.james.mailbox.model.MailboxId; +public class MailboxIdRoutingKeyFactory implements RoutingKey.Factory<MailboxId> { @Override - public final int hashCode() { - return Objects.hash(value); + public RoutingKey from(MailboxId mailboxId) { + return RoutingKey.fromString(mailboxId.serialize()); } } 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 c695b85..7cf681a 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 @@ -75,16 +75,18 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe private final ElasticSearchIndexer elasticSearchIndexer; private final ElasticSearchSearcher searcher; private final MessageToElasticSearchJson messageToElasticSearchJson; + private final RoutingKey.Factory<MailboxId> routingKeyFactory; @Inject public ElasticSearchListeningMessageSearchIndex(MailboxSessionMapperFactory factory, @Named(MailboxElasticSearchConstants.InjectionNames.MAILBOX) ElasticSearchIndexer indexer, ElasticSearchSearcher searcher, MessageToElasticSearchJson messageToElasticSearchJson, - SessionProvider sessionProvider) { + SessionProvider sessionProvider, RoutingKey.Factory<MailboxId> routingKeyFactory) { super(factory, sessionProvider); this.elasticSearchIndexer = indexer; this.messageToElasticSearchJson = messageToElasticSearchJson; this.searcher = searcher; + this.routingKeyFactory = routingKeyFactory; } @Override @@ -142,7 +144,7 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe String jsonContent = generateIndexedJson(mailbox, message, session); - elasticSearchIndexer.index(indexIdFor(mailbox, message.getUid()), jsonContent, toRoutingKey(mailbox.getMailboxId())); + elasticSearchIndexer.index(indexIdFor(mailbox, message.getUid()), jsonContent, routingKeyFactory.from(mailbox.getMailboxId())); } private String generateIndexedJson(Mailbox mailbox, MailboxMessage message, MailboxSession session) throws JsonProcessingException { @@ -165,7 +167,7 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe .delete(expungedUids.stream() .map(uid -> indexIdFor(mailbox, uid)) .collect(Guavate.toImmutableList()), - toRoutingKey(mailbox.getMailboxId())); + routingKeyFactory.from(mailbox.getMailboxId())); } @Override @@ -175,7 +177,7 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe mailboxId.serialize()); elasticSearchIndexer - .deleteAllMatchingQuery(queryBuilder, toRoutingKey(mailboxId)); + .deleteAllMatchingQuery(queryBuilder, routingKeyFactory.from(mailboxId)); } @Override @@ -186,7 +188,7 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe .sneakyThrow()) .collect(Guavate.toImmutableList()); - elasticSearchIndexer.update(updates, toRoutingKey(mailbox.getMailboxId())); + elasticSearchIndexer.update(updates, routingKeyFactory.from(mailbox.getMailboxId())); } private UpdatedRepresentation createUpdatedDocumentPartFromUpdatedFlags(Mailbox mailbox, UpdatedFlags updatedFlags) throws JsonProcessingException { @@ -205,8 +207,4 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe LOGGER.error("No messageUid for {} in mailbox {}", searchResult.getMessageUid(), searchResult.getMailboxId()); } } - - private RoutingKey toRoutingKey(MailboxId mailboxId) { - return RoutingKey.fromString(mailboxId.serialize()); - } } diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java index 48b67e4..bd3e629 100644 --- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java +++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java @@ -26,6 +26,7 @@ import java.util.stream.Stream; import org.apache.james.backends.es.AliasName; import org.apache.james.backends.es.NodeMappingFactory; import org.apache.james.backends.es.ReadAliasName; +import org.apache.james.backends.es.RoutingKey; import org.apache.james.backends.es.search.ScrolledSearch; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants; @@ -59,16 +60,18 @@ public class ElasticSearchSearcher { private final MailboxId.Factory mailboxIdFactory; private final MessageId.Factory messageIdFactory; private final AliasName aliasName; + private final RoutingKey.Factory<MailboxId> routingKeyFactory; public ElasticSearchSearcher(RestHighLevelClient client, QueryConverter queryConverter, int size, MailboxId.Factory mailboxIdFactory, MessageId.Factory messageIdFactory, - ReadAliasName aliasName) { + ReadAliasName aliasName, RoutingKey.Factory<MailboxId> routingKeyFactory) { this.client = client; this.queryConverter = queryConverter; this.size = size; this.mailboxIdFactory = mailboxIdFactory; this.messageIdFactory = messageIdFactory; this.aliasName = aliasName; + this.routingKeyFactory = routingKeyFactory; } public Stream<MessageSearchIndex.SearchResult> search(Collection<MailboxId> mailboxIds, SearchQuery query, @@ -101,7 +104,10 @@ public class ElasticSearchSearcher { } private String[] toRoutingKeys(Collection<MailboxId> mailboxIds) { - return mailboxIds.stream().map(MailboxId::serialize).toArray(String[]::new); + return mailboxIds.stream() + .map(routingKeyFactory::from) + .map(RoutingKey::asString) + .toArray(String[]::new); } private int computeRequiredSize(Optional<Integer> limit) { 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 55fca6a..8643f1b 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 @@ -97,6 +97,7 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest elasticSearch.getDockerElasticSearch().configuration()); InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory(); + MailboxIdRoutingKeyFactory routingKeyFactory = new MailboxIdRoutingKeyFactory(); InMemoryIntegrationResources resources = InMemoryIntegrationResources.builder() .preProvisionnedFakeAuthenticator() @@ -111,9 +112,9 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest BATCH_SIZE), new ElasticSearchSearcher(client, new QueryConverter(new CriterionConverter()), SEARCH_SIZE, new InMemoryId.Factory(), messageIdFactory, - MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS), + MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS, routingKeyFactory), new MessageToElasticSearchJson(textExtractor, ZoneId.of("Europe/Paris"), IndexAttachments.YES), - preInstanciationStage.getSessionProvider())) + preInstanciationStage.getSessionProvider(), routingKeyFactory)) .noPreDeletionHooks() .storeQuotaManager() .build(); diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/MailboxIdRoutingKeyFactoryTest.java similarity index 57% copy from backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java copy to mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/MailboxIdRoutingKeyFactoryTest.java index 05021e5..b666ffa 100644 --- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java +++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/MailboxIdRoutingKeyFactoryTest.java @@ -17,43 +17,18 @@ * under the License. * ****************************************************************/ -package org.apache.james.backends.es; +package org.apache.james.mailbox.elasticsearch; -import java.util.Objects; +import static org.assertj.core.api.Assertions.assertThat; -import org.elasticsearch.common.Strings; +import org.apache.james.backends.es.RoutingKey; +import org.apache.james.mailbox.model.TestId; +import org.junit.jupiter.api.Test; -import com.google.common.base.Preconditions; - -public class RoutingKey { - public static RoutingKey fromString(String value) { - return new RoutingKey(value); - } - - - private final String value; - - private RoutingKey(String value) { - Preconditions.checkArgument(!Strings.isNullOrEmpty(value), "RoutingKey must be specified"); - this.value = value; - } - - public String asString() { - return value; - } - - @Override - public final boolean equals(Object o) { - if (o instanceof RoutingKey) { - RoutingKey that = (RoutingKey) o; - - return Objects.equals(this.value, that.value); - } - return false; - } - - @Override - public final int hashCode() { - return Objects.hash(value); +class MailboxIdRoutingKeyFactoryTest { + @Test + void fromShouldRelyOnSerializedMailboxId() { + assertThat(new MailboxIdRoutingKeyFactory().from(TestId.of(5))) + .isEqualTo(RoutingKey.fromString("5")); } -} +} \ No newline at end of file diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java index e2df49a..a126eb9 100644 --- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java +++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java @@ -38,6 +38,7 @@ import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.elasticsearch.IndexAttachments; import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants; +import org.apache.james.mailbox.elasticsearch.MailboxIdRoutingKeyFactory; import org.apache.james.mailbox.elasticsearch.MailboxIndexCreationUtil; import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson; import org.apache.james.mailbox.elasticsearch.query.CriterionConverter; @@ -160,7 +161,8 @@ public class ElasticSearchListeningMessageSearchIndexTest { ElasticSearchSearcher.DEFAULT_SEARCH_SIZE, new InMemoryId.Factory(), messageIdFactory, - MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS); + MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS, + new MailboxIdRoutingKeyFactory()); FakeAuthenticator fakeAuthenticator = new FakeAuthenticator(); fakeAuthenticator.addUser(ManagerTestProvisionner.USER, ManagerTestProvisionner.USER_PASS); @@ -170,7 +172,7 @@ public class ElasticSearchListeningMessageSearchIndexTest { elasticSearchIndexer = new ElasticSearchIndexer(client, MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS); testee = new ElasticSearchListeningMessageSearchIndex(mapperFactory, elasticSearchIndexer, elasticSearchSearcher, - messageToElasticSearchJson, sessionProvider); + messageToElasticSearchJson, sessionProvider, new MailboxIdRoutingKeyFactory()); session = sessionProvider.createSystemSession(USERNAME); mailbox = new Mailbox(MailboxPath.forUser(USERNAME, DefaultMailboxes.INBOX), MAILBOX_ID.id); @@ -236,7 +238,7 @@ public class ElasticSearchListeningMessageSearchIndexTest { IndexAttachments.YES); testee = new ElasticSearchListeningMessageSearchIndex(mapperFactory, elasticSearchIndexer, elasticSearchSearcher, - messageToElasticSearchJson, sessionProvider); + messageToElasticSearchJson, sessionProvider, new MailboxIdRoutingKeyFactory()); testee.add(session, mailbox, MESSAGE_WITH_ATTACHMENT); elasticSearch.awaitForElasticSearch(); diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/UserRoutingKeyFactory.java similarity index 58% copy from backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java copy to mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/UserRoutingKeyFactory.java index 05021e5..46abf86 100644 --- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java +++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/UserRoutingKeyFactory.java @@ -17,43 +17,14 @@ * under the License. * ****************************************************************/ -package org.apache.james.backends.es; +package org.apache.james.quota.search.elasticsearch; -import java.util.Objects; - -import org.elasticsearch.common.Strings; - -import com.google.common.base.Preconditions; - -public class RoutingKey { - public static RoutingKey fromString(String value) { - return new RoutingKey(value); - } - - - private final String value; - - private RoutingKey(String value) { - Preconditions.checkArgument(!Strings.isNullOrEmpty(value), "RoutingKey must be specified"); - this.value = value; - } - - public String asString() { - return value; - } - - @Override - public final boolean equals(Object o) { - if (o instanceof RoutingKey) { - RoutingKey that = (RoutingKey) o; - - return Objects.equals(this.value, that.value); - } - return false; - } +import org.apache.james.backends.es.RoutingKey; +import org.apache.james.core.User; +public class UserRoutingKeyFactory implements RoutingKey.Factory<User> { @Override - public final int hashCode() { - return Objects.hash(value); + public RoutingKey from(User user) { + return RoutingKey.fromString(user.asString()); } } 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 7d27e53..c03a4f8 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 @@ -42,13 +42,15 @@ public class ElasticSearchQuotaMailboxListener implements MailboxListener.GroupM private final ElasticSearchIndexer indexer; private final QuotaRatioToElasticSearchJson quotaRatioToElasticSearchJson; + private final RoutingKey.Factory<User> routingKeyFactory; @Inject - public ElasticSearchQuotaMailboxListener( - @Named(QuotaRatioElasticSearchConstants.InjectionNames.QUOTA_RATIO) ElasticSearchIndexer indexer, - QuotaRatioToElasticSearchJson quotaRatioToElasticSearchJson) { + public ElasticSearchQuotaMailboxListener(@Named(QuotaRatioElasticSearchConstants.InjectionNames.QUOTA_RATIO) ElasticSearchIndexer indexer, + QuotaRatioToElasticSearchJson quotaRatioToElasticSearchJson, + RoutingKey.Factory<User> routingKeyFactory) { this.indexer = indexer; this.quotaRatioToElasticSearchJson = quotaRatioToElasticSearchJson; + this.routingKeyFactory = routingKeyFactory; } @Override @@ -70,11 +72,7 @@ public class ElasticSearchQuotaMailboxListener implements MailboxListener.GroupM User user = event.getUser(); indexer.index(toDocumentId(user), quotaRatioToElasticSearchJson.convertToJson(event), - toRoutingKey(user)); - } - - private RoutingKey toRoutingKey(User user) { - return RoutingKey.fromString(user.asString()); + routingKeyFactory.from(user)); } private DocumentId toDocumentId(User user) { 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 bdeaf8d..9af1dc6 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 @@ -70,7 +70,8 @@ public class ElasticSearchQuotaSearchTestSystemExtension implements ParameterRes ElasticSearchQuotaMailboxListener listener = new ElasticSearchQuotaMailboxListener( new ElasticSearchIndexer(client, QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS), - new QuotaRatioToElasticSearchJson()); + new QuotaRatioToElasticSearchJson(), + new UserRoutingKeyFactory()); resources.getMailboxManager().getEventBus().register(listener); diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/UserRoutingKeyFactoryTest.java similarity index 57% copy from backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java copy to mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/UserRoutingKeyFactoryTest.java index 05021e5..c1a2102 100644 --- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java +++ b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/UserRoutingKeyFactoryTest.java @@ -17,43 +17,18 @@ * under the License. * ****************************************************************/ -package org.apache.james.backends.es; +package org.apache.james.quota.search.elasticsearch; -import java.util.Objects; +import static org.assertj.core.api.Assertions.assertThat; -import org.elasticsearch.common.Strings; +import org.apache.james.backends.es.RoutingKey; +import org.apache.james.core.User; +import org.junit.jupiter.api.Test; -import com.google.common.base.Preconditions; - -public class RoutingKey { - public static RoutingKey fromString(String value) { - return new RoutingKey(value); - } - - - private final String value; - - private RoutingKey(String value) { - Preconditions.checkArgument(!Strings.isNullOrEmpty(value), "RoutingKey must be specified"); - this.value = value; - } - - public String asString() { - return value; - } - - @Override - public final boolean equals(Object o) { - if (o instanceof RoutingKey) { - RoutingKey that = (RoutingKey) o; - - return Objects.equals(this.value, that.value); - } - return false; - } - - @Override - public final int hashCode() { - return Objects.hash(value); +class UserRoutingKeyFactoryTest { + @Test + void fromShouldRelyOnUsername() { + assertThat(new UserRoutingKeyFactory().from(User.fromUsername("bob"))) + .isEqualTo(RoutingKey.fromString("bob")); } -} +} \ No newline at end of file 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 69e55e8..9cdd817 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 @@ -37,6 +37,7 @@ import org.apache.james.mailbox.quota.QuotaFixture.Sizes; import org.apache.james.mailbox.store.event.EventFactory; import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants; import org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil; +import org.apache.james.quota.search.elasticsearch.UserRoutingKeyFactory; import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; @@ -70,7 +71,8 @@ public class ElasticSearchQuotaMailboxListenerTest { new ElasticSearchIndexer(client, QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS, BATCH_SIZE), - new QuotaRatioToElasticSearchJson()); + new QuotaRatioToElasticSearchJson(), + new UserRoutingKeyFactory()); } @After 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 87151a2..b84bc80 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 @@ -36,6 +36,7 @@ import org.apache.james.imap.processor.main.DefaultImapProcessorFactory; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.elasticsearch.IndexAttachments; import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants; +import org.apache.james.mailbox.elasticsearch.MailboxIdRoutingKeyFactory; import org.apache.james.mailbox.elasticsearch.MailboxIndexCreationUtil; import org.apache.james.mailbox.elasticsearch.events.ElasticSearchListeningMessageSearchIndex; import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson; @@ -86,6 +87,7 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem { .build()); InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory(); + MailboxIdRoutingKeyFactory routingKeyFactory = new MailboxIdRoutingKeyFactory(); InMemoryIntegrationResources resources = InMemoryIntegrationResources.builder() .authenticator(authenticator) @@ -99,9 +101,9 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem { MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS), new ElasticSearchSearcher(client, new QueryConverter(new CriterionConverter()), ElasticSearchSearcher.DEFAULT_SEARCH_SIZE, new InMemoryId.Factory(), messageIdFactory, - MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS), + MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS, routingKeyFactory), new MessageToElasticSearchJson(new DefaultTextExtractor(), ZoneId.of("Europe/Paris"), IndexAttachments.YES), - preInstanciationStage.getSessionProvider())) + preInstanciationStage.getSessionProvider(), routingKeyFactory)) .noPreDeletionHooks() .storeQuotaManager() .build(); 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 6bd4f54..bcc8148 100644 --- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java +++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java @@ -32,11 +32,13 @@ import org.apache.commons.configuration2.Configuration; import org.apache.commons.configuration2.ex.ConfigurationException; import org.apache.james.backends.es.ElasticSearchConfiguration; import org.apache.james.backends.es.ElasticSearchIndexer; +import org.apache.james.backends.es.RoutingKey; import org.apache.james.lifecycle.api.StartUpCheck; import org.apache.james.lifecycle.api.Startable; 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.MailboxIdRoutingKeyFactory; import org.apache.james.mailbox.elasticsearch.MailboxIndexCreationUtil; import org.apache.james.mailbox.elasticsearch.events.ElasticSearchListeningMessageSearchIndex; import org.apache.james.mailbox.elasticsearch.query.QueryConverter; @@ -56,6 +58,7 @@ import org.slf4j.LoggerFactory; import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.google.inject.Scopes; +import com.google.inject.TypeLiteral; import com.google.inject.multibindings.Multibinder; import com.google.inject.multibindings.ProvidesIntoSet; @@ -97,6 +100,8 @@ public class ElasticSearchMailboxModule extends AbstractModule { bind(MessageSearchIndex.class).to(ElasticSearchListeningMessageSearchIndex.class); bind(ListeningMessageSearchIndex.class).to(ElasticSearchListeningMessageSearchIndex.class); + bind(new TypeLiteral<RoutingKey.Factory<MailboxId>>() {}).to(MailboxIdRoutingKeyFactory.class); + Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class) .addBinding() .to(ElasticSearchListeningMessageSearchIndex.class); @@ -122,14 +127,15 @@ public class ElasticSearchMailboxModule extends AbstractModule { QueryConverter queryConverter, MailboxId.Factory mailboxIdFactory, MessageId.Factory messageIdFactory, - ElasticSearchMailboxConfiguration configuration) { + ElasticSearchMailboxConfiguration configuration, + RoutingKey.Factory<MailboxId> routingKeyFactory) { return new ElasticSearchSearcher( client, queryConverter, DEFAULT_SEARCH_SIZE, mailboxIdFactory, messageIdFactory, - configuration.getReadAliasMailboxName()); + configuration.getReadAliasMailboxName(), routingKeyFactory); } @Provides 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 fc98f6e..eb4f9b4 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 @@ -36,6 +36,7 @@ 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.QuotaSearchIndexCreationUtil; +import org.apache.james.quota.search.elasticsearch.UserRoutingKeyFactory; import org.apache.james.quota.search.elasticsearch.events.ElasticSearchQuotaMailboxListener; import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson; import org.apache.james.utils.InitializationOperation; @@ -111,7 +112,8 @@ public class ElasticSearchQuotaSearcherModule extends AbstractModule { return new ElasticSearchQuotaMailboxListener( new ElasticSearchIndexer(client, configuration.getWriteAliasQuotaRatioName()), - new QuotaRatioToElasticSearchJson()); + new QuotaRatioToElasticSearchJson(), + new UserRoutingKeyFactory()); } @ProvidesIntoSet 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 a469985..5cbe210 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 @@ -35,6 +35,7 @@ import org.apache.james.quota.search.QuotaSearchTestSystem; import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaSearcher; import org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants; import org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil; +import org.apache.james.quota.search.elasticsearch.UserRoutingKeyFactory; import org.apache.james.quota.search.elasticsearch.events.ElasticSearchQuotaMailboxListener; import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson; import org.apache.james.user.memory.MemoryUsersRepository; @@ -76,7 +77,8 @@ public class ElasticSearchQuotaSearchExtension implements ParameterResolver, Bef ElasticSearchQuotaMailboxListener listener = new ElasticSearchQuotaMailboxListener( new ElasticSearchIndexer(client, QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS), - new QuotaRatioToElasticSearchJson()); + new QuotaRatioToElasticSearchJson(), + new UserRoutingKeyFactory()); resources.getMailboxManager().getEventBus().register(listener); --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org