release-20.2: kvserver: stop transferring leases to replicas that may need snapshots #69801
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Backport 1/1 commits from #69696.
/cc @cockroachdb/release
This commit disallows the
replicateQueue
from initiating leasetransfers to replicas that may be in need of a raft snapshot. Note that
the
StoreRebalancer
already has a stronger form of this check since itdisallows lease transfers to replicas that are lagging behind the raft
leader (which includes the set of replicas that need a snapshot).
In cases where the raft leader is not the leaseholder, we disallow the
replicateQueue from any sort of lease transfer until leaseholdership and
leadership are collocated. We rely on calls to
maybeTransferRaftLeadershipToLeaseholderLocked()
(called on every rafttick) to make sure that such periods of leadership / leaseholdership
misalignment are ephemeral and rare.
Alternative to #63507
Release justification: bug fix
Resolves #61604
Release note (bug fix): Fixes a bug that can cause prolonged
unavailability due to lease transfer to a replica that may be in need of
a raft snapshot.