[ 
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)

Reply via email to