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]

Reply via email to