This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 29111de9430062f6313f48618e3cc5504958de25
Author: Benoit TELLIER <btell...@linagora.com>
AuthorDate: Wed Mar 13 15:20:59 2024 +0100

    [FIX] OpenSearchListeningMessageSearchIndex should not fail on missing 
mailbox
---
 .../events/OpenSearchListeningMessageSearchIndex.java      |  7 ++++++-
 .../events/OpenSearchListeningMessageSearchIndexTest.java  | 14 ++++++++++++++
 .../mailbox/store/search/ListeningMessageSearchIndex.java  | 11 ++++++++++-
 3 files changed, 30 insertions(+), 2 deletions(-)

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 056b533ad2..c321de6424 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
@@ -53,6 +53,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.SessionProvider;
 import org.apache.james.mailbox.events.MailboxEvents;
+import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.Mailbox;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
@@ -300,7 +301,11 @@ public class OpenSearchListeningMessageSearchIndex extends 
ListeningMessageSearc
     private Mono<Void> processAddedEvent(MailboxSession session, 
MailboxEvents.Added addedEvent, MailboxId mailboxId) {
         return factory.getMailboxMapper(session)
             .findMailboxById(mailboxId)
-            .flatMap(mailbox -> handleAdded(session, mailbox, addedEvent, 
chooseFetchType()));
+            .flatMap(mailbox -> handleAdded(session, mailbox, addedEvent, 
chooseFetchType()))
+            .onErrorResume(MailboxNotFoundException.class, e -> {
+                LOGGER.info("Added event skipped for deleted mailbox {}", 
mailboxId.serialize());
+                return Mono.empty();
+            });
     }
 
     private FetchType chooseFetchType() {
diff --git 
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/events/OpenSearchListeningMessageSearchIndexTest.java
 
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/events/OpenSearchListeningMessageSearchIndexTest.java
index 2ac5fa71e9..0bdd95383b 100644
--- 
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/events/OpenSearchListeningMessageSearchIndexTest.java
+++ 
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/events/OpenSearchListeningMessageSearchIndexTest.java
@@ -25,6 +25,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.awaitility.Durations.ONE_HUNDRED_MILLISECONDS;
+import static org.mockito.Mockito.mock;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -33,6 +34,7 @@ import java.time.Instant;
 import java.time.ZoneId;
 import java.util.Date;
 import java.util.Optional;
+import java.util.UUID;
 
 import jakarta.mail.Flags;
 
@@ -395,6 +397,18 @@ class OpenSearchListeningMessageSearchIndexTest {
             .isEmpty();
     }
 
+    @Test
+    void addShouldNotFailWhenMailboxHadBeenDeleted() {
+        mapperFactory.getMailboxMapper(session)
+            .delete(mailbox)
+            .block();
+
+        assertThatCode(() -> testee.event(new 
MailboxEvents.Added(MailboxSession.SessionId.of(36), BOB, 
mailbox.generateAssociatedPath(),
+            mailbox.getMailboxId(), ImmutableSortedMap.of(MESSAGE_UID_1, 
mock(MessageMetaData.class)), Event.EventId.of(UUID.randomUUID()),
+            !IS_DELIVERY, IS_APPENDED, Optional.empty())))
+            .doesNotThrowAnyException();
+    }
+
     @Test
     void deleteShouldBeIdempotent() throws Exception {
         testee.add(session, mailbox, MESSAGE_1).block();
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 8b38c21893..b2f1e3a174 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
@@ -35,6 +35,7 @@ import 
org.apache.james.mailbox.events.MailboxEvents.FlagsUpdated;
 import org.apache.james.mailbox.events.MailboxEvents.MailboxDeletion;
 import org.apache.james.mailbox.events.MailboxEvents.MailboxEvent;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.Mailbox;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageRange;
@@ -43,6 +44,8 @@ import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.github.fge.lambdas.Throwing;
 import com.google.common.collect.ImmutableList;
@@ -56,6 +59,8 @@ import reactor.core.scheduler.Schedulers;
  * notified about message changes. This will then allow to update the 
underlying index.
  */
 public abstract class ListeningMessageSearchIndex implements 
MessageSearchIndex, EventListener.ReactiveGroupEventListener {
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(ListeningMessageSearchIndex.class);
+
     public interface SearchOverride {
         boolean applicable(SearchQuery searchQuery, MailboxSession session);
 
@@ -106,7 +111,11 @@ public abstract class ListeningMessageSearchIndex 
implements MessageSearchIndex,
         if (event instanceof Added) {
             return factory.getMailboxMapper(session)
                 .findMailboxById(mailboxId)
-                .flatMap(mailbox -> handleAdded(session, mailbox, (Added) 
event));
+                .flatMap(mailbox -> handleAdded(session, mailbox, (Added) 
event))
+                .onErrorResume(MailboxNotFoundException.class, e -> {
+                    LOGGER.info("Added event skipped for deleted mailbox {}", 
mailboxId.serialize());
+                    return Mono.empty();
+                });
         } else if (event instanceof Expunged) {
             Expunged expunged = (Expunged) event;
 


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org
For additional commands, e-mail: notifications-h...@james.apache.org

Reply via email to