davsclaus opened a new pull request, #24863: URL: https://github.com/apache/camel/pull/24863
## Summary Fixes 14 high-severity findings from the July 2026 deep code review of camel-aws2-s3, -sqs, -sns, -kinesis, and -ddb (umbrella issue CAMEL-24156). Three additional findings (KCL checkpoint/session credentials, Kinesis shard thread-safety) were already fixed by CAMEL-24191 and CAMEL-24080. ### camel-aws2-s3 - Close `ResponseInputStream` when `ignoreBody=true` to prevent connection pool exhaustion after ~50 exchanges - Use dynamic bucket name (from header/expression) in all multipart upload API calls instead of raw configured bucket - Close `FileInputStream` on the `contentLength < partSize` shortcut path where `doPutObject` uses `RequestBody.fromFile()` and the stream is never consumed ### camel-aws2-sqs - Skip per-message `DelaySeconds` when `delayQueue=true` (delay is queue-level) or when the queue is FIFO (AWS rejects per-message delay with `InvalidParameterValue`) ### camel-aws2-sns - Set `ContentBasedDeduplication` attribute on auto-created FIFO topics when `useContentBasedDeduplication` strategy is configured ### camel-aws2-kinesis - Initialize `shardClosed` field to its documented default (`ignore`) — was null, causing NPE on first shard rotation - Handle `ExpiredIteratorException` by invalidating the cached iterator and requesting a fresh one, preventing permanent consumer stall - Reset client fields to null in `KinesisConnection.close()` so subsequent calls create a fresh client instead of returning a closed one - Always create a new `KinesisResumeAction` per shard instead of reusing a shared registry instance mutated concurrently from `parallelStream` ### camel-aws2-ddb (stream) - Return a defensive copy from `getShardIterators()` to prevent `ConcurrentModificationException` when `updateShardIterator` modifies the map during poll iteration - Paginate `DescribeStream` responses using `lastEvaluatedShardId` so streams with >100 shards are fully discovered - Fall back to `TRIM_HORIZON` when recovering from an expired iterator with no previously seen sequence number ### camel-aws2-ddb (transformer) - Use `Number` instead of separate `Integer`/`Double` checks so `Long`, `BigInteger`, `BigDecimal`, and `Float` values are stored as DynamoDB Number (`N`) type instead of String (`S`). Also fixes `List<Long>`/`List<Double>` to become NumberSet (`NS`) instead of StringSet (`SS`). ## Test plan - [x] camel-aws2-ddb module tests pass (62 tests) - [x] All affected modules compile successfully - [ ] Verify S3 getObject with `ignoreBody=true` no longer leaks connections - [ ] Verify S3 multipart upload uses override bucket name when header is set - [ ] Verify SQS FIFO sends succeed without per-message DelaySeconds - [ ] Verify SNS FIFO topic auto-creation with content-based deduplication - [ ] Verify Kinesis consumer recovers from expired shard iterators - [ ] Verify DDB stream consumer handles shard retirement without CME _Claude Code on behalf of davsclaus_ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.6 <[email protected]> -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
