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

Reply via email to