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 1903ddb442cc36bda117667c2e6ef91f881c81d4
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Sun Mar 22 13:38:09 2020 +0700

    JAMES-3087 Reactify MailboxMapper::findMailboxByPath
---
 .../cassandra/mail/CassandraMailboxMapper.java     |  6 +-
 .../CassandraCombinationManagerTestSystem.java     |  5 +-
 .../cassandra/mail/CassandraMailboxMapperTest.java | 70 +++++++++++-----------
 .../mail/migration/MailboxPathV2MigrationTest.java |  2 +-
 .../james/mailbox/jpa/mail/JPAMailboxMapper.java   | 21 ++++---
 .../mailbox/jpa/mail/JpaMailboxMapperTest.java     |  6 +-
 .../jpa/mail/TransactionalMailboxMapper.java       |  4 +-
 .../mailbox/maildir/mail/MaildirMailboxMapper.java | 11 +++-
 .../inmemory/mail/InMemoryMailboxMapper.java       | 11 ++--
 .../store/StoreMailboxAnnotationManager.java       |  2 +-
 .../james/mailbox/store/StoreMailboxManager.java   | 34 ++++-------
 .../james/mailbox/store/StoreRightManager.java     | 10 ++--
 .../james/mailbox/store/mail/MailboxMapper.java    | 19 +++++-
 .../AbstractMailboxManagerAttachmentTest.java      |  2 +-
 .../mailbox/store/MessageIdManagerTestSystem.java  |  2 +-
 .../store/StoreMailboxManagerAnnotationTest.java   | 21 ++++---
 .../mailbox/store/StoreMailboxManagerTest.java     |  4 +-
 .../james/mailbox/store/StoreRightManagerTest.java |  4 +-
 .../store/mail/model/MailboxMapperACLTest.java     |  1 +
 .../store/mail/model/MailboxMapperTest.java        | 14 ++---
 .../org/apache/james/modules/MailboxProbeImpl.java |  7 ++-
 .../adapter/mailbox/MailboxManagementTest.java     |  5 +-
 22 files changed, 145 insertions(+), 116 deletions(-)

diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
index daf71ce..0f0244f 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
@@ -82,13 +82,11 @@ public class CassandraMailboxMapper implements 
MailboxMapper {
     }
 
     @Override
