b0d60b3e8a
AcquireLock stored a constant value and ReleaseLock was an unconditional DEL, so a holder that outlived its TTL deleted the next holder's lock. This hits Fetch, Evict and gems push/yank. - store a random owner token with SET NX PX and return it from AcquireLock - release via a Lua compare-and-delete keyed on that token - carry the token through Fetch, Evict and Engine.Lock's release func - release the Fetch lock with an uncancelled context - make Engine.Lock's busy 503 message generic Reviewed-on: #156 Co-authored-by: unkin-agent <unkin-agent@unkin.net> Co-committed-by: unkin-agent <unkin-agent@unkin.net>