milvus/internal/dataservice/channel.go

48 lines
1.2 KiB
Go

package dataservice
import "fmt"
type (
channelRange []string
insertChannelMapper struct {
channelRanges []channelRange
}
)
func (cr channelRange) Contains(channelName string) bool {
for _, name := range cr {
if name == channelName {
return true
}
}
return false
}
func newInsertChannelMapper() *insertChannelMapper {
mapper := &insertChannelMapper{channelRanges: make([]channelRange, Params.QueryNodeNum)}
channelNames, numOfChannels, numOfQueryNodes := Params.InsertChannelNames, len(Params.InsertChannelNames), Params.QueryNodeNum
div, rem := numOfChannels/numOfQueryNodes, numOfChannels%numOfQueryNodes
for i, j := 0, 0; i < numOfChannels; j++ {
numOfRange := div
if j < rem {
numOfRange++
}
cRange := channelRange{}
k := i + numOfRange
for ; i < k; i++ {
cRange = append(cRange, channelNames[i])
}
mapper.channelRanges = append(mapper.channelRanges, cRange)
}
return mapper
}
func (mapper *insertChannelMapper) GetChannelRange(channelName string) (channelRange, error) {
for _, cr := range mapper.channelRanges {
if cr.Contains(channelName) {
return cr, nil
}
}
return nil, fmt.Errorf("channel name %s not found", channelName)
}