MAILBOX-351 ReIndexer should allow to reIndex single message per MailboxId

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5e04df05
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5e04df05
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5e04df05

Branch: refs/heads/master
Commit: 5e04df0550ae7226899ebfe882ec06ed6cf2d977
Parents: 1bd2c29
Author: Benoit Tellier <btell...@linagora.com>
Authored: Fri Nov 23 15:39:44 2018 +0700
Committer: Benoit Tellier <btell...@linagora.com>
Committed: Thu Nov 29 10:52:45 2018 +0700

----------------------------------------------------------------------
 .../apache/james/mailbox/indexer/ReIndexer.java |  2 +
 .../mailbox/tools/indexer/ReIndexerImpl.java    | 13 +++++-
 .../tools/indexer/ReIndexerPerformer.java       |  7 +---
 .../indexer/SingleMessageReindexingTask.java    | 28 ++++++++-----
 .../mailbox/tools/indexer/ThrowsReIndexer.java  |  6 ++-
 .../tools/indexer/ReIndexerImplTest.java        | 42 ++++++++++++++++++++
 6 files changed, 80 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/5e04df05/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/ReIndexer.java
----------------------------------------------------------------------
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/ReIndexer.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/ReIndexer.java
index 5d4dd3a..837ba38 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/ReIndexer.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/ReIndexer.java
@@ -38,4 +38,6 @@ public interface ReIndexer {
 
     Task reIndex(MailboxPath path, MessageUid uid) throws MailboxException;
 
+    Task reIndex(MailboxId mailboxId, MessageUid uid) throws MailboxException;
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/5e04df05/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
----------------------------------------------------------------------
diff --git 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
index d1c7b9e..761a6cb 100644
--- 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
+++ 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
@@ -80,7 +80,16 @@ public class ReIndexerImpl implements ReIndexer {
     }
 
     @Override
-    public Task reIndex(MailboxPath path, MessageUid uid) {
-        return new SingleMessageReindexingTask(reIndexerPerformer, path, uid);
+    public Task reIndex(MailboxPath path, MessageUid uid) throws 
MailboxException {
+        MailboxSession mailboxSession = 
mailboxManager.createSystemSession("ReIndexingImap");
+        Mailbox mailbox = 
mapperFactory.getMailboxMapper(mailboxSession).findMailboxByPath(path);
+        return new SingleMessageReindexingTask(reIndexerPerformer, mailbox, 
uid);
+    }
+
+    @Override
+    public Task reIndex(MailboxId mailboxId, MessageUid uid) throws 
MailboxException {
+        MailboxSession mailboxSession = 
mailboxManager.createSystemSession("ReIndexingImap");
+        Mailbox mailbox = 
mapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId);
+        return new SingleMessageReindexingTask(reIndexerPerformer, mailbox, 
uid);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/5e04df05/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java
----------------------------------------------------------------------
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 552ddca..4e49f33 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
@@ -31,7 +31,6 @@ import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxMetaData;
-import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.search.MailboxQuery;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
@@ -99,10 +98,8 @@ public class ReIndexerPerformer {
         }
     }
 
-    Task.Result handleMessageReIndexing(MailboxPath path, MessageUid uid) 
throws MailboxException {
-        MailboxSession mailboxSession = 
mailboxManager.createSystemSession(path.getUser());
-        Mailbox mailbox = 
mailboxSessionMapperFactory.getMailboxMapper(mailboxSession)
-            .findMailboxByPath(path);
+    Task.Result handleMessageReIndexing(Mailbox mailbox, MessageUid uid) 
throws MailboxException {
+        MailboxSession mailboxSession = 
mailboxManager.createSystemSession(mailbox.getUser());
 
         return handleMessageReIndexing(mailboxSession, mailbox, uid);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/5e04df05/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTask.java
----------------------------------------------------------------------
diff --git 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTask.java
 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTask.java
index 501ee6f..ef6aa07 100644
--- 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTask.java
+++ 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTask.java
@@ -25,25 +25,32 @@ import javax.inject.Inject;
 
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class SingleMessageReindexingTask implements Task {
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(SingleMessageReindexingTask.class);
 
     public static final String MESSAGE_RE_INDEXING = "messageReIndexing";
 
     public static class AdditionalInformation implements 
TaskExecutionDetails.AdditionalInformation {
-        private final MailboxPath mailboxPath;
+        private final Mailbox mailbox;
         private final MessageUid uid;
 
-        AdditionalInformation(MailboxPath mailboxPath, MessageUid uid) {
-            this.mailboxPath = mailboxPath;
+        AdditionalInformation(Mailbox mailbox, MessageUid uid) {
+            this.mailbox = mailbox;
             this.uid = uid;
         }
 
         public String getMailboxPath() {
-            return mailboxPath.asString();
+            return mailbox.generateAssociatedPath().asString();
+        }
+
+        public String getMailboxId() {
+            return mailbox.getMailboxId().serialize();
         }
 
         public long getUid() {
@@ -52,23 +59,24 @@ public class SingleMessageReindexingTask implements Task {
     }
 
     private final ReIndexerPerformer reIndexerPerformer;
-    private final MailboxPath path;
+    private final Mailbox mailbox;
     private final MessageUid uid;
     private final AdditionalInformation additionalInformation;
 
     @Inject
-    public SingleMessageReindexingTask(ReIndexerPerformer reIndexerPerformer, 
MailboxPath path, MessageUid uid) {
+    public SingleMessageReindexingTask(ReIndexerPerformer reIndexerPerformer, 
Mailbox mailbox, MessageUid uid) {
         this.reIndexerPerformer = reIndexerPerformer;
-        this.path = path;
+        this.mailbox = mailbox;
         this.uid = uid;
-        this.additionalInformation = new AdditionalInformation(path, uid);
+        this.additionalInformation = new AdditionalInformation(mailbox, uid);
     }
 
     @Override
     public Result run() {
         try {
-            return reIndexerPerformer.handleMessageReIndexing(path, uid);
+            return reIndexerPerformer.handleMessageReIndexing(mailbox, uid);
         } catch (MailboxException e) {
+            LOGGER.warn("Error encounteres while reindexing {} {} : {}", 
mailbox.getMailboxId(), mailbox.generateAssociatedPath(), uid, e);
             return Result.PARTIAL;
         }
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/5e04df05/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ThrowsReIndexer.java
----------------------------------------------------------------------
diff --git 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ThrowsReIndexer.java
 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ThrowsReIndexer.java
index f5016a1..5a5173b 100644
--- 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ThrowsReIndexer.java
+++ 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ThrowsReIndexer.java
@@ -28,7 +28,6 @@ import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.task.Task;
 
 public class ThrowsReIndexer implements ReIndexer {
-
     @Override
     public Task reIndex(MailboxPath path) throws MailboxException {
         throw new MailboxException("Not implemented");
@@ -53,4 +52,9 @@ public class ThrowsReIndexer implements ReIndexer {
     public Task reIndex(MailboxPath path, MessageUid uid) throws 
MailboxException {
         throw new MailboxException("Not implemented");
     }
+
+    @Override
+    public Task reIndex(MailboxId mailboxId, MessageUid uid) throws 
MailboxException {
+        throw new MailboxException("Not implemented");
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/5e04df05/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
----------------------------------------------------------------------
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 70a74ca..1f187d3 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
@@ -29,6 +29,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
 import org.apache.james.core.User;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
@@ -161,6 +162,47 @@ public class ReIndexerImplTest {
     }
 
     @Test
+    void messageReIndexUsingMailboxIdShouldBeWellPerformed() throws Exception {
+        MailboxSession systemSession = 
mailboxManager.createSystemSession(USERNAME);
+        MailboxId mailboxId = mailboxManager.createMailbox(INBOX, 
systemSession).get();
+        ComposedMessageId createdMessage = mailboxManager.getMailbox(INBOX, 
systemSession)
+            .appendMessage(
+                MessageManager.AppendCommand.builder().build("header: 
value\r\n\r\nbody"),
+                systemSession);
+
+        reIndexer.reIndex(mailboxId, createdMessage.getUid()).run();
+        ArgumentCaptor<MailboxMessage> messageCaptor = 
ArgumentCaptor.forClass(MailboxMessage.class);
+        ArgumentCaptor<Mailbox> mailboxCaptor = 
ArgumentCaptor.forClass(Mailbox.class);
+
+        verify(messageSearchIndex).add(any(MailboxSession.class), 
mailboxCaptor.capture(), messageCaptor.capture());
+        verifyNoMoreInteractions(messageSearchIndex);
+
+        assertThat(mailboxCaptor.getValue()).matches(mailbox -> 
mailbox.getMailboxId().equals(mailboxId));
+        assertThat(messageCaptor.getValue()).matches(message -> 
message.getMailboxId().equals(mailboxId)
+            && message.getUid().equals(createdMessage.getUid()));
+    }
+
+    @Test
+    void messageReIndexUsingMailboxIdShouldDoNothingWhenUidNotFound() throws 
Exception {
+        MailboxSession systemSession = 
mailboxManager.createSystemSession(USERNAME);
+        MailboxId mailboxId = mailboxManager.createMailbox(INBOX, 
systemSession).get();
+        MessageUid uid = MessageUid.of(36);
+
+        reIndexer.reIndex(mailboxId, uid).run();
+
+        verifyNoMoreInteractions(messageSearchIndex);
+    }
+
+    @Test
+    void messageReIndexUsingMailboxIdShouldFailWhenMailboxNotFound() {
+        MailboxId mailboxId = InMemoryId.of(42);
+        MessageUid uid = MessageUid.of(36);
+
+        assertThatThrownBy(() -> reIndexer.reIndex(mailboxId, uid))
+            .isInstanceOf(MailboxNotFoundException.class);
+    }
+
+    @Test
     void mailboxIdReIndexShouldBeWellPerformed() throws Exception {
         MailboxSession systemSession = 
mailboxManager.createSystemSession(USERNAME);
         MailboxId mailboxId = mailboxManager.createMailbox(INBOX, 
systemSession).get();


---------------------------------------------------------------------
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