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 d7475326f14602cf33d40dba15952cbea4d7c278 Author: Benoit TELLIER <btell...@linagora.com> AuthorDate: Tue Dec 19 10:21:30 2023 +0100 JAMES-3944 Reprocessing should reset loop detection Otherwise, there is no chance to reprocess correctly a mail in rrt-error after fixing the loop. --- .../webadmin/service/ReprocessingService.java | 3 +++ .../routes/MailRepositoriesRoutesTest.java | 30 ++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingService.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingService.java index af5d104620..b6f5f978ec 100644 --- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingService.java +++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingService.java @@ -19,6 +19,8 @@ package org.apache.james.webadmin.service; +import static org.apache.mailet.LoopPrevention.RECORDED_RECIPIENTS_ATTRIBUTE_NAME; + import java.io.Closeable; import java.io.IOException; import java.util.Optional; @@ -112,6 +114,7 @@ public class ReprocessingService { try { incrementRetries(mail); configuration.getTargetProcessor().ifPresent(mail::setState); + mail.removeAttribute(RECORDED_RECIPIENTS_ATTRIBUTE_NAME); mailQueue.enQueue(mail); if (configuration.isConsume()) { repository.remove(key); diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java index 499afc7ba1..7dee3d9f6f 100644 --- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java +++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java @@ -85,6 +85,7 @@ import org.apache.james.webadmin.service.WebAdminClearMailRepositoryTaskAddition import org.apache.james.webadmin.utils.ErrorResponder; import org.apache.james.webadmin.utils.JsonTransformer; import org.apache.mailet.Attribute; +import org.apache.mailet.LoopPrevention; import org.apache.mailet.Mail; import org.apache.mailet.PerRecipientHeaders.Header; import org.apache.mailet.base.test.FakeMail; @@ -1428,6 +1429,35 @@ class MailRepositoriesRoutesTest { .containsOnly(NAME_1, NAME_2); } + @Test + void reprocessingAllTaskShouldResetLoopDetection() throws Exception { + MailRepository mailRepository1 = mailRepositoryStore.create(URL_MY_REPO); + MailRepository mailRepository2 = mailRepositoryStore.create(URL_MY_REPO_OTHER); + FakeMail mail = FakeMail.builder() + .name(NAME_1) + .mimeMessage(MimeMessageUtil.mimeMessageFromBytes(MESSAGE_BYTES)) + .build(); + LoopPrevention.RecordedRecipients.fromMail(mail).merge(new MailAddress("b...@domain.tld")).recordOn(mail); + mailRepository1.store(mail); + + String taskId = with() + .param("action", "reprocess") + .patch(PATH_ESCAPED_MY_REPO + "/mails") + .jsonPath() + .get("taskId"); + + with() + .basePath(TasksRoutes.BASE) + .get(taskId + "/await"); + + assertThat(spoolQueue.browse()) + .toIterable() + .extracting(ManageableMailQueue.MailQueueItemView::getMail) + .extracting(LoopPrevention.RecordedRecipients::fromMail) + .extracting(LoopPrevention.RecordedRecipients::getRecipients) + .allSatisfy(recordedRecipients -> assertThat(recordedRecipients).isEmpty()); + } + @Test void reprocessingAllTaskShouldPreserveStateWhenProcessorIsNotSpecified() throws Exception { MailRepository mailRepository = mailRepositoryStore.create(URL_MY_REPO); --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org