From 5bc6ec72502e2c85fae363640518b123291042df Mon Sep 17 00:00:00 2001 From: "zhenshan.cao" Date: Mon, 24 Jan 2022 21:19:39 +0800 Subject: [PATCH] Fixbug: QueryNode search exceptions will cause memory leak (#15305) Signed-off-by: zhenshan.cao --- internal/querynode/query_collection.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/internal/querynode/query_collection.go b/internal/querynode/query_collection.go index 3f8903052..6c3cb00b4 100644 --- a/internal/querynode/query_collection.go +++ b/internal/querynode/query_collection.go @@ -1011,6 +1011,9 @@ func (q *queryCollection) search(msg queryMsg) error { return err } } + + defer plan.delete() + topK := plan.getTopK() if topK == 0 { return fmt.Errorf("limit must be greater than 0, msgID = %d", searchMsg.ID()) @@ -1023,6 +1026,8 @@ func (q *queryCollection) search(msg queryMsg) error { if err != nil { return err } + defer searchReq.delete() + queryNum := searchReq.getNumOfQuery() searchRequests := make([]*searchRequest, 0) searchRequests = append(searchRequests, searchReq) @@ -1048,7 +1053,9 @@ func (q *queryCollection) search(msg queryMsg) error { } searchResults := make([]*SearchResult, 0) - + defer func() { + deleteSearchResults(searchResults) + }() // historical search log.Debug("historical search start", zap.Int64("msgID", searchMsg.ID())) 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 { log.Debug("streaming search start", zap.Int64("msgID", searchMsg.ID())) for _, channel := range collection.getVChannels() { - var strSearchResults []*SearchResult strSearchResults, growingSegmentSearched, growingPartitionSearched, err := q.streaming.search(searchRequests, collection.id, searchMsg.PartitionIDs, channel, plan, travelTimestamp) if err != nil { return err @@ -1128,6 +1134,7 @@ func (q *queryCollection) search(msg queryMsg) error { if err != nil { return err } + defer deleteMarshaledHits(marshaledHits) hitsBlob, err := marshaledHits.getHitsBlob() sp.LogFields(oplog.String("statistical time", "getHitsBlob end")) @@ -1216,13 +1223,7 @@ func (q *queryCollection) search(msg queryMsg) error { } 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")) - plan.delete() - searchReq.delete() tr.Elapse(fmt.Sprintf("all done, msgID = %d", searchMsg.ID())) return nil } -- GitLab