-    public Mailbox findMailboxByPath(MailboxPath path) throws MailboxException 
{
+    public Mono<Mailbox> findMailboxByPath(MailboxPath path) {
         return mailboxPathV2DAO.retrieveId(path)
             .map(CassandraIdAndPath::getCassandraId)
             .flatMap(this::retrieveMailbox)
-            .switchIfEmpty(fromPreviousTable(path))
-            .blockOptional()
-            .orElseThrow(() -> new MailboxNotFoundException(path));
+            .switchIfEmpty(fromPreviousTable(path));
     }
 
     private Mono<Mailbox> fromPreviousTable(MailboxPath path) {
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
index e2cc7d1..1e0c20e 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
@@ -26,6 +26,7 @@ import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.events.EventBus;
 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.MailboxPath;
 import org.apache.james.mailbox.quota.QuotaManager;
@@ -54,7 +55,9 @@ public class CassandraCombinationManagerTestSystem extends 
CombinationManagerTes
     @Override
     public Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession 
session) throws MailboxException {
         cassandraMailboxManager.createMailbox(mailboxPath, session);
-        return 
mapperFactory.getMailboxMapper(session).findMailboxByPath(mailboxPath);
+        return 
mapperFactory.getMailboxMapper(session).findMailboxByPath(mailboxPath)
+            .blockOptional()
+            .orElseThrow(() -> new MailboxNotFoundException(mailboxPath));
     }
 
     @Override
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
index d16a079..1675f44 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
@@ -157,7 +157,7 @@ class CassandraMailboxMapperTest {
                         .assertThat(testee.findMailboxById(inboxId))
                         .isEqualTo(inboxRenamed);
                     softly(softly)
-                        .assertThat(testee.findMailboxByPath(inboxPathRenamed))
+                        
.assertThat(testee.findMailboxByPath(inboxPathRenamed).block())
                         .isEqualTo(inboxRenamed);
                     
softly.assertThat(testee.findMailboxWithPathLike(allMailboxesSearchQuery))
                         .hasOnlyOneElementSatisfying(searchMailbox -> 
softly(softly)
@@ -184,7 +184,7 @@ class CassandraMailboxMapperTest {
                         .assertThat(testee.findMailboxById(inboxId))
                         .isEqualTo(inboxRenamed);
                     softly(softly)
-                        .assertThat(testee.findMailboxByPath(inboxPathRenamed))
+                        
.assertThat(testee.findMailboxByPath(inboxPathRenamed).block())
                         .isEqualTo(inboxRenamed);
                     
softly.assertThat(testee.findMailboxWithPathLike(allMailboxesSearchQuery))
                         .hasOnlyOneElementSatisfying(searchMailbox -> 
softly(softly)
@@ -207,7 +207,7 @@ class CassandraMailboxMapperTest {
                         
.assertThat(testee.findMailboxById(inbox.getMailboxId()))
                         .isEqualTo(inbox);
                     softly(softly)
-                        .assertThat(testee.findMailboxByPath(inboxPath))
+                        
.assertThat(testee.findMailboxByPath(inboxPath).block())
                         .isEqualTo(inbox);
                     
softly.assertThat(testee.findMailboxWithPathLike(allMailboxesSearchQuery))
                         .hasOnlyOneElementSatisfying(searchMailbox -> 
softly(softly)
@@ -228,10 +228,10 @@ class CassandraMailboxMapperTest {
                 testee.delete(inbox);
 
                 SoftAssertions.assertSoftly(Throwing.consumer(softly -> {
-                    assertThatThrownBy(() -> 
testee.findMailboxById(inbox.getMailboxId()))
-                        .isInstanceOf(MailboxNotFoundException.class);
-                    assertThatThrownBy(() -> 
testee.findMailboxByPath(inboxPath))
+                    softly.assertThatThrownBy(() -> 
testee.findMailboxById(inbox.getMailboxId()))
                         .isInstanceOf(MailboxNotFoundException.class);
+                    
softly.assertThat(testee.findMailboxByPath(inboxPath).blockOptional())
+                        .isEmpty();
                     
softly.assertThat(testee.findMailboxWithPathLike(allMailboxesSearchQuery))
                         .isEmpty();
                 }));
@@ -248,8 +248,8 @@ class CassandraMailboxMapperTest {
             doQuietly(() -> testee.create(inboxPath, UID_VALIDITY));
 
             SoftAssertions.assertSoftly(softly -> {
-                softly.assertThatThrownBy(() -> 
testee.findMailboxByPath(inboxPath))
-                    .isInstanceOf(MailboxNotFoundException.class);
+                
softly.assertThat(testee.findMailboxByPath(inboxPath).blockOptional())
+                    .isEmpty();
                 
softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery))
                     .isEmpty();
                 
softly.assertThat(testee.findMailboxWithPathLike(allMailboxesSearchQuery))
@@ -277,7 +277,7 @@ class CassandraMailboxMapperTest {
                     .assertThat(testee.findMailboxById(inboxId))
                     .isEqualTo(inbox);
                 softly(softly)
-                    .assertThat(testee.findMailboxByPath(inboxPath))
+                    .assertThat(testee.findMailboxByPath(inboxPath).block())
                     .isEqualTo(inbox);
                 
softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery))
                     .hasOnlyOneElementSatisfying(searchMailbox -> 
softly(softly)
@@ -348,7 +348,7 @@ class CassandraMailboxMapperTest {
                     .assertThat(testee.findMailboxById(inboxId))
                     .isEqualTo(inbox);
                 softly(softly)
-                    .assertThat(testee.findMailboxByPath(inboxPath))
+                    .assertThat(testee.findMailboxByPath(inboxPath).block())
                     .isEqualTo(inbox);
                 
softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery))
                     .hasOnlyOneElementSatisfying(searchMailbox -> 
softly(softly)
@@ -463,7 +463,7 @@ class CassandraMailboxMapperTest {
 
             SoftAssertions.assertSoftly(Throwing.consumer(softly -> {
                 softly(softly)
-                    .assertThat(testee.findMailboxByPath(inboxPath))
+                    .assertThat(testee.findMailboxByPath(inboxPath).block())
                     .isEqualTo(inbox);
                 
softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery))
                     .hasOnlyOneElementSatisfying(searchMailbox -> 
softly(softly)
@@ -490,7 +490,7 @@ class CassandraMailboxMapperTest {
 
             SoftAssertions.assertSoftly(Throwing.consumer(softly -> {
                 softly(softly)
-                    .assertThat(testee.findMailboxByPath(inboxPath))
+                    .assertThat(testee.findMailboxByPath(inboxPath).block())
                     .isEqualTo(inbox);
                 
softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery))
                     .hasOnlyOneElementSatisfying(searchMailbox -> 
softly(softly)
@@ -520,8 +520,8 @@ class CassandraMailboxMapperTest {
             SoftAssertions.assertSoftly(Throwing.consumer(softly -> {
                 softly.assertThatThrownBy(() -> 
testee.findMailboxById(inboxId))
                     .isInstanceOf(MailboxNotFoundException.class);
-                softly.assertThatThrownBy(() -> 
testee.findMailboxByPath(inboxPath))
-                    .isInstanceOf(MailboxNotFoundException.class);
+                    
softly.assertThat(testee.findMailboxByPath(inboxPath).blockOptional())
+                        .isEmpty();
                 
softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery))
                     .isEmpty();
                 
softly.assertThat(testee.findMailboxWithPathLike(allMailboxesSearchQuery))
@@ -551,7 +551,7 @@ class CassandraMailboxMapperTest {
                     .assertThat(testee.findMailboxById(inboxId))
                     .isEqualTo(inboxRenamed);
                 softly(softly)
-                    .assertThat(testee.findMailboxByPath(inboxPathRenamed))
+                    
.assertThat(testee.findMailboxByPath(inboxPathRenamed).block())
                     .isEqualTo(inboxRenamed);
                 
softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery))
                     .isEmpty();
@@ -587,7 +587,7 @@ class CassandraMailboxMapperTest {
                     .assertThat(testee.findMailboxById(inboxId))
                     .isEqualTo(inboxRenamed);
                 softly(softly)
-                    .assertThat(testee.findMailboxByPath(inboxPathRenamed))
+                    
.assertThat(testee.findMailboxByPath(inboxPathRenamed).block())
                     .isEqualTo(inboxRenamed);
                 
softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery))
                     .isEmpty();
@@ -620,7 +620,7 @@ class CassandraMailboxMapperTest {
     @Test
     void 
renameShouldNotRemoveOldMailboxPathWhenCreatingTheNewMailboxPathFails() throws 
Exception {
         testee.create(MAILBOX_PATH, UID_VALIDITY);
-        Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH);
+        Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH).block();
 
         Mailbox newMailbox = new 
Mailbox(tooLongMailboxPath(mailbox.generateAssociatedPath()), UID_VALIDITY, 
mailbox.getMailboxId());
         assertThatThrownBy(() -> testee.rename(newMailbox))
@@ -643,8 +643,8 @@ class CassandraMailboxMapperTest {
 
         testee.delete(MAILBOX);
 
-        assertThatThrownBy(() -> testee.findMailboxByPath(MAILBOX_PATH))
-            .isInstanceOf(MailboxNotFoundException.class);
+        assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
+            .isEmpty();
     }
 
     @Test
@@ -656,36 +656,36 @@ class CassandraMailboxMapperTest {
 
         testee.delete(MAILBOX);
 
-        assertThatThrownBy(() -> testee.findMailboxByPath(MAILBOX_PATH))
-            .isInstanceOf(MailboxNotFoundException.class);
+        assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
+            .isEmpty();
     }
 
     @Test
-    void findMailboxByPathShouldReturnMailboxWhenExistsInV1Table() throws 
Exception {
+    void findMailboxByPathShouldReturnMailboxWhenExistsInV1Table() {
         mailboxDAO.save(MAILBOX)
             .block();
         mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
             .block();
 
-        Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH);
+        Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH).block();
 
         assertThat(mailbox.generateAssociatedPath()).isEqualTo(MAILBOX_PATH);
     }
 
     @Test
-    void findMailboxByPathShouldReturnMailboxWhenExistsInV2Table() throws 
Exception {
+    void findMailboxByPathShouldReturnMailboxWhenExistsInV2Table() {
         mailboxDAO.save(MAILBOX)
             .block();
         mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
             .block();
 
-        Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH);
+        Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH).block();
 
         assertThat(mailbox.generateAssociatedPath()).isEqualTo(MAILBOX_PATH);
     }
 
     @Test
-    void findMailboxByPathShouldReturnMailboxWhenExistsInBothTables() throws 
Exception {
+    void findMailboxByPathShouldReturnMailboxWhenExistsInBothTables() {
         mailboxDAO.save(MAILBOX)
             .block();
         mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
@@ -693,7 +693,7 @@ class CassandraMailboxMapperTest {
         mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
             .block();
 
-        Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH);
+        Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH).block();
 
         assertThat(mailbox.generateAssociatedPath()).isEqualTo(MAILBOX_PATH);
     }
@@ -709,8 +709,8 @@ class CassandraMailboxMapperTest {
 
         testee.delete(MAILBOX);
 
-        assertThatThrownBy(() -> testee.findMailboxByPath(MAILBOX_PATH))
-            .isInstanceOf(MailboxNotFoundException.class);
+        assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
+            .isEmpty();
     }
 
     @Test
@@ -722,8 +722,8 @@ class CassandraMailboxMapperTest {
 
         testee.delete(MAILBOX);
 
-        assertThatThrownBy(() -> testee.findMailboxByPath(MAILBOX_PATH))
-            .isInstanceOf(MailboxNotFoundException.class);
+        assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
+            .isEmpty();
     }
 
     @Test
@@ -735,8 +735,8 @@ class CassandraMailboxMapperTest {
 
         testee.delete(MAILBOX);
 
-        assertThatThrownBy(() -> testee.findMailboxByPath(MAILBOX_PATH))
-            .isInstanceOf(MailboxNotFoundException.class);
+        assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
+            .isEmpty();
     }
 
     @Test
@@ -744,8 +744,8 @@ class CassandraMailboxMapperTest {
         mailboxDAO.save(MAILBOX)
             .block();
 
-        assertThatThrownBy(() -> testee.findMailboxByPath(MAILBOX_PATH))
-            .isInstanceOf(MailboxNotFoundException.class);
+        assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
+            .isEmpty();
     }
 
     @Test
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java
index 82ee289..81bab1c 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java
@@ -110,7 +110,7 @@ class MailboxPathV2MigrationTest {
         daoV1.save(MAILBOX_PATH_1, MAILBOX_ID_1).block();
         mailboxDAO.save(mailbox).block();
 
-        mailboxMapper.findMailboxByPath(MAILBOX_PATH_1);
+        mailboxMapper.findMailboxByPath(MAILBOX_PATH_1).block();
 
         SoftAssertions softly = new SoftAssertions();
         
softly.assertThat(daoV1.retrieveId(MAILBOX_PATH_1).blockOptional()).isEmpty();
diff --git 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
index 966101a..1601631 100644
--- 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
+++ 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
@@ -50,6 +50,8 @@ import com.github.steveash.guavate.Guavate;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 
+import reactor.core.publisher.Mono;
+
 /**
  * Data access management for mailbox.
  */
@@ -129,27 +131,24 @@ public class JPAMailboxMapper extends 
JPATransactionalMapper implements MailboxM
     }
 
     private boolean isPathAlreadyUsedByAnotherMailbox(MailboxPath mailboxPath) 
throws MailboxException {
-        try {
-            findMailboxByPath(mailboxPath);
-            return true;
-        } catch (MailboxNotFoundException e) {
-            return false;
-        }
+        return findMailboxByPath(mailboxPath)
+            .blockOptional()
+            .isPresent();
     }
 
     @Override
-    public Mailbox findMailboxByPath(MailboxPath mailboxPath) throws 
MailboxException, MailboxNotFoundException {
+    public Mono<Mailbox> findMailboxByPath(MailboxPath mailboxPath)  {
         try {
-            return 
getEntityManager().createNamedQuery("findMailboxByNameWithUser", 
JPAMailbox.class)
+            return 
Mono.just(getEntityManager().createNamedQuery("findMailboxByNameWithUser", 
JPAMailbox.class)
                 .setParameter("nameParam", mailboxPath.getName())
                 .setParameter("namespaceParam", mailboxPath.getNamespace())
                 .setParameter("userParam", mailboxPath.getUser().asString())
                 .getSingleResult()
-                .toMailbox();
+                .toMailbox());
         } catch (NoResultException e) {
-            throw new MailboxNotFoundException(mailboxPath);
+            return Mono.empty();
         } catch (PersistenceException e) {
-            throw new MailboxException("Search of mailbox " + mailboxPath + " 
failed", e);
+            return Mono.error(new MailboxException("Exception upon JPA 
execution", e));
         }
     }
 
diff --git 
a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JpaMailboxMapperTest.java
 
b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JpaMailboxMapperTest.java
index 9be8ff1..32aec06 100644
--- 
a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JpaMailboxMapperTest.java
+++ 
b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JpaMailboxMapperTest.java
@@ -67,7 +67,7 @@ class JpaMailboxMapperTest extends MailboxMapperTest {
         entityManager.persist(jpaMailbox);
         entityManager.getTransaction().commit();
 
-        Mailbox readMailbox = mailboxMapper.findMailboxByPath(benwaInboxPath);
+        Mailbox readMailbox = 
mailboxMapper.findMailboxByPath(benwaInboxPath).block();
 
         assertThat(readMailbox.getUidValidity().isValid()).isTrue();
     }
@@ -82,8 +82,8 @@ class JpaMailboxMapperTest extends MailboxMapperTest {
         entityManager.persist(jpaMailbox);
         entityManager.getTransaction().commit();
 
-        Mailbox readMailbox1 = mailboxMapper.findMailboxByPath(benwaInboxPath);
-        Mailbox readMailbox2 = mailboxMapper.findMailboxByPath(benwaInboxPath);
+        Mailbox readMailbox1 = 
mailboxMapper.findMailboxByPath(benwaInboxPath).block();
+        Mailbox readMailbox2 = 
mailboxMapper.findMailboxByPath(benwaInboxPath).block();
 
         
assertThat(readMailbox1.getUidValidity()).isEqualTo(readMailbox2.getUidValidity());
     }
diff --git 
a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java
 
b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java
index a40e189..30b4da7 100644
--- 
a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java
+++ 
b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java
@@ -36,6 +36,8 @@ import org.apache.james.mailbox.model.search.MailboxQuery;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.transaction.Mapper;
 
+import reactor.core.publisher.Mono;
+
 public class TransactionalMailboxMapper implements MailboxMapper {
     private final JPAMailboxMapper wrapped;
 
@@ -69,7 +71,7 @@ public class TransactionalMailboxMapper implements 
MailboxMapper {
     }
 
     @Override
-    public Mailbox findMailboxByPath(MailboxPath mailboxPath) throws 
MailboxException, MailboxNotFoundException {
+    public Mono<Mailbox> findMailboxByPath(MailboxPath mailboxPath) {
         return wrapped.findMailboxByPath(mailboxPath);
     }
 
diff --git 
a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
 
b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
index f6e8195..d9b5c0d 100644
--- 
a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
+++ 
b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
@@ -54,6 +54,8 @@ import org.slf4j.LoggerFactory;
 import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableList;
 
+import reactor.core.publisher.Mono;
+
 public class MaildirMailboxMapper extends NonTransactionalMapper implements 
MailboxMapper {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(MaildirMailboxMapper.class);
@@ -106,9 +108,12 @@ public class MaildirMailboxMapper extends 
NonTransactionalMapper implements Mail
     }
    
     @Override
-    public Mailbox findMailboxByPath(MailboxPath mailboxPath)
-            throws MailboxException, MailboxNotFoundException {      
-        return maildirStore.loadMailbox(session, mailboxPath);
+    public Mono<Mailbox> findMailboxByPath(MailboxPath mailboxPath) {
+        try {
+            return Mono.just(maildirStore.loadMailbox(session, mailboxPath));
+        } catch (MailboxException e) {
+            return Mono.empty();
+        }
     }
     
     @Override
diff --git 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
index c990f48..fc55302 100644
--- 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
+++ 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
@@ -44,6 +44,8 @@ import com.github.steveash.guavate.Guavate;
 import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
 
+import reactor.core.publisher.Mono;
+
 public class InMemoryMailboxMapper implements MailboxMapper {
     
     private static final int INITIAL_SIZE = 128;
@@ -64,13 +66,10 @@ public class InMemoryMailboxMapper implements MailboxMapper 
{
     }
 
     @Override
-    public synchronized Mailbox findMailboxByPath(MailboxPath path) throws 
MailboxException {
+    public synchronized Mono<Mailbox> findMailboxByPath(MailboxPath path) {
         Mailbox result = mailboxesByPath.get(path);
-        if (result == null) {
-            throw new MailboxNotFoundException(path);
-        } else {
-            return new Mailbox(result);
-        }
+        return Mono.justOrEmpty(result)
+            .map(Mailbox::new);
     }
 
     @Override
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxAnnotationManager.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxAnnotationManager.java
index 7bc3a95..2b1a52f 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxAnnotationManager.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxAnnotationManager.java
@@ -69,7 +69,7 @@ public class StoreMailboxAnnotationManager implements 
MailboxAnnotationManager {
 
     public MailboxId checkThenGetMailboxId(MailboxPath path, MailboxSession 
session) throws MailboxException {
         MailboxMapper mailboxMapper = 
mailboxSessionMapperFactory.getMailboxMapper(session);
-        Mailbox mailbox = mailboxMapper.findMailboxByPath(path);
+        Mailbox mailbox = mailboxMapper.findMailboxByPathBlocking(path);
         if (!rightManager.hasRight(mailbox, Right.Read, session)) {
             throw new InsufficientRightsException("Not enough rights on " + 
path);
         }
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index e9ad7a4..2854449 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -255,13 +255,12 @@ public class StoreMailboxManager implements 
MailboxManager {
     public MessageManager getMailbox(MailboxPath mailboxPath, MailboxSession 
session)
             throws MailboxException {
         final MailboxMapper mapper = 
mailboxSessionMapperFactory.getMailboxMapper(session);
-        Mailbox mailboxRow = mapper.findMailboxByPath(mailboxPath);
-
-        if (mailboxRow == null) {
-            LOGGER.info("Mailbox '{}' not found.", mailboxPath);
-            throw new MailboxNotFoundException(mailboxPath);
-
-        }
+        Mailbox mailboxRow = mapper.findMailboxByPath(mailboxPath)
+            .blockOptional()
+            .orElseThrow(() -> {
+                LOGGER.info("Mailbox '{}' not found.", mailboxPath);
+                return new MailboxNotFoundException(mailboxPath);
+            });
 
         if (!assertUserHasAccessTo(mailboxRow, session)) {
             LOGGER.info("Mailbox '{}' does not belong to user '{}' but to 
'{}'", mailboxPath, session.getUser(), mailboxRow.getUser());
@@ -409,10 +408,7 @@ public class StoreMailboxManager implements MailboxManager 
{
         MailboxMapper mailboxMapper = 
mailboxSessionMapperFactory.getMailboxMapper(session);
 
         mailboxMapper.execute(() -> {
-            Mailbox mailbox = mailboxMapper.findMailboxByPath(mailboxPath);
-            if (mailbox == null) {
-                throw new MailboxNotFoundException(mailboxPath);
-            }
+            Mailbox mailbox = 
mailboxMapper.findMailboxByPathBlocking(mailboxPath);
             return doDeleteMailbox(mailboxMapper, mailbox, session);
         });
     }
@@ -476,8 +472,7 @@ public class StoreMailboxManager implements MailboxManager {
         MailboxMapper mapper = 
mailboxSessionMapperFactory.getMailboxMapper(session);
 
         mapper.execute(Mapper.toTransaction(() -> {
-            Mailbox mailbox = 
Optional.ofNullable(mapper.findMailboxByPath(from))
-                .orElseThrow(() -> new MailboxNotFoundException(from));
+            Mailbox mailbox = mapper.findMailboxByPathBlocking(from);
             doRenameMailbox(mailbox, sanitizedMailboxPath, session, mapper);
         }));
     }
@@ -701,13 +696,10 @@ public class StoreMailboxManager implements 
MailboxManager {
 
     @Override
     public boolean mailboxExists(MailboxPath mailboxPath, MailboxSession 
session) throws MailboxException {
-        try {
-            final MailboxMapper mapper = 
mailboxSessionMapperFactory.getMailboxMapper(session);
-            mapper.findMailboxByPath(mailboxPath);
-            return true;
-        } catch (MailboxNotFoundException e) {
-            return false;
-        }
+        MailboxMapper mapper = 
mailboxSessionMapperFactory.getMailboxMapper(session);
+        return mapper.findMailboxByPath(mailboxPath)
+            .blockOptional()
+            .isPresent();
     }
 
     /**
@@ -819,7 +811,7 @@ public class StoreMailboxManager implements MailboxManager {
     @Override
     public boolean hasChildren(MailboxPath mailboxPath, MailboxSession 
session) throws MailboxException {
         MailboxMapper mapper = 
mailboxSessionMapperFactory.getMailboxMapper(session);
-        Mailbox mailbox = mapper.findMailboxByPath(mailboxPath);
+        Mailbox mailbox = mapper.findMailboxByPathBlocking(mailboxPath);
         return mapper.hasChildren(mailbox, session.getPathDelimiter());
     }
 
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
index 7db8dba..5707f15 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
@@ -89,7 +89,7 @@ public class StoreRightManager implements RightManager {
     @Override
     public Rfc4314Rights myRights(MailboxPath mailboxPath, MailboxSession 
session) throws MailboxException {
         MailboxMapper mapper = 
mailboxSessionMapperFactory.getMailboxMapper(session);
-        Mailbox mailbox = mapper.findMailboxByPath(mailboxPath);
+        Mailbox mailbox = mapper.findMailboxByPathBlocking(mailboxPath);
         return myRights(mailbox, session);
     }
 
@@ -118,7 +118,7 @@ public class StoreRightManager implements RightManager {
     @Override
     public Rfc4314Rights[] listRights(MailboxPath mailboxPath, EntryKey key, 
MailboxSession session) throws MailboxException {
         MailboxMapper mapper = 
mailboxSessionMapperFactory.getMailboxMapper(session);
-        Mailbox mailbox = mapper.findMailboxByPath(mailboxPath);
+        Mailbox mailbox = mapper.findMailboxByPathBlocking(mailboxPath);
 
         return aclResolver.listRights(key,
             groupMembershipResolver,
@@ -129,7 +129,7 @@ public class StoreRightManager implements RightManager {
     @Override
     public MailboxACL listRights(MailboxPath mailboxPath, MailboxSession 
session) throws MailboxException {
         MailboxMapper mapper = 
mailboxSessionMapperFactory.getMailboxMapper(session);
-        Mailbox mailbox = mapper.findMailboxByPath(mailboxPath);
+        Mailbox mailbox = mapper.findMailboxByPathBlocking(mailboxPath);
         return mailbox.getACL();
     }
 
@@ -137,7 +137,7 @@ public class StoreRightManager implements RightManager {
     public void applyRightsCommand(MailboxPath mailboxPath, ACLCommand 
mailboxACLCommand, MailboxSession session) throws MailboxException {
         assertSharesBelongsToUserDomain(mailboxPath.getUser(), 
mailboxACLCommand);
         MailboxMapper mapper = 
mailboxSessionMapperFactory.getMailboxMapper(session);
-        Mailbox mailbox = mapper.findMailboxByPath(mailboxPath);
+        Mailbox mailbox = mapper.findMailboxByPathBlocking(mailboxPath);
         ACLDiff aclDiff = mapper.updateACL(mailbox, mailboxACLCommand);
 
         eventBus.dispatch(EventFactory.aclUpdated()
@@ -200,7 +200,7 @@ public class StoreRightManager implements RightManager {
     public void setRights(MailboxPath mailboxPath, MailboxACL mailboxACL, 
MailboxSession session) throws MailboxException {
         assertSharesBelongsToUserDomain(mailboxPath.getUser(), 
mailboxACL.getEntries());
         MailboxMapper mapper = 
mailboxSessionMapperFactory.getMailboxMapper(session);
-        Mailbox mailbox = mapper.findMailboxByPath(mailboxPath);
+        Mailbox mailbox = mapper.findMailboxByPathBlocking(mailboxPath);
 
         setRights(mailboxACL, mapper, mailbox, session);
     }
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
index 9973d8f..f0df8d1 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
@@ -33,6 +33,8 @@ import org.apache.james.mailbox.model.UidValidity;
 import org.apache.james.mailbox.model.search.MailboxQuery;
 import org.apache.james.mailbox.store.transaction.Mapper;
 
+import reactor.core.publisher.Mono;
+
 /**
  * Mapper for {@link Mailbox} actions. A {@link MailboxMapper} has a lifecycle 
from the start of a request 
  * to the end of the request.
@@ -59,8 +61,21 @@ public interface MailboxMapper extends Mapper {
     /**
      * Return the {@link Mailbox} for the given name
      */
-    Mailbox findMailboxByPath(MailboxPath mailboxName)
-            throws MailboxException, MailboxNotFoundException;
+    Mono<Mailbox> findMailboxByPath(MailboxPath mailboxName);
+
+    default Mailbox findMailboxByPathBlocking(MailboxPath mailboxPath) throws 
MailboxException, MailboxNotFoundException {
+        try {
+            return findMailboxByPath(mailboxPath)
+                .blockOptional()
+                .orElseThrow(() -> new MailboxNotFoundException(mailboxPath));
+        } catch (Exception e) {
+            Throwable cause = e.getCause();
+            if (cause instanceof MailboxException) {
+                throw (MailboxException) cause;
+            }
+            throw e;
+        }
+    }
 
     /**
      * Return the {@link Mailbox} for the given name
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMailboxManagerAttachmentTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMailboxManagerAttachmentTest.java
index a2a09d8..a55deae 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMailboxManagerAttachmentTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMailboxManagerAttachmentTest.java
@@ -77,7 +77,7 @@ public abstract class AbstractMailboxManagerAttachmentTest {
         inboxPath = MailboxPath.forUser(USERNAME, "INBOX");
         mailboxManager = getMailboxManager();
         mailboxManager.createMailbox(inboxPath, mailboxSession);
-        inbox = mailboxMapper.findMailboxByPath(inboxPath);
+        inbox = mailboxMapper.findMailboxByPath(inboxPath).block();
         inboxMessageManager = mailboxManager.getMailbox(inboxPath, 
mailboxSession);
         attachmentMapper = 
getAttachmentMapperFactory().createAttachmentMapper(mailboxSession);
     }
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
index ecbcbd8..420e94a 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
@@ -78,7 +78,7 @@ public class MessageIdManagerTestSystem {
 
     public Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession 
session) throws MailboxException {
         mailboxManager.createMailbox(mailboxPath, session);
-        return 
mapperFactory.getMailboxMapper(session).findMailboxByPath(mailboxPath);
+        return 
mapperFactory.getMailboxMapper(session).findMailboxByPath(mailboxPath).block();
     }
 
     public MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags, 
MailboxSession mailboxSession) {
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java
index 85e3670..ee73f44 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java
@@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
@@ -54,6 +55,8 @@ import org.mockito.MockitoAnnotations;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 
+import reactor.core.publisher.Mono;
+
 class StoreMailboxManagerAnnotationTest {
     static final MailboxAnnotationKey PRIVATE_KEY = new 
MailboxAnnotationKey("/private/comment");
     static final MailboxAnnotationKey SHARED_KEY = new 
MailboxAnnotationKey("/shared/comment");
@@ -86,7 +89,7 @@ class StoreMailboxManagerAnnotationTest {
         
when(mailboxSessionMapperFactory.getMailboxMapper(eq(session))).thenReturn(mailboxMapper);
         
when(mailboxSessionMapperFactory.getAnnotationMapper(eq(session))).thenReturn(annotationMapper);
         when(mailbox.getMailboxId()).thenReturn(mailboxId);
-        
when(mailboxMapper.findMailboxByPath(eq(mailboxPath))).thenReturn(mailbox);
+        
when(mailboxMapper.findMailboxByPath(eq(mailboxPath))).thenReturn(Mono.just(mailbox));
         when(annotationMapper.execute(any(Mapper.Transaction.class)))
             .thenAnswer(invocationOnMock -> {
                 Mapper.Transaction<?> transaction = (Mapper.Transaction<?>) 
invocationOnMock.getArguments()[0];
@@ -101,7 +104,7 @@ class StoreMailboxManagerAnnotationTest {
 
     @Test
     void updateAnnotationsShouldThrowExceptionWhenDoesNotLookupMailbox() 
throws Exception {
-        
doThrow(MailboxException.class).when(mailboxMapper).findMailboxByPath(eq(mailboxPath));
+        
doThrow(MailboxException.class).when(mailboxMapper).findMailboxByPathBlocking(eq(mailboxPath));
 
         assertThatThrownBy(() -> 
annotationManager.updateAnnotations(mailboxPath, session, 
ImmutableList.of(PRIVATE_ANNOTATION)))
             .isInstanceOf(MailboxException.class);
@@ -109,7 +112,7 @@ class StoreMailboxManagerAnnotationTest {
 
     @Test
     void updateAnnotationsShouldCallAnnotationMapperToInsertAnnotation() 
throws Exception {
-        
when(mailboxMapper.findMailboxByPath(eq(mailboxPath))).thenReturn(mailbox);
+        
when(mailboxMapper.findMailboxByPathBlocking(eq(mailboxPath))).thenReturn(mailbox);
         annotationManager.updateAnnotations(mailboxPath, session, ANNOTATIONS);
 
         verify(annotationMapper, times(2)).insertAnnotation(eq(mailboxId), 
any(MailboxAnnotation.class));
@@ -117,7 +120,7 @@ class StoreMailboxManagerAnnotationTest {
 
     @Test
     void updateAnnotationsShouldCallAnnotationMapperToDeleteAnnotation() 
throws Exception {
-        
when(mailboxMapper.findMailboxByPath(eq(mailboxPath))).thenReturn(mailbox);
+        
when(mailboxMapper.findMailboxByPathBlocking(eq(mailboxPath))).thenReturn(mailbox);
         annotationManager.updateAnnotations(mailboxPath, session, 
ANNOTATIONS_WITH_NIL_ENTRY);
 
         verify(annotationMapper, times(1)).insertAnnotation(eq(mailboxId), 
eq(PRIVATE_ANNOTATION));
@@ -126,7 +129,7 @@ class StoreMailboxManagerAnnotationTest {
 
     @Test
     void getAllAnnotationsShouldThrowExceptionWhenDoesNotLookupMailbox() 
throws Exception {
-        
doThrow(MailboxException.class).when(mailboxMapper).findMailboxByPath(eq(mailboxPath));
+        
doThrow(MailboxException.class).when(mailboxMapper).findMailboxByPathBlocking(eq(mailboxPath));
 
         assertThatThrownBy(() -> 
annotationManager.getAllAnnotations(mailboxPath, session))
             .isInstanceOf(MailboxException.class);
@@ -134,7 +137,7 @@ class StoreMailboxManagerAnnotationTest {
 
     @Test
     void getAllAnnotationsShouldReturnEmptyForNonStoredAnnotation() throws 
Exception {
-        
when(mailboxMapper.findMailboxByPath(eq(mailboxPath))).thenReturn(mailbox);
+        
when(mailboxMapper.findMailboxByPathBlocking(eq(mailboxPath))).thenReturn(mailbox);
         
when(annotationMapper.getAllAnnotations(eq(mailboxId))).thenReturn(Collections.<MailboxAnnotation>emptyList());
 
         assertThat(annotationManager.getAllAnnotations(mailboxPath, 
session)).isEmpty();
@@ -142,7 +145,7 @@ class StoreMailboxManagerAnnotationTest {
 
     @Test
     void getAllAnnotationsShouldReturnStoredAnnotation() throws Exception {
-        
when(mailboxMapper.findMailboxByPath(eq(mailboxPath))).thenReturn(mailbox);
+        
when(mailboxMapper.findMailboxByPathBlocking(eq(mailboxPath))).thenReturn(mailbox);
         
when(annotationMapper.getAllAnnotations(eq(mailboxId))).thenReturn(ANNOTATIONS);
 
         assertThat(annotationManager.getAllAnnotations(mailboxPath, 
session)).isEqualTo(ANNOTATIONS);
@@ -150,7 +153,7 @@ class StoreMailboxManagerAnnotationTest {
 
     @Test
     void getAnnotationsByKeysShouldThrowExceptionWhenDoesNotLookupMailbox() 
throws Exception {
-        
doThrow(MailboxException.class).when(mailboxMapper).findMailboxByPath(eq(mailboxPath));
+        
doThrow(MailboxException.class).when(mailboxMapper).findMailboxByPathBlocking(eq(mailboxPath));
 
         assertThatThrownBy(() -> 
annotationManager.getAnnotationsByKeys(mailboxPath, session, KEYS))
             .isInstanceOf(MailboxException.class);
@@ -158,7 +161,7 @@ class StoreMailboxManagerAnnotationTest {
 
     @Test
     void getAnnotationsByKeysShouldRetrieveStoreAnnotationsByKey() throws 
Exception {
-        
when(mailboxMapper.findMailboxByPath(eq(mailboxPath))).thenReturn(mailbox);
+        
when(mailboxMapper.findMailboxByPathBlocking(eq(mailboxPath))).thenReturn(mailbox);
         when(annotationMapper.getAnnotationsByKeys(eq(mailboxId), 
eq(KEYS))).thenReturn(ANNOTATIONS);
 
         assertThat(annotationManager.getAnnotationsByKeys(mailboxPath, 
session, KEYS)).isEqualTo(ANNOTATIONS);
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
index 6280122..9ffdee2 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
@@ -60,6 +60,8 @@ import org.apache.james.metrics.tests.RecordingMetricFactory;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import reactor.core.publisher.Mono;
+
 class StoreMailboxManagerTest {
     static final Username CURRENT_USER = Username.of("user");
     static final String CURRENT_USER_PASSWORD = "secret";
@@ -146,7 +148,7 @@ class StoreMailboxManagerTest {
         when(mockedMailbox.getMailboxId()).thenReturn(MAILBOX_ID);
         when(mockedMailbox.getUser()).thenReturn(otherUser);
         
when(mockedMailboxMapper.findMailboxById(MAILBOX_ID)).thenReturn(mockedMailbox);
-        
when(mockedMailboxMapper.findMailboxByPath(any())).thenReturn(mockedMailbox);
+        
when(mockedMailboxMapper.findMailboxByPath(any())).thenReturn(Mono.just(mockedMailbox));
 
         assertThatThrownBy(() -> storeMailboxManager.getMailbox(MAILBOX_ID, 
mockedMailboxSession))
             .isInstanceOf(MailboxNotFoundException.class);
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java
index 7aa4a76..a880c3a 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java
@@ -56,6 +56,8 @@ import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import reactor.core.publisher.Mono;
+
 class StoreRightManagerTest {
 
     static final MailboxId MAILBOX_ID = TestId.of(42);
@@ -84,7 +86,7 @@ class StoreRightManagerTest {
     @Test
     void hasRightShouldThrowMailboxNotFoundExceptionWhenMailboxDoesNotExist() 
throws MailboxException {
         MailboxPath mailboxPath = MailboxPath.forUser(MailboxFixture.ALICE, 
"unexisting mailbox");
-        when(mockedMailboxMapper.findMailboxByPath(mailboxPath))
+        when(mockedMailboxMapper.findMailboxByPathBlocking(mailboxPath))
             .thenThrow(new MailboxNotFoundException(""));
 
         assertThatThrownBy(() ->
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperACLTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperACLTest.java
index 744892f..d4dfaec 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperACLTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperACLTest.java
@@ -396,6 +396,7 @@ public abstract class MailboxMapperACLTest {
 
         assertThat(
             
mailboxMapper.findMailboxByPath(benwaInboxMailbox.generateAssociatedPath())
+                .block()
                 .getACL()
                 .getEntries())
             .hasSize(1)
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
index 98bf41a..026e402 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
@@ -82,15 +82,15 @@ public abstract class MailboxMapperTest {
 
     @Test
     void findMailboxByPathWhenAbsentShouldFail() {
-        assertThatThrownBy(() -> 
mailboxMapper.findMailboxByPath(MailboxPath.forUser(BENWA, "INBOX")))
-            .isInstanceOf(MailboxNotFoundException.class);
+        assertThat(mailboxMapper.findMailboxByPath(MailboxPath.forUser(BENWA, 
"INBOX")).blockOptional())
+            .isEmpty();
     }
 
     @Test
     void createShouldPersistTheMailbox() throws MailboxException {
         benwaInboxMailbox = createMailbox(benwaInboxPath);
 
-        
assertThat(mailboxMapper.findMailboxByPath(benwaInboxPath)).isEqualTo(benwaInboxMailbox);
+        
assertThat(mailboxMapper.findMailboxByPath(benwaInboxPath).blockOptional()).contains(benwaInboxMailbox);
         
assertThat(mailboxMapper.findMailboxById(benwaInboxMailbox.getMailboxId())).isEqualTo(benwaInboxMailbox);
     }
 
@@ -149,8 +149,8 @@ public abstract class MailboxMapperTest {
         benwaWorkMailbox = new Mailbox(benwaWorkPath, UID_VALIDITY, mailboxId);
         mailboxMapper.rename(benwaWorkMailbox);
 
-        assertThatThrownBy(() -> 
mailboxMapper.findMailboxByPath(benwaInboxPath))
-            .isInstanceOf(MailboxNotFoundException.class);
+        
assertThat(mailboxMapper.findMailboxByPath(benwaInboxPath).blockOptional())
+            .isEmpty();
     }
 
     @Test
@@ -200,8 +200,8 @@ public abstract class MailboxMapperTest {
         createAll();
         mailboxMapper.delete(benwaInboxMailbox);
 
-        assertThatThrownBy(() -> 
mailboxMapper.findMailboxByPath(benwaInboxPath))
-            .isInstanceOf(MailboxNotFoundException.class);
+        
assertThat(mailboxMapper.findMailboxByPath(benwaInboxPath).blockOptional())
+            .isEmpty();
     }
 
     @Test
diff --git 
a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java
 
b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java
index d8cb4e8..f112583 100644
--- 
a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java
+++ 
b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java
@@ -34,6 +34,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.SubscriptionManager;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxMetaData;
@@ -84,7 +85,11 @@ public class MailboxProbeImpl implements GuiceProbe, 
MailboxProbe {
         try {
             mailboxSession = mailboxManager.createSystemSession(username);
             MailboxMapper mailboxMapper = 
mailboxMapperFactory.getMailboxMapper(mailboxSession);
-            return mailboxMapper.findMailboxByPath(new MailboxPath(namespace, 
username, name)).getMailboxId();
+            MailboxPath path = new MailboxPath(namespace, username, name);
+            return mailboxMapper.findMailboxByPath(path)
+                .blockOptional()
+                .orElseThrow(() -> new 
MailboxNotFoundException(path.asString()))
+                .getMailboxId();
         } catch (MailboxException e) {
             throw new RuntimeException(e);
         } finally {
diff --git 
a/server/container/mailbox-jmx/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
 
b/server/container/mailbox-jmx/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
index 21c33c7..9cf51e8 100644
--- 
a/server/container/mailbox-jmx/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
+++ 
b/server/container/mailbox-jmx/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
@@ -132,7 +132,10 @@ public class MailboxManagementTest {
     void createMailboxShouldCreateAMailbox() throws Exception {
         
mailboxManagerManagement.createMailbox(MailboxConstants.USER_NAMESPACE, 
USER.asString(), "name");
         
assertThat(mapperFactory.createMailboxMapper(session).list()).hasSize(1);
-        
assertThat(mapperFactory.createMailboxMapper(session).findMailboxByPath(MailboxPath.forUser(USER,
 "name"))).isNotNull();
+        assertThat(mapperFactory.createMailboxMapper(session)
+                .findMailboxByPath(MailboxPath.forUser(USER, "name"))
+                .blockOptional())
+            .isPresent();
     }
 
     @Test


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

Reply via email to