[
https://issues.apache.org/jira/browse/CAMEL-24156?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen reassigned CAMEL-24156:
-----------------------------------
Assignee: Claus Ibsen
> camel-aws2 - Umbrella: high-severity findings from July 2026 review (S3, SQS,
> SNS, Kinesis, DDB)
> ------------------------------------------------------------------------------------------------
>
> Key: CAMEL-24156
> URL: https://issues.apache.org/jira/browse/CAMEL-24156
> Project: Camel
> Issue Type: Bug
> Components: camel-aws
> Reporter: Federico Mariani
> Assignee: Claus Ibsen
> Priority: Major
> Labels: review-2026-07
> Attachments: camel-aws-review-2026-07.md
>
>
> Umbrella for the high-severity findings of a deep code review of
> camel-aws2-s3, -sqs, -sns, -kinesis (incl. firehose) and -ddb (incl.
> ddbstream) on main (4.22.0-SNAPSHOT). The full findings document (with
> failure scenarios and suggested fixes per item) is attached. The two critical
> findings are tracked separately with failing reproducer tests attached: the
> S3 streaming truncation and the DDB Streams resharding data loss.
> Individual findings can be split out into their own issues as they are picked
> up.
> *camel-aws2-s3*
> # {{AWS2S3Producer:645}} — {{operation=getObject&ignoreBody=true}} leaks the
> ResponseInputStream; connection pool exhausted after ~50 exchanges
> (CAMEL-21116 follow-up).
> # {{AWS2S3Producer:222-305}} — {{processMultiPart}} computes the dynamic
> bucket name ({{CamelAwsS3OverrideBucketName}} / simple expressions) but
> builds all four multipart requests with the raw configured bucket; behavior
> silently diverges by payload size.
> # {{AWS2S3Producer:187-217}} — FileInputStream opened for File bodies is
> never closed on the {{contentLength < partSize}} shortcut; one fd leaked per
> small file in multiPartUpload mode.
> *camel-aws2-sqs*
> # {{Sqs2Producer:270-300}} — per-message {{DelaySeconds}} is applied even
> when {{delayQueue=true}}; on FIFO queues every send fails with
> InvalidParameterValue, on standard queues the queue-level option is defeated.
> *camel-aws2-sns*
> # {{Sns2Endpoint:147-150}} — auto-created FIFO topics never get
> {{ContentBasedDeduplication}}, so
> {{messageDeduplicationIdStrategy=useContentBasedDeduplication}} makes every
> publish fail (SQS twin handles this correctly).
> *camel-aws2-kinesis*
> # {{Kinesis2Configuration:71}} — {{shardClosed}} default is only declared in
> the annotation; the field is null and {{handleClosedShard}} NPEs on the first
> shard rotation with default config.
> # {{Kinesis2Consumer:176-297}} — expired shard iterators are never
> invalidated (no ExpiredIteratorException handling in the module); any
> >5-minute gap stalls the consumer permanently.
> # {{KinesisResumeAction:62-67}} + {{KinesisResumeStrategy:60-63}} — resume
> support broken for multi-shard streams: evalEntry overwrites the request with
> every cache entry, KinesisOffset values hit a String cast
> (ClassCastException), and the single registry action is mutated concurrently
> from parallelStream.
> # {{KinesisConnection:38-64}} + {{Kinesis2Endpoint:80-93}} — the
> component-wide connection caches the first endpoint's client for all
> endpoints (second endpoint's region/credentials silently ignored) and
> {{doStop}} closes the shared client without resetting the cache.
> # {{KclKinesis2Consumer:193-232}} — KCL consumer never checkpoints during
> processing, swallows all processing Throwables (not even logged with stack
> trace), then checkpoints unconditionally at shutdown — data loss on failure,
> mass reprocessing on crash.
> # {{KclKinesis2Consumer:94-133}} — session-credentials branch is unreachable
> ({{accessKey && secretKey && sessionToken}} tested after {{accessKey &&
> secretKey}}); KCL DynamoDB/CloudWatch clients fail with STS temporary
> credentials.
> *camel-aws2-ddb (ddbstream)*
> # {{Ddb2StreamConsumer:65,93}} + {{ShardIteratorHandler:77-86}} — internal
> iterator map returned by reference and structurally modified during poll
> iteration -> ConcurrentModificationException whenever a shard retires while
> >=2 shards are tracked.
> # {{ShardIteratorHandler:55-57}} — DescribeStream pagination
> ({{lastEvaluatedShardId}}) ignored; streams with >100 shards silently lose
> partitions.
> # {{ShardIteratorHandler:88-92}} — expired-iterator recovery sends
> {{AFTER_SEQUENCE_NUMBER}} with null sequence when no record was seen;
> consumer permanently stuck failing.
> *camel-aws2-ddb (transformer)*
> # {{Ddb2JsonDataTypeTransformer:197-247}} — Long/BigInteger/BigDecimal values
> (e.g. epoch millis) and numeric arrays are stored as DynamoDB
> String/StringSet types instead of N/NS (CAMEL-22038 only fixed scalar Double).
> _This issue was researched and filed by Claude Code (AI) on behalf of
> Federico Mariani (fmariani). Full findings document from the review is
> attached to the umbrella issues._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)