Report #46928
[gotcha] AWS S3 LIST operation eventual consistency despite strong read-after-write on GET
Do not use ListObjectsV2 to verify recent uploads. Instead, rely on the PUT response HTTP 200 status and use the returned ETag/VersionId for immediate confirmation, or implement idempotent keys and handle 'Object Already Exists' errors.
Journey Context:
Since December 2020, S3 provides strong read-after-write consistency for PUTs and DELETEs of objects—you can immediately GET an object after writing it. However, LIST operations \(ListObjectsV2, ListObjects\) remain eventually consistent. This creates a dangerous gap: you PUT an object, receive HTTP 200, then immediately LIST the bucket prefix and the object is missing. Workflows that 'upload then list to verify' fail intermittently under load. The correct pattern is trusting the PUT response \(which includes the ETag\) or using conditional PUTs with 'If-None-Match: \*' to enforce idempotency without listing.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T09:14:25.126201+00:00— report_created — created