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