mirror of https://github.com/milvus-io/milvus.git
Fix memory leak when Put duplicated segments (#26693)
Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>pull/26707/head
parent
9598a8b236
commit
95dcf7fa06
|
@ -149,9 +149,9 @@ func NewSegmentManager() *segmentManager {
|
|||
}
|
||||
|
||||
func (mgr *segmentManager) Put(segmentType SegmentType, segments ...Segment) {
|
||||
var replacedSegment []Segment
|
||||
mgr.mu.Lock()
|
||||
defer mgr.mu.Unlock()
|
||||
|
||||
targetMap := mgr.growingSegments
|
||||
switch segmentType {
|
||||
case SegmentTypeGrowing:
|
||||
|
@ -165,17 +165,23 @@ func (mgr *segmentManager) Put(segmentType SegmentType, segments ...Segment) {
|
|||
for _, segment := range segments {
|
||||
oldSegment, ok := targetMap[segment.ID()]
|
||||
|
||||
if ok && oldSegment.Version() >= segment.Version() {
|
||||
if ok {
|
||||
if oldSegment.Version() >= segment.Version() {
|
||||
log.Warn("Invalid segment distribution changed, skip it",
|
||||
zap.Int64("segmentID", segment.ID()),
|
||||
zap.Int64("oldVersion", oldSegment.Version()),
|
||||
zap.Int64("newVersion", segment.Version()),
|
||||
)
|
||||
// delete redundant segment
|
||||
if s, ok := segment.(*LocalSegment); ok {
|
||||
DeleteSegment(s)
|
||||
}
|
||||
continue
|
||||
}
|
||||
replacedSegment = append(replacedSegment, oldSegment)
|
||||
}
|
||||
targetMap[segment.ID()] = segment
|
||||
|
||||
if !ok {
|
||||
eventlog.Record(eventlog.NewRawEvt(eventlog.Level_Info, fmt.Sprintf("Segment %d[%d] loaded", segment.ID(), segment.Collection())))
|
||||
metrics.QueryNodeNumSegments.WithLabelValues(
|
||||
fmt.Sprint(paramtable.GetNodeID()),
|
||||
|
@ -194,8 +200,16 @@ func (mgr *segmentManager) Put(segmentType SegmentType, segments ...Segment) {
|
|||
).Add(float64(segment.RowNum()))
|
||||
}
|
||||
}
|
||||
}
|
||||
mgr.updateMetric()
|
||||
|
||||
// release replaced segment
|
||||
if len(replacedSegment) > 0 {
|
||||
go func() {
|
||||
for _, segment := range replacedSegment {
|
||||
remove(segment.(*LocalSegment))
|
||||
}
|
||||
}()
|
||||
}
|
||||
}
|
||||
|
||||
func (mgr *segmentManager) UpdateSegmentBy(action SegmentAction, filters ...SegmentFilter) int {
|
||||
|
|
Loading…
Reference in New Issue