queryCoord的checkerController分析

本文涉及的产品
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 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参数已废弃。

目录
相关文章
|
前端开发
R|timeROC-分析
R|timeROC-分析
235 0
R|timeROC-分析
|
SQL
【MySQLprofiling分析
【MySQLprofiling分析
92 0
【MySQLprofiling分析
摊还分析
摊还分析 本章内容: 1.聚合分析 2.核算法 3.势能法 4.动态表   一  聚合分析   1.  在摊还分析中,我们求数据结构的一个操作序列中所执行的所有操作的平均时间,来评价操作的代价,它不涉及概率,可以保证最坏情况下每个操作的平均性能。
754 0
|
定位技术 Android开发
BottomSheetBehavior分析
BottomSheetBehavior分析
BottomSheetBehavior分析
|
Python 算法 计算机视觉
多因子探索分析
假设检验 检验统计量,根据数据的均值、方差等性质,将数据转换为一个函数,构造这个函数的目的是将这个数据转换为一个已知分布容易解决的格式 显著性水平一般用希腊字母a表示,0.05代表数据有95%的可能与已知分布一致。
1393 0
|
Web App开发 前端开发 NoSQL