queryCoord的checkerController分析

2023-12-01 15:53:48 浏览数 (1)

queryCoord的checkerController分析

milvus版本:v2.3.2

启动queryCoordv2的时候会启动几种类型的checker。

堆栈:

代码语言:shell复制
Run()(cmdcomponentsquery_coord.go)
  |--qs.svr.Run()(同上)
    |--s.start()(internaldistributedquerycoordservice.go)
      |--s.queryCoord.Start()(同上)
        |--Start()(internalquerycoordv2server.go)
          |--s.startQueryCoord()(同上)
            |--s.startServerLoop()(同上)
              |--s.checkerController.Start()(同上)
                |--go controller.startChecker

代码如下:

代码语言:go复制
func (controller *CheckerController) Start() {
	ctx, cancel := context.WithCancel(context.Background())
	controller.cancel = cancel

	for checkerType := range controller.checkers {
		go controller.startChecker(ctx, checkerType)
	}
}

controller.checkers有4个值:

channel_checker、segment_checker、balance_checker、index_checker。

每种类型的checker启动一个goroutine。

按类型启动checker:

代码语言:go复制
func (controller *CheckerController) startChecker(ctx context.Context, checkerType string) {
	interval := getCheckerInterval(checkerType)
	ticker := time.NewTicker(interval)
	defer ticker.Stop()

	for {
		select {
		case <-ctx.Done():
			log.Info("Checker stopped",
				zap.String("type", checkerType))
			return

		case <-ticker.C:
			controller.check(ctx, checkerType)

		case <-controller.manualCheckChs[checkerType]:
			ticker.Stop()
			controller.check(ctx, checkerType)
			ticker.Reset(interval)
		}
	}
}

interval控制参数:

代码语言:go复制
func getCheckerInterval(checkerType string) time.Duration {
	switch checkerType {
	case segmentChecker:
		return Params.QueryCoordCfg.SegmentCheckInterval.GetAsDuration(time.Millisecond)
	case channelChecker:
		return Params.QueryCoordCfg.ChannelCheckInterval.GetAsDuration(time.Millisecond)
	case balanceChecker:
		return Params.QueryCoordCfg.BalanceCheckInterval.GetAsDuration(time.Millisecond)
	case indexChecker:
		return Params.QueryCoordCfg.IndexCheckInterval.GetAsDuration(time.Millisecond)
	default:
		return Params.QueryCoordCfg.CheckInterval.GetAsDuration(time.Millisecond)
	}
}

代码中默认值:

代码语言:shell复制
单位毫秒
queryCoord.checkSegmentInterval = 1000
queryCoord.checkChannelInterval = 1000
queryCoord.BalanceCheckInterval = 10000
queryCoord.checkIndexInterval = 10000

CheckInterval参数已废弃。

0 人点赞