// Update samples a new value.
func (s *UniformSample) Update(v int64) {
s.mutex.Lock()
defer s.mutex.Unlock()
s.count++
if len(s.values) < s.reservoirSize {
s.values = append(s.values, v)
} else {
r := rand.Int63n(s.count). // -------------------> here
if r < int64(len(s.values)) {
s.values[int(r)] = v
}
}
}
When latency increase, the goroutine stack: