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 761a6cb6ca2..9f4b49dbd86 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 @@ -30,7 +30,6 @@ import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; -import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.task.Task; /** @@ -57,16 +56,18 @@ public ReIndexerImpl(ReIndexerPerformer reIndexerPerformer, MailboxManager mailb @Override public Task reIndex(MailboxPath path) throws MailboxException { - MailboxSession mailboxSession = mailboxManager.createSystemSession("ReIndexingImap"); - Mailbox mailbox = mapperFactory.getMailboxMapper(mailboxSession).findMailboxByPath(path); - return new SingleMailboxReindexingTask(reIndexerPerformer, mailbox); + MailboxSession mailboxSession = mailboxManager.createSystemSession(path.getUser()); + + MailboxId mailboxId = mailboxManager.getMailbox(path, mailboxSession).getId(); + + return new SingleMailboxReindexingTask(reIndexerPerformer, mailboxId); } @Override public Task reIndex(MailboxId mailboxId) throws MailboxException { - MailboxSession mailboxSession = mailboxManager.createSystemSession("ReIndexingImap"); - Mailbox mailbox = mapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId); - return new SingleMailboxReindexingTask(reIndexerPerformer, mailbox); + validateIdExists(mailboxId); + + return new SingleMailboxReindexingTask(reIndexerPerformer, mailboxId); } @Override @@ -81,15 +82,22 @@ public Task reIndex(User user) { @Override 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); + MailboxSession mailboxSession = mailboxManager.createSystemSession(path.getUser()); + + MailboxId mailboxId = mailboxManager.getMailbox(path, mailboxSession).getId(); + + return new SingleMessageReindexingTask(reIndexerPerformer, mailboxId, uid); } @Override public Task reIndex(MailboxId mailboxId, MessageUid uid) throws MailboxException { + validateIdExists(mailboxId); + + return new SingleMessageReindexingTask(reIndexerPerformer, mailboxId, uid); + } + + private void validateIdExists(MailboxId mailboxId) throws MailboxException { MailboxSession mailboxSession = mailboxManager.createSystemSession("ReIndexingImap"); - Mailbox mailbox = mapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId); - return new SingleMessageReindexingTask(reIndexerPerformer, mailbox, uid); + mapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId); } } 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 4e49f339b62..ffa623d6b2f 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 @@ -65,8 +65,23 @@ public ReIndexerPerformer(MailboxManager mailboxManager, this.mailboxSessionMapperFactory = mailboxSessionMapperFactory; } - Task.Result reIndex(Mailbox mailbox, ReprocessingContext reprocessingContext) throws MailboxException { - return reIndexSingleMailbox(mailbox.getMailboxId(), reprocessingContext); + Task.Result reIndex(MailboxId mailboxId, ReprocessingContext reprocessingContext) throws MailboxException { + LOGGER.info("Intend to reindex mailbox with mailboxId {}", mailboxId.serialize()); + MailboxSession mailboxSession = mailboxManager.createSystemSession(RE_INDEXING); + Mailbox mailbox = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId); + messageSearchIndex.deleteAll(mailboxSession, mailbox); + try { + return Iterators.toStream( + mailboxSessionMapperFactory.getMessageMapper(mailboxSession) + .findInMailbox(mailbox, MessageRange.all(), MessageMapper.FetchType.Metadata, NO_LIMIT)) + .map(MailboxMessage::getUid) + .map(uid -> handleMessageReIndexing(mailboxSession, mailbox, uid)) + .peek(reprocessingContext::updateAccordingToReprocessingResult) + .reduce(Task::combine) + .orElse(Task.Result.COMPLETED); + } finally { + LOGGER.info("Finish to reindex mailbox with mailboxId {}", mailboxId.serialize()); + } } Task.Result reIndex(ReprocessingContext reprocessingContext) throws MailboxException { @@ -98,9 +113,10 @@ Task.Result reIndex(User user, ReprocessingContext reprocessingContext) throws M } } - Task.Result handleMessageReIndexing(Mailbox mailbox, MessageUid uid) throws MailboxException { - MailboxSession mailboxSession = mailboxManager.createSystemSession(mailbox.getUser()); + Task.Result handleMessageReIndexing(MailboxId mailboxId, MessageUid uid) throws MailboxException { + MailboxSession mailboxSession = mailboxManager.createSystemSession(RE_INDEXING); + Mailbox mailbox = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId); return handleMessageReIndexing(mailboxSession, mailbox, uid); } @@ -108,7 +124,7 @@ private Task.Result reIndex(Stream mailboxIds, ReprocessingContext re return mailboxIds .map(mailboxId -> { try { - return reIndexSingleMailbox(mailboxId, reprocessingContext); + return reIndex(mailboxId, reprocessingContext); } catch (Throwable e) { LOGGER.error("Error while proceeding to full reindexing on mailbox with mailboxId {}", mailboxId.serialize(), e); return Task.Result.PARTIAL; @@ -118,25 +134,6 @@ private Task.Result reIndex(Stream mailboxIds, ReprocessingContext re .orElse(Task.Result.COMPLETED); } - private Task.Result reIndexSingleMailbox(MailboxId mailboxId, ReprocessingContext reprocessingContext) throws MailboxException { - LOGGER.info("Intend to reindex mailbox with mailboxId {}", mailboxId.serialize()); - MailboxSession mailboxSession = mailboxManager.createSystemSession(RE_INDEXING); - Mailbox mailbox = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId); - messageSearchIndex.deleteAll(mailboxSession, mailbox); - try { - return Iterators.toStream( - mailboxSessionMapperFactory.getMessageMapper(mailboxSession) - .findInMailbox(mailbox, MessageRange.all(), MessageMapper.FetchType.Metadata, NO_LIMIT)) - .map(MailboxMessage::getUid) - .map(uid -> handleMessageReIndexing(mailboxSession, mailbox, uid)) - .peek(reprocessingContext::updateAccordingToReprocessingResult) - .reduce(Task::combine) - .orElse(Task.Result.COMPLETED); - } finally { - LOGGER.info("Finish to reindex mailbox with mailboxId {}", mailboxId.serialize()); - } - } - private Task.Result handleMessageReIndexing(MailboxSession mailboxSession, Mailbox mailbox, MessageUid uid) { try { Optional.of(uid) diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java index c3f024be4a7..00f771beca6 100644 --- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java +++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java @@ -24,7 +24,7 @@ import javax.inject.Inject; import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.store.mail.model.Mailbox; +import org.apache.james.mailbox.model.MailboxId; import org.apache.james.task.Task; import org.apache.james.task.TaskExecutionDetails; @@ -33,20 +33,17 @@ public class SingleMailboxReindexingTask implements Task { public static final String MAILBOX_RE_INDEXING = "mailboxReIndexing"; public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation { - private final Mailbox mailbox; + private final MailboxId mailboxId; private final ReprocessingContext reprocessingContext; - AdditionalInformation(Mailbox mailbox, ReprocessingContext reprocessingContext) { - this.mailbox = mailbox; + AdditionalInformation(MailboxId mailboxId, ReprocessingContext reprocessingContext) { + this.mailboxId = mailboxId; this.reprocessingContext = reprocessingContext; } - public String getMailboxPath() { - return mailbox.generateAssociatedPath().asString(); - } public String getMailboxId() { - return mailbox.getMailboxId().serialize(); + return mailboxId.serialize(); } public int getSuccessfullyReprocessMailCount() { @@ -59,22 +56,22 @@ public int getFailedReprocessedMailCount() { } private final ReIndexerPerformer reIndexerPerformer; - private final Mailbox mailbox; + private final MailboxId mailboxId; private final AdditionalInformation additionalInformation; private final ReprocessingContext reprocessingContext; @Inject - public SingleMailboxReindexingTask(ReIndexerPerformer reIndexerPerformer, Mailbox mailbox) { + public SingleMailboxReindexingTask(ReIndexerPerformer reIndexerPerformer, MailboxId mailboxId) { this.reIndexerPerformer = reIndexerPerformer; - this.mailbox = mailbox; + this.mailboxId = mailboxId; this.reprocessingContext = new ReprocessingContext(); - this.additionalInformation = new AdditionalInformation(mailbox, reprocessingContext); + this.additionalInformation = new AdditionalInformation(mailboxId, reprocessingContext); } @Override public Result run() { try { - return reIndexerPerformer.reIndex(mailbox, reprocessingContext); + return reIndexerPerformer.reIndex(mailboxId, reprocessingContext); } catch (MailboxException e) { return Result.PARTIAL; } 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 ef6aa071a1e..749bf361dec 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,7 +25,7 @@ import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.store.mail.model.Mailbox; +import org.apache.james.mailbox.model.MailboxId; import org.apache.james.task.Task; import org.apache.james.task.TaskExecutionDetails; import org.slf4j.Logger; @@ -37,20 +37,16 @@ public class SingleMessageReindexingTask implements Task { public static final String MESSAGE_RE_INDEXING = "messageReIndexing"; public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation { - private final Mailbox mailbox; + private final MailboxId mailboxId; private final MessageUid uid; - AdditionalInformation(Mailbox mailbox, MessageUid uid) { - this.mailbox = mailbox; + AdditionalInformation(MailboxId mailboxId, MessageUid uid) { + this.mailboxId = mailboxId; this.uid = uid; } - public String getMailboxPath() { - return mailbox.generateAssociatedPath().asString(); - } - public String getMailboxId() { - return mailbox.getMailboxId().serialize(); + return mailboxId.serialize(); } public long getUid() { @@ -59,24 +55,24 @@ public long getUid() { } private final ReIndexerPerformer reIndexerPerformer; - private final Mailbox mailbox; + private final MailboxId mailboxId; private final MessageUid uid; private final AdditionalInformation additionalInformation; @Inject - public SingleMessageReindexingTask(ReIndexerPerformer reIndexerPerformer, Mailbox mailbox, MessageUid uid) { + public SingleMessageReindexingTask(ReIndexerPerformer reIndexerPerformer, MailboxId mailboxId, MessageUid uid) { this.reIndexerPerformer = reIndexerPerformer; - this.mailbox = mailbox; + this.mailboxId = mailboxId; this.uid = uid; - this.additionalInformation = new AdditionalInformation(mailbox, uid); + this.additionalInformation = new AdditionalInformation(mailboxId, uid); } @Override public Result run() { try { - return reIndexerPerformer.handleMessageReIndexing(mailbox, uid); + return reIndexerPerformer.handleMessageReIndexing(mailboxId, uid); } catch (MailboxException e) { - LOGGER.warn("Error encounteres while reindexing {} {} : {}", mailbox.getMailboxId(), mailbox.generateAssociatedPath(), uid, e); + LOGGER.warn("Error encounteres while reindexing {} : {}",mailboxId, uid, e); return Result.PARTIAL; } } 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 8a95a85ebac..7161b3813c1 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 @@ -65,8 +65,7 @@ void setUp(CassandraCluster cassandra) { MailboxSessionMapperFactory mailboxSessionMapperFactory = mailboxManager.getMapperFactory(); messageSearchIndex = mock(ListeningMessageSearchIndex.class); reIndexer = new ReIndexerImpl(new ReIndexerPerformer(mailboxManager, messageSearchIndex, mailboxSessionMapperFactory), - mailboxManager, - mailboxSessionMapperFactory); + mailboxManager, mailboxSessionMapperFactory); } @Test 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 1f187d3454b..80bcecde82b 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 @@ -63,8 +63,7 @@ void setUp() throws MailboxException { MailboxSessionMapperFactory mailboxSessionMapperFactory = mailboxManager.getMapperFactory(); messageSearchIndex = mock(ListeningMessageSearchIndex.class); reIndexer = new ReIndexerImpl(new ReIndexerPerformer(mailboxManager, messageSearchIndex, mailboxSessionMapperFactory), - mailboxManager, - mailboxSessionMapperFactory); + mailboxManager, mailboxSessionMapperFactory); } @Test diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java index a6ddc4e37cd..f5e93821866 100644 --- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java +++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java @@ -443,7 +443,6 @@ void mailboxReprocessingShouldNotFailWhenNoMail() throws Exception { .body("status", is("completed")) .body("taskId", is(notNullValue())) .body("type", is(SingleMailboxReindexingTask.MAILBOX_RE_INDEXING)) - .body("additionalInformation.mailboxPath", is("#private:benwa@apache.org:INBOX")) .body("additionalInformation.mailboxId", is(mailboxId.serialize())) .body("additionalInformation.successfullyReprocessMailCount", is(0)) .body("additionalInformation.failedReprocessedMailCount", is(0)) @@ -474,7 +473,6 @@ void mailboxReprocessingShouldReturnTaskDetailsWhenMail() throws Exception { .body("status", is("completed")) .body("taskId", is(notNullValue())) .body("type", is(SingleMailboxReindexingTask.MAILBOX_RE_INDEXING)) - .body("additionalInformation.mailboxPath", is("#private:benwa@apache.org:INBOX")) .body("additionalInformation.mailboxId", is(mailboxId.serialize())) .body("additionalInformation.successfullyReprocessMailCount", is(1)) .body("additionalInformation.failedReprocessedMailCount", is(0)) @@ -610,7 +608,6 @@ void messageReprocessingShouldNotFailWhenUidNotFound() throws Exception { .body("status", is("completed")) .body("taskId", is(notNullValue())) .body("type", is(SingleMessageReindexingTask.MESSAGE_RE_INDEXING)) - .body("additionalInformation.mailboxPath", is("#private:benwa@apache.org:INBOX")) .body("additionalInformation.mailboxId", is(mailboxId.serialize())) .body("additionalInformation.uid", is(1)) .body("startedDate", is(notNullValue())) @@ -641,7 +638,6 @@ void messageReprocessingShouldReturnTaskDetailsWhenMail() throws Exception { .body("status", is("completed")) .body("taskId", is(notNullValue())) .body("type", is(SingleMessageReindexingTask.MESSAGE_RE_INDEXING)) - .body("additionalInformation.mailboxPath", is("#private:benwa@apache.org:INBOX")) .body("additionalInformation.mailboxId", is(mailboxId.serialize())) .body("additionalInformation.uid", is((int) composedMessageId.getUid().asLong())) .body("startedDate", is(notNullValue()))