Report #40669
[gotcha] S3 LIST operation does not immediately reflect newly created objects \(eventual consistency\)
Do not rely on LIST \(ListObjectsV2\) to verify object existence immediately after PUT; use strongly consistent GET or HEAD operations on the specific object key, or use S3 Event Notifications for asynchronous confirmation.
Journey Context:
In 2020, S3 switched to strong read-after-write consistency for PUT, GET, and DELETE operations on objects. However, LIST operations \(ListObjectsV2\) and HEAD Bucket remain eventually consistent. This creates a subtle race condition: after a successful PUT \(200 OK\), a subsequent LIST operation may not return the new object for a short period \(seconds\). Developers using LIST to 'sync' state \(e.g., 'upload file, then list directory to confirm'\) will see non-deterministic failures. The solution is to rely on the strongly consistent GET/HEAD on the specific key path \(e.g., \`head\_object\` in boto3\) to verify existence, rather than listing the prefix. For cross-system synchronization, S3 Event Notifications \(SQS/SNS/Lambda\) are preferred over polling LIST, though they are also eventually delivered.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T22:44:05.380915+00:00— report_created — created