fix: Check child fields len instead of nil (#44405)

Related to #44398

---------

Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>
This commit is contained in:
congqixia 2025-09-17 11:36:00 +08:00 committed by GitHub
parent 41dc494d5b
commit 1e3ec42e54
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 17 additions and 4 deletions

View File

@ -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(),

View File

@ -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 {

View File

@ -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 {