From 1e3ec42e548acbd211d880a513e033fa7cb76693 Mon Sep 17 00:00:00 2001 From: congqixia Date: Wed, 17 Sep 2025 11:36:00 +0800 Subject: [PATCH] fix: Check child fields len instead of nil (#44405) Related to #44398 --------- Signed-off-by: Congqi Xia --- internal/flushcommon/metacache/segment.go | 5 +++++ internal/flushcommon/syncmgr/task.go | 11 +++++++---- internal/storagecommon/column_group_splitter.go | 5 +++++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/internal/flushcommon/metacache/segment.go b/internal/flushcommon/metacache/segment.go index b5880fb117..6d0caae8af 100644 --- a/internal/flushcommon/metacache/segment.go +++ b/internal/flushcommon/metacache/segment.go @@ -17,11 +17,14 @@ package metacache import ( + "go.uber.org/zap" + "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" "github.com/milvus-io/milvus-proto/go-api/v2/msgpb" "github.com/milvus-io/milvus/internal/flushcommon/metacache/pkoracle" "github.com/milvus-io/milvus/internal/storage" "github.com/milvus-io/milvus/internal/storagecommon" + "github.com/milvus-io/milvus/pkg/v2/log" "github.com/milvus-io/milvus/pkg/v2/proto/datapb" ) @@ -146,6 +149,7 @@ func (s *SegmentInfo) Clone() *SegmentInfo { statslogs: s.statslogs, deltalogs: s.deltalogs, bm25logs: s.bm25logs, + currentSplit: s.currentSplit, } } @@ -165,6 +169,7 @@ func NewSegmentInfo(info *datapb.SegmentInfo, bfs pkoracle.PkStat, bm25Stats *Se Fields: group.GetChildFields(), }) } + log.Info("recover split info", zap.Int64("segmentID", info.GetID()), zap.Stringers("columnGroup", currentSplit)) } return &SegmentInfo{ segmentID: info.GetID(), diff --git a/internal/flushcommon/syncmgr/task.go b/internal/flushcommon/syncmgr/task.go index 9c98456f7b..ca32ffac00 100644 --- a/internal/flushcommon/syncmgr/task.go +++ b/internal/flushcommon/syncmgr/task.go @@ -220,8 +220,10 @@ func (t *SyncTask) getColumnGroups(segmentInfo *metacache.SegmentInfo) []storage if currentSplit := segmentInfo.GetCurrentSplit(); currentSplit != nil { for _, cg := range currentSplit { // legacy split found, use legacy policy - if cg.Fields == nil { - return storagecommon.SplitColumns(allFields, map[int64]storagecommon.ColumnStats{}, storagecommon.NewSelectedDataTypePolicy(), storagecommon.NewRemanentShortPolicy(-1)) + if len(cg.Fields) == 0 { + result := storagecommon.SplitColumns(allFields, map[int64]storagecommon.ColumnStats{}, storagecommon.NewSelectedDataTypePolicy(), storagecommon.NewRemanentShortPolicy(-1)) + log.Info("use legacy split policy", zap.Int64("segmentID", t.segmentID), zap.Stringers("columnGroups", result)) + return result } } field2idx := make(map[int64]int) @@ -237,9 +239,10 @@ func (t *SyncTask) getColumnGroups(segmentInfo *metacache.SegmentInfo) []storage return currentSplit } - // TODO calculate field stats policies := storagecommon.DefaultPolicies() - return storagecommon.SplitColumns(allFields, t.calcColumnStats(), policies...) + result := storagecommon.SplitColumns(allFields, t.calcColumnStats(), policies...) + log.Info("sync new split columns", zap.Int64("segmentID", t.segmentID), zap.Stringers("columnGroups", result)) + return result } func (t *SyncTask) calcColumnStats() map[int64]storagecommon.ColumnStats { diff --git a/internal/storagecommon/column_group_splitter.go b/internal/storagecommon/column_group_splitter.go index 0facb45066..404916e14f 100644 --- a/internal/storagecommon/column_group_splitter.go +++ b/internal/storagecommon/column_group_splitter.go @@ -17,6 +17,7 @@ package storagecommon import ( + "fmt" "sort" "github.com/milvus-io/milvus-proto/go-api/v2/schemapb" @@ -35,6 +36,10 @@ type ColumnGroup struct { Fields []int64 } +func (cg ColumnGroup) String() string { + return fmt.Sprintf("[GroupID: %d, ColumnIndices: %v, Fields: %v]", cg.GroupID, cg.Columns, cg.Fields) +} + func SplitColumns(fields []*schemapb.FieldSchema, stats map[int64]ColumnStats, policies ...ColumnGroupSplitPolicy) []ColumnGroup { split := newCurrentSplit(fields, stats) for _, policy := range policies {