Multipart finalization is not the only retry boundary. Abort can succeed in object storage while the HTTP response is lost, leaving your database convinced the upload is active.
Model abort as a state transition, not a button wired directly to an SDK call:
active → aborting → aborted
└──→ cleanup_pending
Enter fullscreen mode






