metric: remove mutex around windowed histogram update #140409
+28
−36
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.
Previously, we used an
RWMutex
to serialize access to the windowed histogram. This was done because there's a rotation that needs to happen that moves the currently active histogram into theprev
variable and creates a fresh one to update incur
. This is done to maintain the window.This change limits the mutex usage to rotation and window snapshotting, removing the need to take a read lock during updates since we can atomically grab the
cur
histogram.There's a bit of nuance to manage around the fact that
prev
can be nil on the first iteration, sincecur
is the first histogram. After a single rotation,prev
will not be nil again.The prometheus histogram itself (what's stored in the
atomic.Value
) is thread-safe.Part of #133306
Release note: None