queryCoord的checkerController分析

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

目录
相关文章
|
13天前
|
算法 前端开发 数据挖掘
雷同性分析问题
本文探讨了雷同性分析中的比例计算、计算目的及算法可行性。通过对比不同企业的投标记录,计算雷同比率以识别潜在的团伙行为。文中分析了分箱法、聚类算法、暴力穷举法等方法的适用性和局限性,并提出了前端展示关联企业的方案。
53 23
|
4月前
|
存储 缓存 Java
分析fastcache和freecache(一)
分析fastcache和freecache(一)
74 5
|
前端开发
R|timeROC-分析
R|timeROC-分析
264 0
R|timeROC-分析
|
弹性计算 运维 安全
全面分析和理解PBC
全面分析和理解PBC
6096 0
全面分析和理解PBC
|
Web App开发 前端开发 NoSQL
|
算法 数据安全/隐私保护