diff --git a/internal/querycoordv2/checkers/controller.go b/internal/querycoordv2/checkers/controller.go index dc65482d76..12779e8254 100644 --- a/internal/querycoordv2/checkers/controller.go +++ b/internal/querycoordv2/checkers/controller.go @@ -93,7 +93,7 @@ func NewCheckerController( channelChecker: NewChannelChecker(meta, dist, targetMgr, balancer), segmentChecker: NewSegmentChecker(meta, dist, targetMgr, balancer, nodeMgr), balanceChecker: NewBalanceChecker(meta, balancer, nodeMgr, scheduler), - indexChecker: NewIndexChecker(meta, dist, broker), + indexChecker: NewIndexChecker(meta, dist, broker, nodeMgr), } manualCheckChs := map[checkerType]chan struct{}{ diff --git a/internal/querycoordv2/checkers/index_checker.go b/internal/querycoordv2/checkers/index_checker.go index 6f75343368..69ea3d3833 100644 --- a/internal/querycoordv2/checkers/index_checker.go +++ b/internal/querycoordv2/checkers/index_checker.go @@ -26,6 +26,7 @@ import ( "github.com/milvus-io/milvus/internal/proto/querypb" "github.com/milvus-io/milvus/internal/querycoordv2/meta" "github.com/milvus-io/milvus/internal/querycoordv2/params" + "github.com/milvus-io/milvus/internal/querycoordv2/session" "github.com/milvus-io/milvus/internal/querycoordv2/task" "github.com/milvus-io/milvus/pkg/log" "github.com/milvus-io/milvus/pkg/util/typeutil" @@ -35,20 +36,23 @@ var _ Checker = (*IndexChecker)(nil) // IndexChecker perform segment index check. type IndexChecker struct { - meta *meta.Meta - dist *meta.DistributionManager - broker meta.Broker + meta *meta.Meta + dist *meta.DistributionManager + broker meta.Broker + nodeMgr *session.NodeManager } func NewIndexChecker( meta *meta.Meta, dist *meta.DistributionManager, broker meta.Broker, + nodeMgr *session.NodeManager, ) *IndexChecker { return &IndexChecker{ - meta: meta, - dist: dist, - broker: broker, + meta: meta, + dist: dist, + broker: broker, + nodeMgr: nodeMgr, } } @@ -90,6 +94,10 @@ func (c *IndexChecker) checkReplica(ctx context.Context, collection *meta.Collec targets := make(map[int64][]int64) // segmentID => FieldID for _, segment := range segments { + // skip update index in stopping node + if ok, _ := c.nodeMgr.IsStoppingNode(segment.Node); ok { + continue + } missing := c.checkSegment(ctx, segment, collection) if len(missing) > 0 { targets[segment.GetID()] = missing diff --git a/internal/querycoordv2/checkers/index_checker_test.go b/internal/querycoordv2/checkers/index_checker_test.go index fe1b9774a8..19bf8f9a0d 100644 --- a/internal/querycoordv2/checkers/index_checker_test.go +++ b/internal/querycoordv2/checkers/index_checker_test.go @@ -72,7 +72,7 @@ func (suite *IndexCheckerSuite) SetupTest() { distManager := meta.NewDistributionManager() suite.broker = meta.NewMockBroker(suite.T()) - suite.checker = NewIndexChecker(suite.meta, distManager, suite.broker) + suite.checker = NewIndexChecker(suite.meta, distManager, suite.broker, suite.nodeMgr) } func (suite *IndexCheckerSuite) TearDownTest() { @@ -117,6 +117,12 @@ func (suite *IndexCheckerSuite) TestLoadIndex() { suite.EqualValues(200, t.ReplicaID()) suite.Equal(task.ActionTypeUpdate, action.Type()) suite.EqualValues(2, action.SegmentID()) + + // test skip load index for stopping node + suite.nodeMgr.Stopping(1) + suite.nodeMgr.Stopping(2) + tasks = checker.Check(context.Background()) + suite.Require().Len(tasks, 0) } func (suite *IndexCheckerSuite) TestIndexInfoNotMatch() {