diff --git a/internal/querycoordv2/balance/rowcount_based_balancer.go b/internal/querycoordv2/balance/rowcount_based_balancer.go index 9fa62b114b..7a325e65db 100644 --- a/internal/querycoordv2/balance/rowcount_based_balancer.go +++ b/internal/querycoordv2/balance/rowcount_based_balancer.go @@ -153,6 +153,10 @@ func (b *RowCountBasedBalancer) balanceReplica(replica *meta.Replica) ([]Segment return nil, nil } + if len(nodesSegments) == 0 { + return nil, nil + } + average := totalCnt / len(nodesSegments) neededRowCnt := 0 for nodeID := range nodesSegments { diff --git a/internal/querycoordv2/balance/rowcount_based_balancer_test.go b/internal/querycoordv2/balance/rowcount_based_balancer_test.go index fef9c83369..8323a785e6 100644 --- a/internal/querycoordv2/balance/rowcount_based_balancer_test.go +++ b/internal/querycoordv2/balance/rowcount_based_balancer_test.go @@ -220,11 +220,20 @@ func (suite *RowCountBasedBalancerTestSuite) TestBalance() { {SegmentInfo: &datapb.SegmentInfo{ID: 2, CollectionID: 1, NumOfRows: 20}, Node: 2}, {SegmentInfo: &datapb.SegmentInfo{ID: 3, CollectionID: 1, NumOfRows: 30}, Node: 2}, }, - 10: {{SegmentInfo: &datapb.SegmentInfo{ID: 4, CollectionID: 1, NumOfRows: 30}, Node: 10}}, }, expectPlans: []SegmentAssignPlan{}, expectChannelPlans: []ChannelAssignPlan{}, }, + { + name: "all query node not exist", + nodes: []int64{}, + notExistedNodes: []int64{101, 102}, + segmentCnts: []int{1, 2}, + states: []session.State{session.NodeStateNormal, session.NodeStateNormal}, + distributions: map[int64][]*meta.Segment{}, + expectPlans: []SegmentAssignPlan{}, + expectChannelPlans: []ChannelAssignPlan{}, + }, } suite.mockScheduler.Mock.On("GetNodeChannelDelta", mock.Anything).Return(0)