You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/11/01 10:51:27 UTC
[james-project] 06/06: JAMES-2917 Factorize RoutingKey generation
logic
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 <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org