You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2025/02/26 09:28:31 UTC

(camel) 02/02: CAMEL-21769: camel-aws-sqs - Error is causing the sqs message to be extended forever

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch camel-4.10.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 144402aab4399ebd0e1a0a858cefa1dc44d981d0
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Feb 26 10:27:47 2025 +0100

    CAMEL-21769: camel-aws-sqs - Error is causing the sqs message to be extended forever
---
 .../camel/component/aws2/sqs/Sqs2Consumer.java       | 20 ++++++++++----------
 .../sqs/SqsBatchConsumerConcurrentConsumersIT.java   |  2 +-
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Consumer.java b/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Consumer.java
index 21c06b9f503..1e496915a18 100644
--- a/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Consumer.java
+++ b/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Consumer.java
@@ -169,11 +169,12 @@ public class Sqs2Consumer extends ScheduledBatchPollingConsumer {
             // use default consumer callback
             AsyncCallback cb = defaultConsumerCallback(exchange, true);
             try {
-                Boolean a = getAsyncProcessor().process(exchange, cb);
+                getAsyncProcessor().process(exchange, cb);
             } catch (Error e) {
-                LOG.debug("Error processing exchange, stopping exchange from extending its visibility", e);
-                if (timeoutExtender != null && timeoutExtender.entries != null) {
-                    timeoutExtender.entries.remove(exchange.getExchangeId());
+                if (this.timeoutExtender != null) {
+                    // fatal error so stop the timeout extender
+                    timeoutExtender.cancel();
+                    timeoutExtender.entries.clear();
                 }
                 throw e;
             }
@@ -189,7 +190,6 @@ public class Sqs2Consumer extends ScheduledBatchPollingConsumer {
      */
     protected void processCommit(Exchange exchange) {
         try {
-
             if (shouldDelete(exchange)) {
                 String receiptHandle = exchange.getIn().getHeader(Sqs2Constants.RECEIPT_HANDLE, String.class);
                 DeleteMessageRequest.Builder deleteRequest
@@ -491,21 +491,21 @@ public class Sqs2Consumer extends ScheduledBatchPollingConsumer {
 
     /**
      * Task responsible for polling the messages from Amazon SQS server.
-     * <p />
+     * <p/>
      * Depending on the configuration, the polling may involve sending one or more receive requests in a single task
      * call. The number of send requests depends on the {@link Sqs2Endpoint#getMaxMessagesPerPoll()} configuration. The
      * Amazon SQS receive API has upper limit of maximum 10 messages that can be fetched with a single request. To
      * enable handling greater number of messages fetched per poll, multiple requests are being send asynchronously and
      * then joined together.
-     * <p />
+     * <p/>
      * To preserver the ordering, an optional {@link Sqs2Configuration#getSortAttributeName()} can be configured. When
      * specified, all messages collected from the concurrent requests are being sorted using this attribute.
-     * <p />
+     * <p/>
      * In addition to that, the task is also responsible for handling auto-creation of the SQS queue, when its missing.
      * The queue is created when receive request returns an error about the missing queue and the
      * {@link Sqs2Configuration#isAutoCreateQueue()} is enabled. In such case, the queue will be created and the task
      * will return empty list of messages.
-     * <p />
+     * <p/>
      * If the queue creation fails with an error related to recently deleted queue, the queue creation will be postponed
      * for at least 30 seconds. To prevent task from blocking the consumer thread, the 30 second timeout is being
      * checked in each task call. If the scheduled time for queue auto-creation was not reached yet, the task will
@@ -531,7 +531,7 @@ public class Sqs2Consumer extends ScheduledBatchPollingConsumer {
          * <pre>
          * 0
          * </pre>
-         *
+         * <p>
          * means there is no schedule.
          */
         private final AtomicLong queueAutoCreationScheduleTime = new AtomicLong(0L);
diff --git a/components/camel-aws/camel-aws2-sqs/src/test/java/org/apache/camel/component/aws2/sqs/SqsBatchConsumerConcurrentConsumersIT.java b/components/camel-aws/camel-aws2-sqs/src/test/java/org/apache/camel/component/aws2/sqs/SqsBatchConsumerConcurrentConsumersIT.java
index 2b2d1ab929f..11f2d87f714 100644
--- a/components/camel-aws/camel-aws2-sqs/src/test/java/org/apache/camel/component/aws2/sqs/SqsBatchConsumerConcurrentConsumersIT.java
+++ b/components/camel-aws/camel-aws2-sqs/src/test/java/org/apache/camel/component/aws2/sqs/SqsBatchConsumerConcurrentConsumersIT.java
@@ -34,7 +34,7 @@ public class SqsBatchConsumerConcurrentConsumersIT extends CamelTestSupport {
     @Test
     public void receiveBatch() throws Exception {
         mock.expectedMessageCount(6);
-        MockEndpoint.assertIsSatisfied(context, 3, TimeUnit.SECONDS);
+        MockEndpoint.assertIsSatisfied(context, 10, TimeUnit.SECONDS);
     }
 
     @BindToRegistry("amazonSQSClient")