This is an automated email from the ASF dual-hosted git repository.
hqtran pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
The following commit(s) were added to refs/heads/master by this push:
new bbed3f7e47 [BUILD TIME] james-server-webadmin-mailbox: use lucene
instead of OpenSearch
bbed3f7e47 is described below
commit bbed3f7e4788515b67a2ac2cb68c988e2b72e3b7
Author: Benoit TELLIER <[email protected]>
AuthorDate: Wed Sep 17 14:51:37 2025 +0200
[BUILD TIME] james-server-webadmin-mailbox: use lucene instead of OpenSearch
---
.../lucene/search/LuceneMessageSearchIndex.java | 13 ++-
server/protocols/webadmin/webadmin-mailbox/pom.xml | 17 +--
.../james/webadmin/routes/MailboxesRoutesTest.java | 80 +++-----------
.../routes/OpenSearchQuotaSearchExtension.java | 123 ---------------------
.../webadmin/routes/UserMailboxesRoutesTest.java | 51 ++-------
.../james/webadmin/routes/UserQuotaRoutesTest.java | 6 -
6 files changed, 34 insertions(+), 256 deletions(-)
diff --git
a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
index ab9de491f9..c16637ab2f 100644
---
a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
+++
b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
@@ -749,11 +749,14 @@ public class LuceneMessageSearchIndex extends
ListeningMessageSearchIndex {
@Override
public Mono<Void> add(MailboxSession session, Mailbox mailbox,
MailboxMessage membership) {
- return indexableDocument.createMessageDocument(membership, session)
- .flatMap(document -> Mono.fromRunnable(Throwing.runnable(() -> {
- writer.addDocument(document);
-
writer.addDocument(indexableDocument.createFlagsDocument(membership));
- })))
+ return Mono.fromCallable(() -> retrieveFlags(mailbox,
membership.getUid()))
+ .filter(flags -> !new Flags().equals(flags))
+ .flatMap(any -> Mono.fromRunnable(Throwing.runnable(() ->
update(mailbox.getMailboxId(), membership.getUid(), membership.createFlags()))))
+ .switchIfEmpty(Mono.defer(() ->
indexableDocument.createMessageDocument(membership, session)
+ .flatMap(document -> Mono.fromRunnable(Throwing.runnable(() ->
{
+ writer.addDocument(document);
+
writer.addDocument(indexableDocument.createFlagsDocument(membership));
+ })))))
.then();
}
diff --git a/server/protocols/webadmin/webadmin-mailbox/pom.xml
b/server/protocols/webadmin/webadmin-mailbox/pom.xml
index d5b34d981f..1220225f13 100644
--- a/server/protocols/webadmin/webadmin-mailbox/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailbox/pom.xml
@@ -33,12 +33,6 @@
<name>Apache James :: Server :: Web Admin :: mailbox</name>
<dependencies>
- <dependency>
- <groupId>${james.groupId}</groupId>
- <artifactId>apache-james-backends-opensearch</artifactId>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>apache-james-mailbox-api</artifactId>
@@ -55,18 +49,18 @@
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
- <artifactId>apache-james-mailbox-memory</artifactId>
+ <artifactId>apache-james-mailbox-lucene</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>apache-james-mailbox-memory</artifactId>
- <type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
- <artifactId>apache-james-mailbox-opensearch</artifactId>
+ <artifactId>apache-james-mailbox-memory</artifactId>
+ <type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
@@ -79,11 +73,6 @@
<type>test-jar</type>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>${james.groupId}</groupId>
-
<artifactId>apache-james-mailbox-quota-search-opensearch</artifactId>
- <scope>test</scope>
- </dependency>
<dependency>
<groupId>${james.groupId}</groupId>
<artifactId>apache-james-mailbox-quota-search-scanning</artifactId>
diff --git
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java
index bfab64537a..66049d764c 100644
---
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java
+++
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java
@@ -31,23 +31,17 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import java.io.IOException;
import java.nio.charset.StandardCharsets;
-import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.List;
import jakarta.mail.Flags;
-import org.apache.james.backends.opensearch.DockerOpenSearchExtension;
-import org.apache.james.backends.opensearch.OpenSearchIndexer;
-import org.apache.james.backends.opensearch.ReactorOpenSearchClient;
-import org.apache.james.backends.opensearch.WriteAliasName;
import org.apache.james.core.Username;
import org.apache.james.json.DTOConverter;
+import org.apache.james.mailbox.FlagsBuilder;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageIdManager;
import org.apache.james.mailbox.MessageManager;
@@ -57,6 +51,7 @@ import org.apache.james.mailbox.inmemory.InMemoryId;
import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
import org.apache.james.mailbox.inmemory.InMemoryMessageId;
import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
+import org.apache.james.mailbox.lucene.search.LuceneMessageSearchIndex;
import org.apache.james.mailbox.model.ByteContent;
import org.apache.james.mailbox.model.ComposedMessageId;
import org.apache.james.mailbox.model.FetchGroup;
@@ -66,23 +61,11 @@ import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageResult;
import org.apache.james.mailbox.model.ThreadId;
import org.apache.james.mailbox.model.UpdatedFlags;
-import org.apache.james.mailbox.opensearch.IndexAttachments;
-import org.apache.james.mailbox.opensearch.IndexHeaders;
-import org.apache.james.mailbox.opensearch.MailboxIdRoutingKeyFactory;
-import org.apache.james.mailbox.opensearch.MailboxIndexCreationUtil;
-import org.apache.james.mailbox.opensearch.MailboxOpenSearchConstants;
-import org.apache.james.mailbox.opensearch.OpenSearchMailboxConfiguration;
-import
org.apache.james.mailbox.opensearch.events.OpenSearchListeningMessageSearchIndex;
-import org.apache.james.mailbox.opensearch.json.MessageToOpenSearchJson;
-import org.apache.james.mailbox.opensearch.query.DefaultCriterionConverter;
-import org.apache.james.mailbox.opensearch.query.QueryConverter;
-import org.apache.james.mailbox.opensearch.search.OpenSearchSearcher;
import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
-import org.apache.james.metrics.tests.RecordingMetricFactory;
import org.apache.james.task.Hostname;
import org.apache.james.task.MemoryTaskManager;
import org.apache.james.webadmin.WebAdminServer;
@@ -93,6 +76,7 @@ import
org.apache.james.webadmin.dto.WebAdminSingleMailboxReindexingTaskAddition
import org.apache.james.webadmin.service.PreviousReIndexingService;
import org.apache.james.webadmin.utils.ErrorResponder;
import org.apache.james.webadmin.utils.JsonTransformer;
+import org.apache.lucene.store.ByteBuffersDirectory;
import org.apache.mailbox.tools.indexer.FullReindexingTask;
import org.apache.mailbox.tools.indexer.ReIndexerImpl;
import org.apache.mailbox.tools.indexer.ReIndexerPerformer;
@@ -101,16 +85,14 @@ import
org.apache.mailbox.tools.indexer.SingleMessageReindexingTask;
import
org.apache.mailbox.tools.indexer.SingleMessageReindexingTaskAdditionalInformationDTO;
import org.eclipse.jetty.http.HttpStatus;
import org.hamcrest.Matchers;
-import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
import org.mockito.ArgumentCaptor;
+import com.github.fge.lambdas.Throwing;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
@@ -120,53 +102,25 @@ import reactor.core.publisher.Mono;
class MailboxesRoutesTest {
static final Username USERNAME = Username.of("[email protected]");
static final MailboxPath INBOX = MailboxPath.inbox(USERNAME);
- static final int SEARCH_SIZE = 1;
-
- @RegisterExtension
- static DockerOpenSearchExtension openSearch = new
DockerOpenSearchExtension(
- new
DockerOpenSearchExtension.DeleteAllIndexDocumentsCleanupStrategy(new
WriteAliasName("mailboxWriteAlias")));
-
- static ReactorOpenSearchClient client;
WebAdminServer webAdminServer;
ListeningMessageSearchIndex searchIndex;
InMemoryMailboxManager mailboxManager;
MessageIdManager messageIdManager;
MemoryTaskManager taskManager;
- @BeforeAll
- static void setUpAll() {
- client = openSearch.getDockerOpenSearch().clientProvider().get();
- MailboxIndexCreationUtil.prepareDefaultClient(
- client,
- openSearch.getDockerOpenSearch().configuration());
- }
-
- @AfterAll
- static void tearDownAll() throws IOException {
- client.close();
- }
@BeforeEach
void beforeEach() {
- InMemoryMessageId.Factory messageIdFactory = new
InMemoryMessageId.Factory();
- MailboxIdRoutingKeyFactory routingKeyFactory = new
MailboxIdRoutingKeyFactory();
-
InMemoryIntegrationResources resources =
InMemoryIntegrationResources.builder()
.preProvisionnedFakeAuthenticator()
.fakeAuthorizator()
.inVmEventBus()
.defaultAnnotationLimits()
.defaultMessageParser()
- .listeningSearchIndex(preInstanciationStage -> new
OpenSearchListeningMessageSearchIndex(
- preInstanciationStage.getMapperFactory(),
- ImmutableSet.of(),
- new OpenSearchIndexer(client,
- MailboxOpenSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS),
- new OpenSearchSearcher(client, new QueryConverter(new
DefaultCriterionConverter()), SEARCH_SIZE,
- MailboxOpenSearchConstants.DEFAULT_MAILBOX_READ_ALIAS,
routingKeyFactory),
- new MessageToOpenSearchJson(new DefaultTextExtractor(),
ZoneId.of("Europe/Paris"), IndexAttachments.YES, IndexHeaders.YES),
- preInstanciationStage.getSessionProvider(), routingKeyFactory,
messageIdFactory, OpenSearchMailboxConfiguration.builder().build(), new
RecordingMetricFactory(),
- ImmutableSet.of()))
+ .listeningSearchIndex(Throwing.function(preInstanciationStage ->
new LuceneMessageSearchIndex(
+ preInstanciationStage.getMapperFactory(), new
InMemoryId.Factory(), new ByteBuffersDirectory(),
+ new InMemoryMessageId.Factory(),
+ preInstanciationStage.getSessionProvider(), new
DefaultTextExtractor())))
.noPreDeletionHooks()
.storeQuotaManager()
.build();
@@ -512,6 +466,7 @@ class MailboxesRoutesTest {
MessageManager.AppendCommand.builder().build("header:
value\r\n\r\nbody"),
systemSession)
.getId();
+ searchIndex.postReindexing();
Flags initialFlags = searchIndex.retrieveIndexedFlags(mailbox,
result.getUid()).block();
@@ -527,6 +482,7 @@ class MailboxesRoutesTest {
// We update on the searchIndex level to try to create
inconsistencies
searchIndex.update(systemSession, mailbox.getMailboxId(),
ImmutableList.of(updatedFlags)).block();
+ searchIndex.postReindexing();
String taskId = with()
.post("/mailboxes?task=reIndex&mode=fixOutdated")
@@ -537,9 +493,10 @@ class MailboxesRoutesTest {
.basePath(TasksRoutes.BASE)
.when()
.get(taskId + "/await");
+ searchIndex.postReindexing();
assertThat(searchIndex.retrieveIndexedFlags(mailbox,
result.getUid()).block())
- .isEqualTo(initialFlags);
+ .isEqualTo(new
FlagsBuilder().add(initialFlags).add(Flags.Flag.RECENT).build());
}
@Test
@@ -705,9 +662,7 @@ class MailboxesRoutesTest {
verify(searchIndex).deleteAll(any(MailboxSession.class),
mailboxIdCaptor.capture());
verify(searchIndex).add(any(MailboxSession.class),
mailboxCaptor2.capture(), messageCaptor.capture());
- verify(searchIndex).add(any(MailboxSession.class),
mailboxCaptor2.capture(), messageCaptor.capture(), any());
verify(searchIndex).postReindexing();
- verifyNoMoreInteractions(searchIndex);
assertThat(mailboxIdCaptor.getValue()).matches(capturedMailboxId ->
capturedMailboxId.equals(mailboxId));
assertThat(mailboxCaptor2.getValue()).matches(mailbox ->
mailbox.getMailboxId().equals(mailboxId));
@@ -995,6 +950,7 @@ class MailboxesRoutesTest {
MessageManager.AppendCommand.builder().build("header:
value\r\n\r\nbody"),
systemSession)
.getId();
+ searchIndex.postReindexing();
Flags initialFlags = searchIndex.retrieveIndexedFlags(mailbox,
result.getUid()).block();
@@ -1010,6 +966,7 @@ class MailboxesRoutesTest {
// We update on the searchIndex level to try to create
inconsistencies
searchIndex.update(systemSession, mailbox.getMailboxId(),
ImmutableList.of(updatedFlags)).block();
+ searchIndex.postReindexing();
String taskId = with()
.queryParam("task", "reIndex")
@@ -1022,9 +979,10 @@ class MailboxesRoutesTest {
.basePath(TasksRoutes.BASE)
.when()
.get(taskId + "/await");
+ searchIndex.postReindexing();
assertThat(searchIndex.retrieveIndexedFlags(mailbox,
result.getUid()).block())
- .isEqualTo(initialFlags);
+ .isEqualTo(new
FlagsBuilder().add(initialFlags).add(Flags.Flag.RECENT).build());
}
@Test
@@ -1130,9 +1088,7 @@ class MailboxesRoutesTest {
verify(searchIndex).deleteAll(any(MailboxSession.class),
mailboxIdCaptor.capture());
verify(searchIndex).add(any(MailboxSession.class),
mailboxCaptor2.capture(), messageCaptor.capture());
- verify(searchIndex).add(any(MailboxSession.class),
mailboxCaptor2.capture(), messageCaptor.capture(), any());
verify(searchIndex).postReindexing();
- verifyNoMoreInteractions(searchIndex);
assertThat(mailboxIdCaptor.getValue()).matches(capturedMailboxId ->
capturedMailboxId.equals(mailboxId));
assertThat(mailboxCaptor2.getValue()).matches(mailbox ->
mailbox.getMailboxId().equals(mailboxId));
@@ -1297,8 +1253,6 @@ class MailboxesRoutesTest {
ArgumentCaptor<Mailbox> mailboxCaptor =
ArgumentCaptor.forClass(Mailbox.class);
verify(searchIndex).add(any(MailboxSession.class),
mailboxCaptor.capture(), messageCaptor.capture());
- verify(searchIndex).add(any(MailboxSession.class),
mailboxCaptor.capture(), messageCaptor.capture(), any());
- verifyNoMoreInteractions(searchIndex);
assertThat(mailboxCaptor.getValue()).matches(mailbox ->
mailbox.getMailboxId().equals(mailboxId));
assertThat(messageCaptor.getValue()).matches(message ->
message.getMailboxId().equals(mailboxId)
@@ -1629,9 +1583,7 @@ class MailboxesRoutesTest {
ArgumentCaptor<MailboxMessage> messageCaptor =
ArgumentCaptor.forClass(MailboxMessage.class);
ArgumentCaptor<Mailbox> mailboxCaptor =
ArgumentCaptor.forClass(Mailbox.class);
verify(searchIndex).add(any(MailboxSession.class),
mailboxCaptor.capture(), messageCaptor.capture());
- verify(searchIndex).add(any(MailboxSession.class),
mailboxCaptor.capture(), messageCaptor.capture(), any());
verify(searchIndex).postReindexing();
- verifyNoMoreInteractions(searchIndex);
assertThat(mailboxCaptor.getValue()).matches(mailbox ->
mailbox.getMailboxId().equals(mailboxId));
assertThat(messageCaptor.getValue()).matches(message ->
message.getMailboxId().equals(mailboxId)
diff --git
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/OpenSearchQuotaSearchExtension.java
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/OpenSearchQuotaSearchExtension.java
deleted file mode 100644
index 501e61384e..0000000000
---
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/OpenSearchQuotaSearchExtension.java
+++ /dev/null
@@ -1,123 +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.webadmin.routes;
-
-import static org.mockito.Mockito.mock;
-
-import java.io.IOException;
-
-import org.apache.james.backends.opensearch.DockerOpenSearch;
-import org.apache.james.backends.opensearch.DockerOpenSearchSingleton;
-import org.apache.james.backends.opensearch.OpenSearchConfiguration;
-import org.apache.james.backends.opensearch.OpenSearchIndexer;
-import org.apache.james.backends.opensearch.ReactorOpenSearchClient;
-import org.apache.james.dnsservice.api.DNSService;
-import org.apache.james.domainlist.lib.DomainListConfiguration;
-import org.apache.james.domainlist.memory.MemoryDomainList;
-import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
-import org.apache.james.mailbox.store.quota.QuotaComponents;
-import org.apache.james.quota.search.QuotaSearchTestSystem;
-import org.apache.james.quota.search.opensearch.OpenSearchQuotaSearcher;
-import org.apache.james.quota.search.opensearch.QuotaRatioOpenSearchConstants;
-import org.apache.james.quota.search.opensearch.QuotaSearchIndexCreationUtil;
-import org.apache.james.quota.search.opensearch.UserRoutingKeyFactory;
-import
org.apache.james.quota.search.opensearch.events.OpenSearchQuotaMailboxListener;
-import
org.apache.james.quota.search.opensearch.json.QuotaRatioToOpenSearchJson;
-import org.apache.james.user.memory.MemoryUsersRepository;
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.ParameterContext;
-import org.junit.jupiter.api.extension.ParameterResolutionException;
-import org.junit.jupiter.api.extension.ParameterResolver;
-import org.junit.rules.TemporaryFolder;
-
-public class OpenSearchQuotaSearchExtension implements ParameterResolver,
BeforeEachCallback, AfterEachCallback {
-
- private final DockerOpenSearch elasticSearch =
DockerOpenSearchSingleton.INSTANCE;
- private WebAdminQuotaSearchTestSystem restQuotaSearchTestSystem;
- private TemporaryFolder temporaryFolder = new TemporaryFolder();
- private ReactorOpenSearchClient client;
-
- @Override
- public void beforeEach(ExtensionContext context) {
- try {
- temporaryFolder.create();
- elasticSearch.start();
-
- client = QuotaSearchIndexCreationUtil.prepareDefaultClient(
- elasticSearch.clientProvider().get(),
- OpenSearchConfiguration.builder()
- .addHost(elasticSearch.getHttpHost())
- .build());
-
- InMemoryIntegrationResources resources =
InMemoryIntegrationResources.defaultResources();
-
-
- DNSService dnsService = mock(DNSService.class);
- MemoryDomainList domainList = new MemoryDomainList(dnsService);
- domainList.configure(DomainListConfiguration.DEFAULT);
- MemoryUsersRepository usersRepository =
MemoryUsersRepository.withVirtualHosting(domainList);
-
- OpenSearchQuotaMailboxListener listener = new
OpenSearchQuotaMailboxListener(
- new OpenSearchIndexer(client,
QuotaRatioOpenSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS),
- new
QuotaRatioToOpenSearchJson(resources.getQuotaRootResolver()),
- new UserRoutingKeyFactory(), resources.getQuotaRootResolver());
-
- resources.getMailboxManager().getEventBus().register(listener);
-
- QuotaComponents quotaComponents =
resources.getMailboxManager().getQuotaComponents();
-
- QuotaSearchTestSystem quotaSearchTestSystem = new
QuotaSearchTestSystem(
- quotaComponents.getMaxQuotaManager(),
- resources.getMailboxManager(),
- quotaComponents.getQuotaManager(),
- resources.getDefaultUserQuotaRootResolver(),
- new OpenSearchQuotaSearcher(client,
-
QuotaRatioOpenSearchConstants.DEFAULT_QUOTA_RATIO_READ_ALIAS),
- usersRepository,
- domainList,
- resources.getCurrentQuotaManager(),
- elasticSearch::flushIndices);
-
- restQuotaSearchTestSystem = new
WebAdminQuotaSearchTestSystem(quotaSearchTestSystem);
- } catch (Exception e) {
- throw new ParameterResolutionException("Error while resolving
parameter", e);
- }
- }
-
- @Override
- public void afterEach(ExtensionContext context) throws IOException {
- restQuotaSearchTestSystem.getWebAdminServer().destroy();
- client.close();
- elasticSearch.cleanUpData();
- temporaryFolder.delete();
- }
-
- @Override
- public boolean supportsParameter(ParameterContext parameterContext,
ExtensionContext extensionContext) throws ParameterResolutionException {
- return (parameterContext.getParameter().getType() ==
WebAdminQuotaSearchTestSystem.class);
- }
-
- @Override
- public Object resolveParameter(ParameterContext parameterContext,
ExtensionContext extensionContext) throws ParameterResolutionException {
- return restQuotaSearchTestSystem;
- }
-}
diff --git
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
index 7e5c8595d8..b6f35e29f3 100644
---
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
+++
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
@@ -42,12 +42,10 @@ import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
-import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.List;
@@ -56,10 +54,6 @@ import java.util.stream.IntStream;
import jakarta.mail.Flags;
-import org.apache.james.backends.opensearch.DockerOpenSearchExtension;
-import org.apache.james.backends.opensearch.OpenSearchIndexer;
-import org.apache.james.backends.opensearch.ReactorOpenSearchClient;
-import org.apache.james.backends.opensearch.WriteAliasName;
import org.apache.james.core.Username;
import org.apache.james.json.DTOConverter;
import org.apache.james.mailbox.MailboxManager;
@@ -76,6 +70,7 @@ import org.apache.james.mailbox.inmemory.InMemoryId;
import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
import org.apache.james.mailbox.inmemory.InMemoryMessageId;
import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
+import org.apache.james.mailbox.lucene.search.LuceneMessageSearchIndex;
import org.apache.james.mailbox.model.ByteContent;
import org.apache.james.mailbox.model.ComposedMessageId;
import org.apache.james.mailbox.model.FetchGroup;
@@ -90,24 +85,12 @@ import org.apache.james.mailbox.model.ThreadId;
import org.apache.james.mailbox.model.UidValidity;
import org.apache.james.mailbox.model.UpdatedFlags;
import org.apache.james.mailbox.model.search.MailboxQuery;
-import org.apache.james.mailbox.opensearch.IndexAttachments;
-import org.apache.james.mailbox.opensearch.IndexHeaders;
-import org.apache.james.mailbox.opensearch.MailboxIdRoutingKeyFactory;
-import org.apache.james.mailbox.opensearch.MailboxIndexCreationUtil;
-import org.apache.james.mailbox.opensearch.MailboxOpenSearchConstants;
-import org.apache.james.mailbox.opensearch.OpenSearchMailboxConfiguration;
-import
org.apache.james.mailbox.opensearch.events.OpenSearchListeningMessageSearchIndex;
-import org.apache.james.mailbox.opensearch.json.MessageToOpenSearchJson;
-import org.apache.james.mailbox.opensearch.query.DefaultCriterionConverter;
-import org.apache.james.mailbox.opensearch.query.QueryConverter;
-import org.apache.james.mailbox.opensearch.search.OpenSearchSearcher;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
-import org.apache.james.metrics.tests.RecordingMetricFactory;
import org.apache.james.task.Hostname;
import org.apache.james.task.MemoryTaskManager;
import org.apache.james.user.api.UsersRepository;
@@ -119,6 +102,7 @@ import
org.apache.james.webadmin.service.ClearMailboxContentTask;
import
org.apache.james.webadmin.service.ClearMailboxContentTaskAdditionalInformationDTO;
import org.apache.james.webadmin.service.UserMailboxesService;
import org.apache.james.webadmin.utils.JsonTransformer;
+import org.apache.lucene.store.ByteBuffersDirectory;
import org.apache.mailbox.tools.indexer.ReIndexerImpl;
import org.apache.mailbox.tools.indexer.ReIndexerPerformer;
import org.apache.mailbox.tools.indexer.UserReindexingTask;
@@ -128,12 +112,12 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.github.fge.lambdas.Throwing;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
@@ -1488,41 +1472,22 @@ class UserMailboxesRoutesTest {
@Nested
class UserReIndexing {
- static final int SEARCH_SIZE = 1;
-
- @RegisterExtension
- DockerOpenSearchExtension openSearch = new DockerOpenSearchExtension(
- new
DockerOpenSearchExtension.DeleteAllIndexDocumentsCleanupStrategy(new
WriteAliasName("mailboxWriteAlias")));
-
private InMemoryMailboxManager mailboxManager;
private ListeningMessageSearchIndex searchIndex;
MessageIdManager messageIdManager;
@BeforeEach
void setUp() throws Exception {
- ReactorOpenSearchClient client =
MailboxIndexCreationUtil.prepareDefaultClient(
- openSearch.getDockerOpenSearch().clientProvider().get(),
- openSearch.getDockerOpenSearch().configuration());
-
- InMemoryMessageId.Factory messageIdFactory = new
InMemoryMessageId.Factory();
- MailboxIdRoutingKeyFactory routingKeyFactory = new
MailboxIdRoutingKeyFactory();
-
InMemoryIntegrationResources resources =
InMemoryIntegrationResources.builder()
.preProvisionnedFakeAuthenticator()
.fakeAuthorizator()
.inVmEventBus()
.defaultAnnotationLimits()
.defaultMessageParser()
- .listeningSearchIndex(preInstanciationStage -> new
OpenSearchListeningMessageSearchIndex(
- preInstanciationStage.getMapperFactory(),
- ImmutableSet.of(),
- new OpenSearchIndexer(client,
-
MailboxOpenSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS),
- new OpenSearchSearcher(client, new QueryConverter(new
DefaultCriterionConverter()), SEARCH_SIZE,
- MailboxOpenSearchConstants.DEFAULT_MAILBOX_READ_ALIAS,
routingKeyFactory),
- new MessageToOpenSearchJson(new DefaultTextExtractor(),
ZoneId.of("Europe/Paris"), IndexAttachments.YES, IndexHeaders.YES),
- preInstanciationStage.getSessionProvider(),
routingKeyFactory, messageIdFactory,
OpenSearchMailboxConfiguration.builder().build(), new RecordingMetricFactory(),
- ImmutableSet.of()))
+ .listeningSearchIndex(Throwing.function(preInstanciationStage
-> new LuceneMessageSearchIndex(
+ preInstanciationStage.getMapperFactory(), new
InMemoryId.Factory(), new ByteBuffersDirectory(),
+ new InMemoryMessageId.Factory(),
+ preInstanciationStage.getSessionProvider(), new
DefaultTextExtractor())))
.noPreDeletionHooks()
.storeQuotaManager()
.build();
@@ -2072,9 +2037,7 @@ class UserMailboxesRoutesTest {
verify(searchIndex).deleteAll(any(MailboxSession.class),
mailboxIdCaptor.capture());
verify(searchIndex).add(any(MailboxSession.class),
mailboxCaptor2.capture(), messageCaptor.capture());
- verify(searchIndex).add(any(MailboxSession.class),
mailboxCaptor2.capture(), messageCaptor.capture(), any());
verify(searchIndex).postReindexing();
- verifyNoMoreInteractions(searchIndex);
assertThat(mailboxIdCaptor.getValue()).matches(capturedMailboxId ->
capturedMailboxId.equals(mailboxId));
assertThat(mailboxCaptor2.getValue()).matches(mailbox ->
mailbox.getMailboxId().equals(mailboxId));
diff --git
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
index fe9efbf06b..68204c47cc 100644
---
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
+++
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
@@ -497,12 +497,6 @@ class UserQuotaRoutesTest {
}
- @Nested
- @ExtendWith(OpenSearchQuotaSearchExtension.class)
- class OpenSearchGetUsersQuotaRouteTest implements
GetUsersQuotaRouteContract {
-
- }
-
@Nested
@ExtendWith(ScanningQuotaSearchExtension.class)
class GetCount {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]