You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2026/07/17 16:11:00 UTC

[jira] [Created] (CAMEL-24195) camel-aws2-s3 - StreamUploadProducer race condition and timeout task exception handling

Claus Ibsen created CAMEL-24195:
-----------------------------------

             Summary: camel-aws2-s3 - StreamUploadProducer race condition and timeout task exception handling
                 Key: CAMEL-24195
                 URL: https://issues.apache.org/jira/browse/CAMEL-24195
             Project: Camel
          Issue Type: Bug
          Components: camel-aws
            Reporter: Claus Ibsen


Split from CAMEL-24157 (medium-severity findings, group 3).

*StreamUploadProducer race condition and timeout task cancellation*

{{AWS2S3StreamUploadProducer:181-183}} — {{uploadAggregate}} is read and mutated outside the lock in {{processWithoutTimestampGrouping()}}. The timeout task ({{StreamingUploadTimeoutTask.run()}}) acquires the lock and can set {{uploadAggregate = null}}. Race: main thread reads {{uploadAggregate != null}}, timeout task nulls it, main thread dereferences → NPE.

Additionally, {{StreamingUploadTimeoutTask.run()}} does not catch exceptions from {{uploadPart()}}/{{completeUpload()}}. Since {{ScheduledExecutorService.scheduleAtFixedRate}} silently cancels all future executions when the task throws an uncaught exception, any S3 API error in the timeout task permanently disables the timeout flush mechanism for the lifetime of the producer.

Recent CAMEL-24153 fix addressed different bugs (maxRead clamping, orphaned multipart) but did not address the lock-ordering race or exception handling.

*Fix approach:*
- Move the {{uploadAggregate}} reads at lines 181-183 inside the lock
- Wrap the timeout task body in try-catch to log and continue on S3 API errors



--
This message was sent by Atlassian Jira
(v8.20.10#820010)