Andrea Cosentino created CAMEL-24082:
----------------------------------------

             Summary: camel-aws-cloudtrail: consumer loses events (static 
cursor, no pagination, time-window skip)
                 Key: CAMEL-24082
                 URL: https://issues.apache.org/jira/browse/CAMEL-24082
             Project: Camel
          Issue Type: Bug
          Components: camel-aws
            Reporter: Andrea Cosentino
            Assignee: Andrea Cosentino
             Fix For: 4.14.9, 4.22.0, 4.18.4


The camel-aws-cloudtrail consumer can silently drop CloudTrail events:

1. *Shared static cursor* — {{CloudtrailConsumer.lastTime}} is declared 
{{private static Instant lastTime}}. Two cloudtrail routes in the same JVM 
(different eventSource/region) overwrite each other's cursor, and the value 
leaks across consumer restarts.
2. *No pagination* — {{poll()}} issues a single {{lookupEvents(...)}} call and 
never follows {{response.nextToken()}}. Combined with the default {{maxResults 
= 1}}, at most one event per poll is ever retrieved; the rest of the window is 
discarded.
3. *Time-window skip* — the cursor is advanced to the newest returned event's 
time and the next request uses {{startTime(lastTime.plusMillis(1000))}}. Events 
that occur within that 1s window (or share the newest event's timestamp) after 
the newest processed event are skipped forever, and there is no event-id 
de-duplication.

Code references (main): CloudtrailConsumer.java lines 36 (static field), 44-67 
(poll), and CloudtrailConfiguration.java line 52 (maxResults default 1).

Fix direction:
- Make {{lastTime}} an instance field, initialized to the consumer start time 
so polling tails from startup rather than replaying history.
- Paginate the lookup by following {{nextToken()}} until the window is drained.
- Advance the cursor using the newest event time as an inclusive {{startTime}} 
and de-duplicate the boundary events by {{eventId}} (bounded to the 
newest-timestamp second) instead of the lossy +1000ms skip.
- Raise the default {{maxResults}} to a sane page size (AWS LookupEvents allows 
up to 50); with pagination this becomes a page-size knob, not a per-poll cap.

This changes first-poll behavior (it no longer emits the single most-recent 
historical event) and the default maxResults, so an upgrade-guide note is 
required. The module currently ships no unit tests; tests will be added with 
the fix. Present on camel-4.18.x and camel-4.14.x — backport to both.

Found during an agent-assisted audit of the AWS components; verified by reading 
the cited code.



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

Reply via email to