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


The following commit(s) were added to refs/heads/master by this push:
     new 9558694065 Explicit commit after running reindex (#2381)
9558694065 is described below

commit 9558694065271df5aac612dbc9e5ad597082a1f8
Author: Wojtek <[email protected]>
AuthorDate: Tue Aug 27 10:52:55 2024 +0200

    Explicit commit after running reindex (#2381)
    
    * initial work on explicit commit after reindex
    * Fix test by adding missing assertion about additional call to message 
search index
    * Fix more test by adding missing assertion about additional call to 
message search index  [2]
---
 .../james/mailbox/lucene/search/LuceneMessageSearchIndex.java    | 9 +++++++++
 .../opensearch/events/DisabledListeningMessageSearchIndex.java   | 5 +++++
 .../opensearch/events/OpenSearchListeningMessageSearchIndex.java | 5 +++++
 .../james/mailbox/store/search/LazyMessageSearchIndex.java       | 5 +++++
 .../james/mailbox/store/search/ListeningMessageSearchIndex.java  | 2 ++
 .../org/apache/mailbox/tools/indexer/ReIndexerPerformer.java     | 1 +
 .../apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java | 1 +
 .../java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java | 6 ++++++
 .../src/main/java/org/apache/james/FakeMessageSearchIndex.java   | 5 +++++
 .../src/main/java/org/apache/james/SearchModuleChooser.java      | 5 +++++
 .../org/apache/james/webadmin/routes/MailboxesRoutesTest.java    | 3 +++
 .../apache/james/webadmin/routes/UserMailboxesRoutesTest.java    | 1 +
 12 files changed, 48 insertions(+)

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 8aac44ebe7..265006c8f8 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
@@ -1357,6 +1357,15 @@ public class LuceneMessageSearchIndex extends 
ListeningMessageSearchIndex {
         writer.commit();
     }
 
+    @Override
+    public void postReindexing() {
+        try {
+            commit();
+        } catch (IOException e) {
+            throw new RuntimeException("Error while commiting to index", e);
+        }
+    }
+
     @Override
     public Mono<Flags> retrieveIndexedFlags(Mailbox mailbox, MessageUid uid) {
         return Mono.fromCallable(() -> retrieveFlags(mailbox, uid));
diff --git 
a/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/events/DisabledListeningMessageSearchIndex.java
 
b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/events/DisabledListeningMessageSearchIndex.java
index 96ec62ac91..c6fcc023cb 100644
--- 
a/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/events/DisabledListeningMessageSearchIndex.java
+++ 
b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/events/DisabledListeningMessageSearchIndex.java
@@ -73,6 +73,11 @@ public class DisabledListeningMessageSearchIndex extends 
ListeningMessageSearchI
         this.factory = factory;
     }
 
+    @Override
+    public void postReindexing() {
+        // do nothing
+    }
+
     @Override
     public boolean isHandling(Event event) {
         return INTERESTING_EVENTS.contains(event.getClass());
diff --git 
a/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/events/OpenSearchListeningMessageSearchIndex.java
 
b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/events/OpenSearchListeningMessageSearchIndex.java
index 1dbc729adc..547245de05 100644
--- 
a/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/events/OpenSearchListeningMessageSearchIndex.java
+++ 
b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/events/OpenSearchListeningMessageSearchIndex.java
@@ -273,6 +273,11 @@ public class OpenSearchListeningMessageSearchIndex extends 
ListeningMessageSearc
             SearchCapabilities.PartialEmailMatch);
     }
 
+    @Override
+    public void postReindexing() {
+        // no need to explicitly commit after reindexing
+    }
+
     @Override
     public Mono<Void> reactiveEvent(Event event) {
         MailboxSession systemSession = 
sessionProvider.createSystemSession(event.getUsername());
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
index 5dd9638b45..2f71a4969a 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
@@ -104,6 +104,11 @@ public class LazyMessageSearchIndex extends 
ListeningMessageSearchIndex {
         return index.deleteAll(session, mailboxId);
     }
 
+    @Override
+    public void postReindexing() {
+        index.postReindexing();
+    }
+
     /**
      * Lazy index the mailbox on first search request if it was not indexed 
before. After indexing is done it delegate the search request to the wrapped
      * {@link MessageSearchIndex}. Be aware that concurrent search requests 
are blocked on the same "not-yet-indexed" mailbox till it the index process was 
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
index b2f1e3a174..6c7d7f1fde 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
@@ -61,6 +61,8 @@ import reactor.core.scheduler.Schedulers;
 public abstract class ListeningMessageSearchIndex implements 
MessageSearchIndex, EventListener.ReactiveGroupEventListener {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(ListeningMessageSearchIndex.class);
 
+    public abstract void postReindexing();
+
     public interface SearchOverride {
         boolean applicable(SearchQuery searchQuery, MailboxSession session);
 
diff --git 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java
 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java
index 2a2472e0e4..35d75ea656 100644
--- 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java
+++ 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java
@@ -295,6 +295,7 @@ public class ReIndexerPerformer {
                 .per(Duration.ofSeconds(1))
                 .forOperation(entry -> reIndex(entry, reIndexingContext, 
runningOptions)))
             .reduce(Task::combine)
+            .doFinally(signalType -> messageSearchIndex.postReindexing())
             .switchIfEmpty(Mono.just(Result.COMPLETED));
     }
 
diff --git 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java
 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java
index 6d5f260c51..d0ffe3b4e8 100644
--- 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java
+++ 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java
@@ -114,6 +114,7 @@ public class CassandraReIndexerImplTest {
         verify(messageSearchIndex).deleteAll(any(MailboxSession.class), 
any(MailboxId.class));
         verify(messageSearchIndex, times(threadCount * operationCount))
             .add(any(MailboxSession.class), 
any(Mailbox.class),any(MailboxMessage.class));
+        verify(messageSearchIndex).postReindexing();
         verifyNoMoreInteractions(messageSearchIndex);
     }
 
diff --git 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
index dc9088a786..913dff1e84 100644
--- 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
+++ 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
@@ -87,6 +87,7 @@ public class ReIndexerImplTest {
 
         verify(messageSearchIndex).deleteAll(any(MailboxSession.class), 
mailboxCaptor1.capture());
         verify(messageSearchIndex).add(any(MailboxSession.class), 
mailboxCaptor2.capture(), messageCaptor.capture());
+        verify(messageSearchIndex).postReindexing();
         verifyNoMoreInteractions(messageSearchIndex);
 
         assertThat(mailboxCaptor1.getValue()).satisfies(capturedMailboxId -> 
assertThat(capturedMailboxId).isEqualTo(mailboxId));
@@ -113,6 +114,7 @@ public class ReIndexerImplTest {
 
         verify(messageSearchIndex).deleteAll(any(MailboxSession.class), 
mailboxCaptor1.capture());
         verify(messageSearchIndex).add(any(MailboxSession.class), 
mailboxCaptor2.capture(), messageCaptor.capture());
+        verify(messageSearchIndex).postReindexing();
         verifyNoMoreInteractions(messageSearchIndex);
 
         assertThat(mailboxCaptor1.getValue()).satisfies(capturedMailboxId -> 
assertThat(capturedMailboxId).isEqualTo(mailboxId));
@@ -139,6 +141,7 @@ public class ReIndexerImplTest {
 
         verify(messageSearchIndex).deleteAll(any(MailboxSession.class), 
mailboxCaptor1.capture());
         verify(messageSearchIndex).add(any(MailboxSession.class), 
mailboxCaptor2.capture(), messageCaptor.capture());
+        verify(messageSearchIndex).postReindexing();
         verifyNoMoreInteractions(messageSearchIndex);
 
         assertThat(mailboxCaptor1.getValue()).satisfies(capturedMailboxId -> 
assertThat(capturedMailboxId).isEqualTo(mailboxId));
@@ -231,6 +234,7 @@ public class ReIndexerImplTest {
 
         verify(messageSearchIndex).deleteAll(any(MailboxSession.class), 
mailboxIdCaptor.capture());
         verify(messageSearchIndex).add(any(MailboxSession.class), 
mailboxCaptor.capture(), messageCaptor.capture());
+        verify(messageSearchIndex).postReindexing();
         verifyNoMoreInteractions(messageSearchIndex);
 
         assertThat(mailboxCaptor.getValue()).satisfies(mailbox -> 
assertThat(mailbox.getMailboxId()).isEqualTo(mailboxId));
@@ -262,6 +266,7 @@ public class ReIndexerImplTest {
 
         verify(messageSearchIndex).retrieveIndexedFlags(any(), any());
         verify(messageSearchIndex).add(any(MailboxSession.class), 
mailboxCaptor.capture(), messageCaptor.capture());
+        verify(messageSearchIndex).postReindexing();
         verifyNoMoreInteractions(messageSearchIndex);
 
         assertThat(mailboxCaptor.getValue()).satisfies(mailbox -> 
assertThat(mailbox.getMailboxId()).isEqualTo(mailboxId));
@@ -280,6 +285,7 @@ public class ReIndexerImplTest {
         ArgumentCaptor<MailboxId> mailboxCaptor = 
ArgumentCaptor.forClass(MailboxId.class);
 
         verify(messageSearchIndex).deleteAll(any(MailboxSession.class), 
mailboxCaptor.capture());
+        verify(messageSearchIndex).postReindexing();
         verifyNoMoreInteractions(messageSearchIndex);
 
         assertThat(mailboxCaptor.getValue()).satisfies(capturedMailboxId -> 
assertThat(capturedMailboxId).isEqualTo(mailboxId));
diff --git 
a/server/container/guice/memory/src/main/java/org/apache/james/FakeMessageSearchIndex.java
 
b/server/container/guice/memory/src/main/java/org/apache/james/FakeMessageSearchIndex.java
index e2ee76eaa9..0e2d947125 100644
--- 
a/server/container/guice/memory/src/main/java/org/apache/james/FakeMessageSearchIndex.java
+++ 
b/server/container/guice/memory/src/main/java/org/apache/james/FakeMessageSearchIndex.java
@@ -80,6 +80,11 @@ public class FakeMessageSearchIndex extends 
ListeningMessageSearchIndex {
         return GROUP;
     }
 
+    @Override
+    public void postReindexing() {
+        throw new NotImplementedException("not implemented");
+    }
+
     @Override
     public Flux<MessageUid> doSearch(MailboxSession session, Mailbox mailbox, 
SearchQuery searchQuery) throws MailboxException {
         throw new NotImplementedException("not implemented");
diff --git 
a/server/container/guice/opensearch/src/main/java/org/apache/james/SearchModuleChooser.java
 
b/server/container/guice/opensearch/src/main/java/org/apache/james/SearchModuleChooser.java
index 9008576cc6..002ae743f1 100644
--- 
a/server/container/guice/opensearch/src/main/java/org/apache/james/SearchModuleChooser.java
+++ 
b/server/container/guice/opensearch/src/main/java/org/apache/james/SearchModuleChooser.java
@@ -102,6 +102,11 @@ public class SearchModuleChooser {
             throw new NotImplementedException("not implemented");
         }
 
+        @Override
+        public void postReindexing() {
+            throw new NotImplementedException("not implemented");
+        }
+
         @Override
         public Flux<MessageUid> doSearch(MailboxSession session, Mailbox 
mailbox, SearchQuery searchQuery) throws MailboxException {
             throw new NotImplementedException("not implemented");
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 bb73ada88a..5ff774c7bb 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
@@ -704,6 +704,7 @@ class MailboxesRoutesTest {
 
                 verify(searchIndex).deleteAll(any(MailboxSession.class), 
mailboxIdCaptor.capture());
                 verify(searchIndex).add(any(MailboxSession.class), 
mailboxCaptor2.capture(), messageCaptor.capture());
+                verify(searchIndex).postReindexing();
                 verifyNoMoreInteractions(searchIndex);
 
                 
assertThat(mailboxIdCaptor.getValue()).matches(capturedMailboxId -> 
capturedMailboxId.equals(mailboxId));
@@ -1127,6 +1128,7 @@ class MailboxesRoutesTest {
 
                 verify(searchIndex).deleteAll(any(MailboxSession.class), 
mailboxIdCaptor.capture());
                 verify(searchIndex).add(any(MailboxSession.class), 
mailboxCaptor2.capture(), messageCaptor.capture());
+                verify(searchIndex).postReindexing();
                 verifyNoMoreInteractions(searchIndex);
 
                 
assertThat(mailboxIdCaptor.getValue()).matches(capturedMailboxId -> 
capturedMailboxId.equals(mailboxId));
@@ -1623,6 +1625,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).postReindexing();
                 verifyNoMoreInteractions(searchIndex);
 
                 assertThat(mailboxCaptor.getValue()).matches(mailbox -> 
mailbox.getMailboxId().equals(mailboxId));
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 003e40699b..f40125ddc3 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
@@ -2071,6 +2071,7 @@ class UserMailboxesRoutesTest {
 
                 verify(searchIndex).deleteAll(any(MailboxSession.class), 
mailboxIdCaptor.capture());
                 verify(searchIndex).add(any(MailboxSession.class), 
mailboxCaptor2.capture(), messageCaptor.capture());
+                verify(searchIndex).postReindexing();
                 verifyNoMoreInteractions(searchIndex);
 
                 
assertThat(mailboxIdCaptor.getValue()).matches(capturedMailboxId -> 
capturedMailboxId.equals(mailboxId));


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to