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]