未验证 提交 204db183 编写于 作者: C congqixia 提交者: GitHub

Prevent panicking when index segment info not exists (#21664)

Signed-off-by: NCongqi Xia <congqi.xia@zilliz.com>
上级 a3008e76
......@@ -1234,3 +1234,21 @@ func TestMeta_GetHasUnindexTaskSegments(t *testing.T) {
assert.Equal(t, segID, segments[0].ID)
})
}
// see also: https://github.com/milvus-io/milvus/issues/21660
func TestUpdateSegmentIndexNotExists(t *testing.T) {
m := &meta{
segments: &SegmentsInfo{
segments: map[UniqueID]*SegmentInfo{},
},
indexes: map[UniqueID]map[UniqueID]*model.Index{},
buildID2SegmentIndex: make(map[UniqueID]*model.SegmentIndex),
}
assert.NotPanics(t, func() {
m.updateSegmentIndex(&model.SegmentIndex{
SegmentID: 1,
IndexID: 2,
})
})
}
......@@ -19,7 +19,9 @@ package datacoord
import (
"time"
"github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/metastore/model"
"go.uber.org/zap"
"github.com/golang/protobuf/proto"
"github.com/milvus-io/milvus-proto/go-api/commonpb"
......@@ -99,10 +101,18 @@ func (s *SegmentsInfo) SetSegment(segmentID UniqueID, segment *SegmentInfo) {
// SetSegmentIndex sets SegmentIndex with segmentID, perform overwrite if already exists
func (s *SegmentsInfo) SetSegmentIndex(segmentID UniqueID, segIndex *model.SegmentIndex) {
if s.segments[segmentID].segmentIndexes == nil {
s.segments[segmentID].segmentIndexes = make(map[UniqueID]*model.SegmentIndex)
segment, ok := s.segments[segmentID]
if !ok {
log.Warn("segment missing for set segment index",
zap.Int64("segmentID", segmentID),
zap.Int64("indexID", segIndex.IndexID),
)
return
}
if segment.segmentIndexes == nil {
segment.segmentIndexes = make(map[UniqueID]*model.SegmentIndex)
}
s.segments[segmentID].segmentIndexes[segIndex.IndexID] = segIndex
segment.segmentIndexes[segIndex.IndexID] = segIndex
}
func (s *SegmentsInfo) DropSegmentIndex(segmentID UniqueID, indexID UniqueID) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册