queryCoord的checkerController分析

简介: queryCoord的checkerController分析

queryCoord的checkerController分析

milvus版本:v2.3.2

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

堆栈:

Run()(cmd\components\query_coord.go)
  |--qs.svr.Run()(同上)
    |--s.start()(\internal\distributed\querycoord\service.go)
      |--s.queryCoord.Start()(同上)
        |--Start()(internal\querycoordv2\server.go)
          |--s.startQueryCoord()(同上)
            |--s.startServerLoop()(同上)
              |--s.checkerController.Start()(同上)
                |--go controller.startChecker

代码如下:

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。

checkers.jpg

按类型启动checker:

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控制参数:

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)
    }
}

代码中默认值:

单位毫秒
queryCoord.checkSegmentInterval = 1000
queryCoord.checkChannelInterval = 1000
queryCoord.BalanceCheckInterval = 10000
queryCoord.checkIndexInterval = 10000

CheckInterval参数已废弃。

目录
相关文章
|
10月前
|
前端开发
R|timeROC-分析
R|timeROC-分析
167 0
R|timeROC-分析
|
弹性计算 运维 安全
全面分析和理解PBC
全面分析和理解PBC
4598 0
全面分析和理解PBC
|
SQL
【MySQLprofiling分析
【MySQLprofiling分析
81 0
【MySQLprofiling分析
|
定位技术 Android开发
BottomSheetBehavior分析
BottomSheetBehavior分析
BottomSheetBehavior分析
|
Web App开发 前端开发 NoSQL