You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2020/07/03 10:48:25 UTC
[james-project] 05/07: JAMES-3290 Prevent an infinite loop when
RabbitMQMailQueue message is in an invalid format.
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 fd57eb747a7d2216d6be7771a77026305c360abb
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Jul 2 10:01:01 2020 +0700
JAMES-3290 Prevent an infinite loop when RabbitMQMailQueue message is in an invalid format.
The relevant mail data is still stored in the MailQueue browse projection, preventing data loss.
---
.../src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java | 6 ++++--
.../java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java | 1 -
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java
index 09a3df6..bacd1ff 100644
--- a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java
+++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java
@@ -22,7 +22,6 @@ package org.apache.james.queue.rabbitmq;
import static org.apache.james.queue.api.MailQueue.DEQUEUED_METRIC_NAME_PREFIX;
import java.io.Closeable;
-import java.io.IOException;
import java.util.function.Consumer;
import org.apache.james.backends.rabbitmq.ReceiverProvider;
@@ -158,7 +157,10 @@ class Dequeuer implements Closeable {
private Mono<MailReferenceDTO> toMailReference(Delivery getResponse) {
return Mono.fromCallable(getResponse::getBody)
.map(Throwing.function(mailReferenceSerializer::read).sneakyThrow())
- .onErrorResume(IOException.class, e -> Mono.error(new MailQueue.MailQueueException("Failed to parse DTO", e)));
+ .onErrorResume(e -> {
+ LOGGER.error("Fail to deserialize MailReferenceDTO. Discarding this message to prevent an infinite loop.", e);
+ return Mono.empty();
+ });
}
}
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
index 4b2bd9b..abae166 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
@@ -382,7 +382,6 @@ class RabbitMQMailQueueTest {
assertThat(dequeuedNames).isEmpty();
}
- @Disabled("JAMES-3291 Badly formatted mailqueue causes RabbitMQMailQueue to crash")
@Test
void dequeueShouldNotAbortProcessingUponSerializationIssuesErrors() throws Exception {
String name1 = "myMail1";
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org