mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-07 09:38:39 +08:00
fix: querynode upgrade from 2.5 get stucked (#42502)
issue: #42492 - consider the old RO query node (not streaming node) when balancing channel. - querynode graceful stop can be done if there's only L0 segment exists. Signed-off-by: chyezh <chyezh@outlook.com>
This commit is contained in:
parent
b76478378a
commit
508264f953
@ -499,6 +499,7 @@ func (b *MultiTargetBalancer) balanceChannels(ctx context.Context, br *balanceRe
|
|||||||
var rwNodes, roNodes []int64
|
var rwNodes, roNodes []int64
|
||||||
if streamingutil.IsStreamingServiceEnabled() {
|
if streamingutil.IsStreamingServiceEnabled() {
|
||||||
rwNodes, roNodes = replica.GetRWSQNodes(), replica.GetROSQNodes()
|
rwNodes, roNodes = replica.GetRWSQNodes(), replica.GetROSQNodes()
|
||||||
|
roNodes = append(roNodes, replica.GetRONodes()...)
|
||||||
} else {
|
} else {
|
||||||
rwNodes, roNodes = replica.GetRWNodes(), replica.GetRONodes()
|
rwNodes, roNodes = replica.GetRWNodes(), replica.GetRONodes()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -209,6 +209,7 @@ func (b *RowCountBasedBalancer) balanceChannels(ctx context.Context, br *balance
|
|||||||
var rwNodes, roNodes []int64
|
var rwNodes, roNodes []int64
|
||||||
if streamingutil.IsStreamingServiceEnabled() {
|
if streamingutil.IsStreamingServiceEnabled() {
|
||||||
rwNodes, roNodes = replica.GetRWSQNodes(), replica.GetROSQNodes()
|
rwNodes, roNodes = replica.GetRWSQNodes(), replica.GetROSQNodes()
|
||||||
|
roNodes = append(roNodes, replica.GetRONodes()...)
|
||||||
} else {
|
} else {
|
||||||
rwNodes, roNodes = replica.GetRWNodes(), replica.GetRONodes()
|
rwNodes, roNodes = replica.GetRWNodes(), replica.GetRONodes()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -481,6 +481,7 @@ func (b *ScoreBasedBalancer) balanceChannels(ctx context.Context, br *balanceRep
|
|||||||
var roNodes []int64
|
var roNodes []int64
|
||||||
if streamingutil.IsStreamingServiceEnabled() {
|
if streamingutil.IsStreamingServiceEnabled() {
|
||||||
rwNodes, roNodes = replica.GetRWSQNodes(), replica.GetROSQNodes()
|
rwNodes, roNodes = replica.GetRWSQNodes(), replica.GetROSQNodes()
|
||||||
|
roNodes = append(roNodes, replica.GetRONodes()...)
|
||||||
} else {
|
} else {
|
||||||
rwNodes, roNodes = replica.GetRWNodes(), replica.GetRONodes()
|
rwNodes, roNodes = replica.GetRWNodes(), replica.GetRONodes()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -140,3 +140,10 @@ func WithLevel(level datapb.SegmentLevel) SegmentFilter {
|
|||||||
return segment.Level() == level
|
return segment.Level() == level
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithoutLevel is the segment filter for without segment level.
|
||||||
|
func WithoutLevel(level datapb.SegmentLevel) SegmentFilter {
|
||||||
|
return SegmentFilterFunc(func(segment Segment) bool {
|
||||||
|
return segment.Level() != level
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@ -70,6 +70,7 @@ import (
|
|||||||
"github.com/milvus-io/milvus/pkg/v2/log"
|
"github.com/milvus-io/milvus/pkg/v2/log"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/metrics"
|
"github.com/milvus-io/milvus/pkg/v2/metrics"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/mq/msgdispatcher"
|
"github.com/milvus-io/milvus/pkg/v2/mq/msgdispatcher"
|
||||||
|
"github.com/milvus-io/milvus/pkg/v2/proto/datapb"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/util/expr"
|
"github.com/milvus-io/milvus/pkg/v2/util/expr"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/util/hardware"
|
"github.com/milvus-io/milvus/pkg/v2/util/hardware"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/util/lifetime"
|
"github.com/milvus-io/milvus/pkg/v2/util/lifetime"
|
||||||
@ -555,8 +556,8 @@ func (node *QueryNode) Stop() error {
|
|||||||
channelNum = 0
|
channelNum = 0
|
||||||
)
|
)
|
||||||
if node.manager != nil {
|
if node.manager != nil {
|
||||||
sealedSegments = node.manager.Segment.GetBy(segments.WithType(segments.SegmentTypeSealed))
|
sealedSegments = node.manager.Segment.GetBy(segments.WithType(segments.SegmentTypeSealed), segments.WithoutLevel(datapb.SegmentLevel_L0))
|
||||||
growingSegments = node.manager.Segment.GetBy(segments.WithType(segments.SegmentTypeGrowing))
|
growingSegments = node.manager.Segment.GetBy(segments.WithType(segments.SegmentTypeGrowing), segments.WithoutLevel(datapb.SegmentLevel_L0))
|
||||||
}
|
}
|
||||||
if node.pipelineManager != nil {
|
if node.pipelineManager != nil {
|
||||||
channelNum = node.pipelineManager.Num()
|
channelNum = node.pipelineManager.Num()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user