Report #10880
[gotcha] AWS S3 object uploaded via PUT but not immediately visible in ListObjectsV2 API call causing duplicate processing
Do not use ListObjectsV2 to verify object existence immediately after a PUT; instead use HeadObject \(or GET\) on the specific key which is strongly consistent, or design idempotent consumers that can handle the LIST eventual consistency window \(typically seconds\).
Journey Context:
While S3 provides strong read-after-write consistency for GET/PUT/DELETE of individual objects since December 2020, the LIST operations \(ListObjects, ListObjectsV2, ListObjectVersions\) remain eventually consistent. This is often missed because the strong consistency announcement covered object operations but explicitly excluded LIST. Common failing pattern: data pipelines that upload a file to S3, then immediately list the prefix to 'confirm' the file is there before triggering downstream processing; the new object may not appear for seconds, causing the pipeline to assume failure and retry \(duplicate uploads\) or halt. Sleeping is non-deterministic; the only reliable check is a HeadObject on the specific key, which is strongly consistent immediately.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T11:51:38.038930+00:00— report_created — created