fix: querynode upgrade from 2.5 get stucked (#42503)

issue: #42492
pr: #42502

- 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:
Zhen Ye 2025-06-05 15:56:33 +08:00 committed by GitHub
parent a1927e22a5
commit a55c371261
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 2 deletions

View File

@ -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
})
}

View File

@ -68,6 +68,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"
@ -479,12 +480,15 @@ 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()
} }
if len(sealedSegments) == 0 && len(growingSegments) == 0 && channelNum == 0 {
break
}
select { select {
case <-timeoutCh: case <-timeoutCh: