From ce17e128199ce26c6ed5e10869cbfa09aab0ca06 Mon Sep 17 00:00:00 2001 From: bigsheeper Date: Fri, 8 Oct 2021 17:41:49 +0800 Subject: [PATCH] Fix data race in query service (#9454) Signed-off-by: bigsheeper --- internal/querynode/query_node.go | 3 --- internal/querynode/query_service.go | 8 +++++--- internal/querynode/query_service_test.go | 3 +++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/internal/querynode/query_node.go b/internal/querynode/query_node.go index 16abe23b53..8b7dceed96 100644 --- a/internal/querynode/query_node.go +++ b/internal/querynode/query_node.go @@ -240,9 +240,6 @@ func (node *QueryNode) Stop() error { if node.queryService != nil { node.queryService.close() } - if node.queryService != nil { - node.queryService.close() - } return nil } diff --git a/internal/querynode/query_service.go b/internal/querynode/query_service.go index 94491fe944..0d44c55963 100644 --- a/internal/querynode/query_service.go +++ b/internal/querynode/query_service.go @@ -95,10 +95,12 @@ func newQueryService(ctx context.Context, func (q *queryService) close() { log.Debug("search service closed") - for collectionID := range q.queryCollections { - q.stopQueryCollection(collectionID) - } q.queryCollectionMu.Lock() + for collectionID, sc := range q.queryCollections { + sc.close() + sc.cancel() + delete(q.queryCollections, collectionID) + } q.queryCollections = make(map[UniqueID]*queryCollection) q.queryCollectionMu.Unlock() q.cancel() diff --git a/internal/querynode/query_service_test.go b/internal/querynode/query_service_test.go index 059a9098ab..7c240b8157 100644 --- a/internal/querynode/query_service_test.go +++ b/internal/querynode/query_service_test.go @@ -241,4 +241,7 @@ func TestQueryService_addQueryCollection(t *testing.T) { err = qs.addQueryCollection(invalidCollectionID) assert.Error(t, err) assert.Len(t, qs.queryCollections, 1) + + qs.close() + assert.Len(t, qs.queryCollections, 0) }