From c7d8dc100a8a89de4983d1333c5825fd38baaac2 Mon Sep 17 00:00:00 2001 From: Xianhui Lin <35839735+JsDove@users.noreply.github.com> Date: Mon, 18 Aug 2025 01:17:52 +0800 Subject: [PATCH] fix: add segment lock in LoadTextIndex and LoadJSONKeyIndex (#43811) fix: add segment lock in LoadTextIndex and LoadJSONKeyIndex issue:https://github.com/milvus-io/milvus/issues/43572 Signed-off-by: Xianhui.Lin --- internal/querynodev2/segments/segment.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/internal/querynodev2/segments/segment.go b/internal/querynodev2/segments/segment.go index 9a55a9e726..b0edad636f 100644 --- a/internal/querynodev2/segments/segment.go +++ b/internal/querynodev2/segments/segment.go @@ -1091,6 +1091,11 @@ func (s *LocalSegment) innerLoadIndex(ctx context.Context, func (s *LocalSegment) LoadTextIndex(ctx context.Context, textLogs *datapb.TextIndexStats, schemaHelper *typeutil.SchemaHelper) error { log.Ctx(ctx).Info("load text index", zap.Int64("field id", textLogs.GetFieldID()), zap.Any("text logs", textLogs)) + if !s.ptrLock.PinIf(state.IsNotReleased) { + return merr.WrapErrSegmentNotLoaded(s.ID(), "segment released") + } + defer s.ptrLock.Unpin() + f, err := schemaHelper.GetFieldFromID(textLogs.GetFieldID()) if err != nil { return err @@ -1125,6 +1130,11 @@ func (s *LocalSegment) LoadTextIndex(ctx context.Context, textLogs *datapb.TextI } func (s *LocalSegment) LoadJSONKeyIndex(ctx context.Context, jsonKeyStats *datapb.JsonKeyStats, schemaHelper *typeutil.SchemaHelper) error { + if !s.ptrLock.PinIf(state.IsNotReleased) { + return merr.WrapErrSegmentNotLoaded(s.ID(), "segment released") + } + defer s.ptrLock.Unpin() + if jsonKeyStats.GetJsonKeyStatsDataFormat() == 0 { log.Ctx(ctx).Info("load json key index failed dataformat invalid", zap.Int64("dataformat", jsonKeyStats.GetJsonKeyStatsDataFormat()), zap.Int64("field id", jsonKeyStats.GetFieldID()), zap.Any("json key logs", jsonKeyStats)) return nil