mirror of
https://github.com/versity/versitygw.git
synced 2026-09-22 16:04:15 +00:00
A native completion call fires the teardown callback before it returns, so an outcome recorded after the call is too late: every successful transfer published as an expiry, and PUT failures and panics lost their real outcome to the callback's placeholder. The READY handler now reserves the session record before invoking any completion call. A reserved record is invisible to the callback, and the handler publishes the real outcome exactly once after the result is known. A deferred safety net publishes on panic unwinds before the unwind finalizer retires the session. Successful PUTs forward the backend-assigned ETag and version into the object-created event, and the audit record carries the transferred byte count as the object size. A READY whose re-authorization fails now publishes the denial itself before canceling, instead of letting the cancel publish an expiry. The native side keeps the terminal reason on every failure exit: a verify failure no longer overwrites the wire-failure outcome, and QP transition or re-arm failures record the wire failure they return. The unclaimed-teardown classification follows the wire mapping, so every transfer-level failure the client would see as 502 publishes as the same 502 instead of a diverging per-cause code. The metrics bucket tag is documented as absent on synthesized publications: route parameters come from route matching, which a synthesized request never runs; the audit log derives the bucket from the path and stays accurate.