release-21.2: kvserver: fix nil pointer dereferencing in replicaRankings.topQPS
#74515
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 #74507 on behalf of @erikgrinaker.
/cc @cockroachdb/release
If
replicaRankings.topQPS()
was called before a QPS accumulator hadbeen set for the rankings, it would attempt to dereference a nil pointer
and panic. This could happen e.g. if the status server's
/_status/hotranges
endpoint was accessed during node startup.The initialization story here is a bit unclear -- it appears that the
accumulator is set up in
Store.Capacity()
, which is called byStore.Descriptor()
. So this will only be initialized once the storedescriptor is requested by someone, e.g. during
Store.GossipStore()
orMetricsRecorder.GenerateNodeStatus()
. I haven't made an attempt atreviewing or revising this.
This patch explicitly checks if a QPS accumulator has been set before
attempting to access it, avoiding the nil pointer dereferencing.
Release note (bug fix): Fixed a panic when attempting to access the
hottest ranges (e.g. via the
/_status/hotranges
endpoint) beforeinitial statistics had been gathered.
Release justification: fixes a node crash.