Do not block on distributed unlocks (#19952)

* Prevents blocking when losing quorum (standard on cluster restarts).
* Time out to prevent endless buildup. Timed-out remote locks will be canceled because they miss the refresh anyway.
* Reduces latency for all calls since the wall time for the roundtrip to remotes no longer adds to the requests.
This commit is contained in:
Klaus Post
2024-06-19 07:35:19 -07:00
committed by GitHub
parent 69e41f87ef
commit a6ffdf1dd4
2 changed files with 26 additions and 7 deletions

View File

@@ -293,6 +293,8 @@ func TestUnlockShouldNotTimeout(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)
defer cancel()
dm.Unlock(ctx)
// Unlock is not blocking. Try to get a new lock.
dm.GetLock(ctx, nil, id, source, Options{Timeout: 5 * time.Minute})
unlockReturned <- struct{}{}
}()