|
|
@ -76,22 +76,23 @@ func (rw *RollingWindow) updateOffset() {
|
|
|
|
span := rw.span()
|
|
|
|
span := rw.span()
|
|
|
|
if span > 0 {
|
|
|
|
if span > 0 {
|
|
|
|
offset := rw.offset
|
|
|
|
offset := rw.offset
|
|
|
|
// reset expired buckets
|
|
|
|
|
|
|
|
start := offset + 1
|
|
|
|
start := offset + 1
|
|
|
|
steps := start + span
|
|
|
|
steps := start + span
|
|
|
|
offset = (offset + span) % rw.size
|
|
|
|
|
|
|
|
var remainder int
|
|
|
|
var remainder int
|
|
|
|
if steps > rw.size {
|
|
|
|
if steps > rw.size {
|
|
|
|
remainder = steps - rw.size
|
|
|
|
remainder = steps - rw.size
|
|
|
|
steps = rw.size
|
|
|
|
steps = rw.size
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// reset expired buckets
|
|
|
|
for i := start; i < steps; i++ {
|
|
|
|
for i := start; i < steps; i++ {
|
|
|
|
rw.win.resetBucket(i)
|
|
|
|
rw.win.resetBucket(i)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for i := 0; i < remainder; i++ {
|
|
|
|
for i := 0; i < remainder; i++ {
|
|
|
|
rw.win.resetBucket(i)
|
|
|
|
rw.win.resetBucket(i)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
rw.offset = offset
|
|
|
|
|
|
|
|
|
|
|
|
rw.offset = (offset + span) % rw.size
|
|
|
|
rw.lastTime = timex.Now()
|
|
|
|
rw.lastTime = timex.Now()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|