in banyand/tsdb/bucket/strategy.go [140:173]
func (s *Strategy) observe(c Channel) bool {
var next Reporter
moreBucket := true
for {
select {
case status, more := <-c:
if !more {
return moreBucket
}
r := ratio(status.Volume) / ratio(status.Capacity)
atomic.StoreUint64(&s.currentRatio, math.Float64bits(float64(r)))
if r >= s.ratio && next == nil && moreBucket {
n, err := s.ctrl.Next()
if errors.Is(err, ErrNoMoreBucket) {
moreBucket = false
} else if err != nil {
s.logger.Err(err).Msg("failed to create the next bucket")
} else {
s.logger.Info().Stringer("next", n).Msg("created the next bucket")
next = n
}
}
if r >= 1.0 {
s.ctrl.OnMove(s.current.Load().(Reporter), next)
if next != nil {
s.current.Store(next)
}
return moreBucket
}
case <-s.closer.CloseNotify():
return false
}
}
}