From e28473339922033563a9bc8b8ebd1534ce24e350 Mon Sep 17 00:00:00 2001 From: congqixia Date: Thu, 6 Nov 2025 14:49:34 +0800 Subject: [PATCH] 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 --- internal/querynodev2/segments/segment_loader.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/internal/querynodev2/segments/segment_loader.go b/internal/querynodev2/segments/segment_loader.go index 68bb5608ec..ab3a800fbc 100644 --- a/internal/querynodev2/segments/segment_loader.go +++ b/internal/querynodev2/segments/segment_loader.go @@ -377,10 +377,6 @@ func (loader *segmentLoader) Load(ctx context.Context, segment.SetBloomFilter(bfs) } - if err = segment.FinishLoad(); err != nil { - return errors.Wrap(err, "At FinishLoad") - } - if segment.Level() != datapb.SegmentLevel_L0 { loader.manager.Segment.Put(ctx, segmentType, segment) } @@ -963,6 +959,10 @@ func (loader *segmentLoader) loadSealedSegment(ctx context.Context, loadInfo *qu } loadRawDataSpan := tr.RecordSpan() + if err = segment.FinishLoad(); err != nil { + return errors.Wrap(err, "At FinishLoad") + } + // load text indexes. for _, info := range textIndexes { 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 { return err } + if err := segment.FinishLoad(); err != nil { + return errors.Wrap(err, "At FinishLoad") + } } // load statslog if it's growing segment