2020-11-26 08:01:31 +00:00
|
|
|
package querynode
|
|
|
|
|
|
|
|
import (
|
|
|
|
"log"
|
2020-12-04 06:18:17 +00:00
|
|
|
"os"
|
2020-11-26 08:01:31 +00:00
|
|
|
"strconv"
|
|
|
|
|
|
|
|
"github.com/zilliztech/milvus-distributed/internal/util/paramtable"
|
|
|
|
)
|
|
|
|
|
|
|
|
type ParamTable struct {
|
|
|
|
paramtable.BaseTable
|
|
|
|
}
|
|
|
|
|
|
|
|
var Params ParamTable
|
|
|
|
|
|
|
|
func (p *ParamTable) Init() {
|
|
|
|
p.BaseTable.Init()
|
|
|
|
err := p.LoadYaml("advanced/query_node.yaml")
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
2020-12-04 06:18:17 +00:00
|
|
|
queryNodeIDStr := os.Getenv("QUERY_NODE_ID")
|
|
|
|
if queryNodeIDStr == "" {
|
2020-12-04 22:46:01 +00:00
|
|
|
queryNodeIDList := p.QueryNodeIDList()
|
2020-12-04 06:18:17 +00:00
|
|
|
if len(queryNodeIDList) <= 0 {
|
|
|
|
queryNodeIDStr = "0"
|
|
|
|
} else {
|
|
|
|
queryNodeIDStr = strconv.Itoa(int(queryNodeIDList[0]))
|
|
|
|
}
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
2020-12-04 06:18:17 +00:00
|
|
|
p.Save("_queryNodeID", queryNodeIDStr)
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p *ParamTable) pulsarAddress() (string, error) {
|
|
|
|
url, err := p.Load("_PulsarAddress")
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
return url, nil
|
|
|
|
}
|
|
|
|
|
2020-12-04 06:18:17 +00:00
|
|
|
func (p *ParamTable) QueryNodeID() UniqueID {
|
|
|
|
queryNodeID, err := p.Load("_queryNodeID")
|
2020-11-26 08:01:31 +00:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2020-12-04 06:18:17 +00:00
|
|
|
id, err := strconv.Atoi(queryNodeID)
|
2020-11-26 08:01:31 +00:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2020-12-04 06:18:17 +00:00
|
|
|
return UniqueID(id)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p *ParamTable) insertChannelRange() []int {
|
|
|
|
insertChannelRange, err := p.Load("msgChannel.channelRange.insert")
|
2020-11-26 08:01:31 +00:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2020-12-04 06:18:17 +00:00
|
|
|
return paramtable.ConvertRangeToIntRange(insertChannelRange, ",")
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// advanced params
|
|
|
|
// stats
|
|
|
|
func (p *ParamTable) statsPublishInterval() int {
|
2020-12-04 06:18:17 +00:00
|
|
|
return p.ParseInt("queryNode.stats.publishInterval")
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// dataSync:
|
|
|
|
func (p *ParamTable) flowGraphMaxQueueLength() int32 {
|
2020-12-04 06:18:17 +00:00
|
|
|
return p.ParseInt32("queryNode.dataSync.flowGraph.maxQueueLength")
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p *ParamTable) flowGraphMaxParallelism() int32 {
|
2020-12-04 06:18:17 +00:00
|
|
|
return p.ParseInt32("queryNode.dataSync.flowGraph.maxParallelism")
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// msgStream
|
|
|
|
func (p *ParamTable) insertReceiveBufSize() int64 {
|
2020-12-04 06:18:17 +00:00
|
|
|
return p.ParseInt64("queryNode.msgStream.insert.recvBufSize")
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p *ParamTable) insertPulsarBufSize() int64 {
|
2020-12-04 06:18:17 +00:00
|
|
|
return p.ParseInt64("queryNode.msgStream.insert.pulsarBufSize")
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p *ParamTable) searchReceiveBufSize() int64 {
|
2020-12-04 06:18:17 +00:00
|
|
|
return p.ParseInt64("queryNode.msgStream.search.recvBufSize")
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p *ParamTable) searchPulsarBufSize() int64 {
|
2020-12-04 06:18:17 +00:00
|
|
|
return p.ParseInt64("queryNode.msgStream.search.pulsarBufSize")
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p *ParamTable) searchResultReceiveBufSize() int64 {
|
2020-12-04 06:18:17 +00:00
|
|
|
return p.ParseInt64("queryNode.msgStream.searchResult.recvBufSize")
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p *ParamTable) statsReceiveBufSize() int64 {
|
2020-12-04 06:18:17 +00:00
|
|
|
return p.ParseInt64("queryNode.msgStream.stats.recvBufSize")
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p *ParamTable) etcdAddress() string {
|
|
|
|
etcdAddress, err := p.Load("_EtcdAddress")
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
return etcdAddress
|
|
|
|
}
|
|
|
|
|
2020-11-28 11:06:48 +00:00
|
|
|
func (p *ParamTable) metaRootPath() string {
|
|
|
|
rootPath, err := p.Load("etcd.rootPath")
|
2020-11-26 08:01:31 +00:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2020-11-28 11:06:48 +00:00
|
|
|
subPath, err := p.Load("etcd.metaSubPath")
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
return rootPath + "/" + subPath
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p *ParamTable) gracefulTime() int64 {
|
2020-12-04 06:18:17 +00:00
|
|
|
return p.ParseInt64("queryNode.gracefulTime")
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p *ParamTable) insertChannelNames() []string {
|
2020-12-04 06:18:17 +00:00
|
|
|
|
|
|
|
prefix, err := p.Load("msgChannel.chanNamePrefix.insert")
|
2020-11-26 08:01:31 +00:00
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
2020-12-04 06:18:17 +00:00
|
|
|
prefix += "-"
|
2020-11-26 08:01:31 +00:00
|
|
|
channelRange, err := p.Load("msgChannel.channelRange.insert")
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2020-12-04 06:18:17 +00:00
|
|
|
channelIDs := paramtable.ConvertRangeToIntSlice(channelRange, ",")
|
2020-11-26 08:01:31 +00:00
|
|
|
|
2020-12-04 06:18:17 +00:00
|
|
|
var ret []string
|
|
|
|
for _, ID := range channelIDs {
|
|
|
|
ret = append(ret, prefix+strconv.Itoa(ID))
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
2020-12-04 06:18:17 +00:00
|
|
|
sep := len(channelIDs) / p.queryNodeNum()
|
|
|
|
index := p.sliceIndex()
|
|
|
|
if index == -1 {
|
|
|
|
panic("queryNodeID not Match with Config")
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
2020-12-04 06:18:17 +00:00
|
|
|
start := index * sep
|
|
|
|
return ret[start : start+sep]
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p *ParamTable) searchChannelNames() []string {
|
2020-12-04 06:18:17 +00:00
|
|
|
prefix, err := p.Load("msgChannel.chanNamePrefix.search")
|
2020-11-26 08:01:31 +00:00
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
2020-12-04 06:18:17 +00:00
|
|
|
prefix += "-"
|
2020-11-26 08:01:31 +00:00
|
|
|
channelRange, err := p.Load("msgChannel.channelRange.search")
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
2020-12-04 06:18:17 +00:00
|
|
|
channelIDs := paramtable.ConvertRangeToIntSlice(channelRange, ",")
|
2020-11-26 08:01:31 +00:00
|
|
|
|
2020-12-04 06:18:17 +00:00
|
|
|
var ret []string
|
|
|
|
for _, ID := range channelIDs {
|
|
|
|
ret = append(ret, prefix+strconv.Itoa(ID))
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
2020-12-04 06:18:17 +00:00
|
|
|
return ret
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p *ParamTable) searchResultChannelNames() []string {
|
2020-12-04 06:18:17 +00:00
|
|
|
prefix, err := p.Load("msgChannel.chanNamePrefix.searchResult")
|
2020-11-26 08:01:31 +00:00
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
2020-12-04 06:18:17 +00:00
|
|
|
prefix += "-"
|
2020-11-26 08:01:31 +00:00
|
|
|
channelRange, err := p.Load("msgChannel.channelRange.searchResult")
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
2020-12-04 06:18:17 +00:00
|
|
|
channelIDs := paramtable.ConvertRangeToIntSlice(channelRange, ",")
|
2020-11-26 08:01:31 +00:00
|
|
|
|
2020-12-04 06:18:17 +00:00
|
|
|
var ret []string
|
|
|
|
for _, ID := range channelIDs {
|
|
|
|
ret = append(ret, prefix+strconv.Itoa(ID))
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
2020-12-04 06:18:17 +00:00
|
|
|
return ret
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p *ParamTable) msgChannelSubName() string {
|
|
|
|
// TODO: subName = namePrefix + "-" + queryNodeID, queryNodeID is assigned by master
|
|
|
|
name, err := p.Load("msgChannel.subNamePrefix.queryNodeSubNamePrefix")
|
|
|
|
if err != nil {
|
|
|
|
log.Panic(err)
|
|
|
|
}
|
2020-12-04 06:18:17 +00:00
|
|
|
queryNodeIDStr, err := p.Load("_QueryNodeID")
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
return name + "-" + queryNodeIDStr
|
2020-11-26 08:01:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (p *ParamTable) statsChannelName() string {
|
|
|
|
channels, err := p.Load("msgChannel.chanNamePrefix.queryNodeStats")
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
return channels
|
|
|
|
}
|
2020-12-04 06:18:17 +00:00
|
|
|
|
|
|
|
func (p *ParamTable) sliceIndex() int {
|
|
|
|
queryNodeID := p.QueryNodeID()
|
2020-12-04 22:46:01 +00:00
|
|
|
queryNodeIDList := p.QueryNodeIDList()
|
2020-12-04 06:18:17 +00:00
|
|
|
for i := 0; i < len(queryNodeIDList); i++ {
|
|
|
|
if queryNodeID == queryNodeIDList[i] {
|
|
|
|
return i
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return -1
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p *ParamTable) queryNodeNum() int {
|
2020-12-04 22:46:01 +00:00
|
|
|
return len(p.QueryNodeIDList())
|
2020-12-04 06:18:17 +00:00
|
|
|
}
|