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]

Reply via email to