in banyand/tsdb/block_ctrl.go [235:275]
func (bc *blockController) create(start time.Time) (*block, error) {
start = bc.Standard(start)
if start.Before(bc.segTimeRange.Start) {
start = bc.segTimeRange.Start
}
if !start.Before(bc.segTimeRange.End) {
return nil, bucket.ErrNoMoreBucket
}
bc.Lock()
defer bc.Unlock()
var next *block
for _, s := range bc.lst {
if s.Start.Equal(start) {
return s, nil
}
if next == nil && s.Start.After(start) {
next = s
}
}
stdEnd := bc.blockSize.nextTime(start)
var end time.Time
if next != nil && next.Start.Before(stdEnd) {
end = next.Start
} else {
end = stdEnd
}
if end.After(bc.segTimeRange.End) {
end = bc.segTimeRange.End
}
if err := mkdirIfNotExist(blockTemplate, bc.location, bc.Format(start)); err != nil {
return nil, err
}
b, err := bc.load(start, end, bc.location)
if err != nil {
return nil, err
}
if err = b.openSafely(); err != nil {
return nil, err
}
return b, nil
}