fix: Move FinishLoad before text index creation to ensure raw data availability (#45334)

Related to #45333

Fix segment loading failure when adding fields with text match enabled.
The issue occurred because text indexes were being loaded before
FinishLoad() was called, meaning raw data was not properly available
when text index creation attempted to access it, resulting in "failed to
create text index, neither raw data nor index are found" errors.

Solution is to move the FinishLoad() call to execute after raw data
loading but before text index loading. This ensures that:
1. Raw data is properly loaded and available in memory
2. Text indexes can access the raw data they need during creation
3. The segment is in the correct state before any index operations

Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>
This commit is contained in:
congqixia 2025-11-06 14:49:34 +08:00 committed by GitHub
parent 59c64bee07
commit e284733399
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -377,10 +377,6 @@ func (loader *segmentLoader) Load(ctx context.Context,
segment.SetBloomFilter(bfs) segment.SetBloomFilter(bfs)
} }
if err = segment.FinishLoad(); err != nil {
return errors.Wrap(err, "At FinishLoad")
}
if segment.Level() != datapb.SegmentLevel_L0 { if segment.Level() != datapb.SegmentLevel_L0 {
loader.manager.Segment.Put(ctx, segmentType, segment) loader.manager.Segment.Put(ctx, segmentType, segment)
} }
@ -963,6 +959,10 @@ func (loader *segmentLoader) loadSealedSegment(ctx context.Context, loadInfo *qu
} }
loadRawDataSpan := tr.RecordSpan() loadRawDataSpan := tr.RecordSpan()
if err = segment.FinishLoad(); err != nil {
return errors.Wrap(err, "At FinishLoad")
}
// load text indexes. // load text indexes.
for _, info := range textIndexes { for _, info := range textIndexes {
if err := segment.LoadTextIndex(ctx, info, schemaHelper); err != nil { if err := segment.LoadTextIndex(ctx, info, schemaHelper); err != nil {
@ -1043,6 +1043,9 @@ func (loader *segmentLoader) LoadSegment(ctx context.Context,
if err := segment.LoadMultiFieldData(ctx); err != nil { if err := segment.LoadMultiFieldData(ctx); err != nil {
return err return err
} }
if err := segment.FinishLoad(); err != nil {
return errors.Wrap(err, "At FinishLoad")
}
} }
// load statslog if it's growing segment // load statslog if it's growing segment