release-23.1: kvserver: don't report unreachable followers when quiesced #106251
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 #104212.
/cc @cockroachdb/release
Previously,
Replica.tick()
could mark a Raft follower as unreachable even if the replica was quiesced, transitioning it toStateProbe
. This in turn can prevent lease transfers, which require the target to be up-to-date. However, with the range quiesced, the follower wouldn't transition back to healthy until the leader unquiesced for some reason.We normally don't quiesce with a follower that isn't caught up, and applying internal state transitions while the range is quiesced is problematic since it won't have a chance to react to those state transitions.
This patch instead defers marking the follower as unreachable until the next tick, whenever the range unquiesces, such that the leader can detect the follower's recovery. Since ranges aren't allowed to quiesce when they have outstanding ready events or log entries, we're likely to detect unavailability and mark the follower as unavailable on the next tick before quiescing anyway.
Resolves #103828.
Epic: none
Release note: None