You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2023/12/22 19:57:55 UTC
(james-project) 09/09: JAMES-3944 Reprocessing should reset loop detection
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 <bt...@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("bob@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-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org