未验证 提交 5bc6ec72 编写于 作者: Z zhenshan.cao 提交者: GitHub

Fixbug: QueryNode search exceptions will cause memory leak (#15305)

Signed-off-by: Nzhenshan.cao <zhenshan.cao@zilliz.com>
上级 788ff294
...@@ -1011,6 +1011,9 @@ func (q *queryCollection) search(msg queryMsg) error { ...@@ -1011,6 +1011,9 @@ func (q *queryCollection) search(msg queryMsg) error {
return err return err
} }
} }
defer plan.delete()
topK := plan.getTopK() topK := plan.getTopK()
if topK == 0 { if topK == 0 {
return fmt.Errorf("limit must be greater than 0, msgID = %d", searchMsg.ID()) return fmt.Errorf("limit must be greater than 0, msgID = %d", searchMsg.ID())
...@@ -1023,6 +1026,8 @@ func (q *queryCollection) search(msg queryMsg) error { ...@@ -1023,6 +1026,8 @@ func (q *queryCollection) search(msg queryMsg) error {
if err != nil { if err != nil {
return err return err
} }
defer searchReq.delete()
queryNum := searchReq.getNumOfQuery() queryNum := searchReq.getNumOfQuery()
searchRequests := make([]*searchRequest, 0) searchRequests := make([]*searchRequest, 0)
searchRequests = append(searchRequests, searchReq) searchRequests = append(searchRequests, searchReq)
...@@ -1048,7 +1053,9 @@ func (q *queryCollection) search(msg queryMsg) error { ...@@ -1048,7 +1053,9 @@ func (q *queryCollection) search(msg queryMsg) error {
} }
searchResults := make([]*SearchResult, 0) searchResults := make([]*SearchResult, 0)
defer func() {
deleteSearchResults(searchResults)
}()
// historical search // historical search
log.Debug("historical search start", zap.Int64("msgID", searchMsg.ID())) log.Debug("historical search start", zap.Int64("msgID", searchMsg.ID()))
hisSearchResults, sealedSegmentSearched, sealedPartitionSearched, err := q.historical.search(searchRequests, collection.id, searchMsg.PartitionIDs, plan, travelTimestamp) hisSearchResults, sealedSegmentSearched, sealedPartitionSearched, err := q.historical.search(searchRequests, collection.id, searchMsg.PartitionIDs, plan, travelTimestamp)
...@@ -1061,7 +1068,6 @@ func (q *queryCollection) search(msg queryMsg) error { ...@@ -1061,7 +1068,6 @@ func (q *queryCollection) search(msg queryMsg) error {
log.Debug("streaming search start", zap.Int64("msgID", searchMsg.ID())) log.Debug("streaming search start", zap.Int64("msgID", searchMsg.ID()))
for _, channel := range collection.getVChannels() { for _, channel := range collection.getVChannels() {
var strSearchResults []*SearchResult
strSearchResults, growingSegmentSearched, growingPartitionSearched, err := q.streaming.search(searchRequests, collection.id, searchMsg.PartitionIDs, channel, plan, travelTimestamp) strSearchResults, growingSegmentSearched, growingPartitionSearched, err := q.streaming.search(searchRequests, collection.id, searchMsg.PartitionIDs, channel, plan, travelTimestamp)
if err != nil { if err != nil {
return err return err
...@@ -1128,6 +1134,7 @@ func (q *queryCollection) search(msg queryMsg) error { ...@@ -1128,6 +1134,7 @@ func (q *queryCollection) search(msg queryMsg) error {
if err != nil { if err != nil {
return err return err
} }
defer deleteMarshaledHits(marshaledHits)
hitsBlob, err := marshaledHits.getHitsBlob() hitsBlob, err := marshaledHits.getHitsBlob()
sp.LogFields(oplog.String("statistical time", "getHitsBlob end")) sp.LogFields(oplog.String("statistical time", "getHitsBlob end"))
...@@ -1216,13 +1223,7 @@ func (q *queryCollection) search(msg queryMsg) error { ...@@ -1216,13 +1223,7 @@ func (q *queryCollection) search(msg queryMsg) error {
} }
tr.Record(fmt.Sprintf("publish search result, msgID = %d", searchMsg.ID())) tr.Record(fmt.Sprintf("publish search result, msgID = %d", searchMsg.ID()))
} }
sp.LogFields(oplog.String("statistical time", "before free c++ memory"))
deleteSearchResults(searchResults)
deleteMarshaledHits(marshaledHits)
sp.LogFields(oplog.String("statistical time", "stats done")) sp.LogFields(oplog.String("statistical time", "stats done"))
plan.delete()
searchReq.delete()
tr.Elapse(fmt.Sprintf("all done, msgID = %d", searchMsg.ID())) tr.Elapse(fmt.Sprintf("all done, msgID = %d", searchMsg.ID()))
return nil return nil
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册