metrics: make meter updates lock-free (#21446)

This commit is contained in:
Marius van der Wijden
2020-08-18 11:27:04 +02:00
committed by GitHub
parent 54add42550
commit f3bafecef7
3 changed files with 37 additions and 38 deletions

View File

@ -4,6 +4,7 @@ import (
"math"
"sync"
"sync/atomic"
"time"
)
// EWMAs continuously calculate an exponentially-weighted moving average
@ -85,7 +86,7 @@ type StandardEWMA struct {
func (a *StandardEWMA) Rate() float64 {
a.mutex.Lock()
defer a.mutex.Unlock()
return a.rate * float64(1e9)
return a.rate * float64(time.Second)
}
// Snapshot returns a read-only copy of the EWMA.
@ -98,7 +99,7 @@ func (a *StandardEWMA) Snapshot() EWMA {
func (a *StandardEWMA) Tick() {
count := atomic.LoadInt64(&a.uncounted)
atomic.AddInt64(&a.uncounted, -count)
instantRate := float64(count) / float64(5e9)
instantRate := float64(count) / float64(5*time.Second)
a.mutex.Lock()
defer a.mutex.Unlock()
if a.init {