From 4d5a9e067c4ef1d74c8fb06c5db6dcd3a12e43ab Mon Sep 17 00:00:00 2001
From: dragondriver <jiquan.long@zilliz.com>
Date: Fri, 29 Jan 2021 19:25:32 +0800
Subject: [PATCH] Fix the cancel logic of proxy service

Signed-off-by: dragondriver <jiquan.long@zilliz.com>
---
 internal/proxyservice/impl.go      | 11 ++---------
 internal/proxyservice/node_info.go | 26 ++++++++++++++++++++++++--
 2 files changed, 26 insertions(+), 11 deletions(-)

diff --git a/internal/proxyservice/impl.go b/internal/proxyservice/impl.go
index 34f55af4a..7881fbc98 100644
--- a/internal/proxyservice/impl.go
+++ b/internal/proxyservice/impl.go
@@ -141,16 +141,9 @@ func (s *ServiceImpl) Stop() error {
 	s.tick.Close()
 	log.Println("close time tick")
 
-	var err error
-	nodeClients, err := s.nodeInfos.ObtainAllClients()
+	err := s.nodeInfos.ReleaseAllClients()
 	if err != nil {
-		return err
-	}
-	for _, nodeClient := range nodeClients {
-		err = nodeClient.Stop()
-		if err != nil {
-			return err
-		}
+		panic(err)
 	}
 	log.Println("stop all node clients ...")
 
diff --git a/internal/proxyservice/node_info.go b/internal/proxyservice/node_info.go
index 321d3df0d..0bceb22fb 100644
--- a/internal/proxyservice/node_info.go
+++ b/internal/proxyservice/node_info.go
@@ -79,6 +79,8 @@ func (table *GlobalNodeInfoTable) Register(id UniqueID, info *NodeInfo) error {
 }
 
 func (table *GlobalNodeInfoTable) createClients() error {
+	log.Println("infos: ", table.infos)
+	log.Println("clients: ", table.clients)
 	if len(table.clients) == len(table.infos) {
 		return nil
 	}
@@ -91,11 +93,11 @@ func (table *GlobalNodeInfoTable) createClients() error {
 			var err error
 			err = table.clients[nodeID].Init()
 			if err != nil {
-				return err
+				panic(err)
 			}
 			err = table.clients[nodeID].Start()
 			if err != nil {
-				return err
+				panic(err)
 			}
 		}
 	}
@@ -103,6 +105,26 @@ func (table *GlobalNodeInfoTable) createClients() error {
 	return nil
 }
 
+func (table *GlobalNodeInfoTable) ReleaseAllClients() error {
+	table.createClientMtx.Lock()
+	log.Println("get write lock")
+	defer func() {
+		table.createClientMtx.Unlock()
+		log.Println("release write lock")
+	}()
+
+	var err error
+	for id, client := range table.clients {
+		err = client.Stop()
+		if err != nil {
+			panic(err)
+		}
+		delete(table.clients, id)
+	}
+
+	return nil
+}
+
 func (table *GlobalNodeInfoTable) ObtainAllClients() (map[UniqueID]NodeClient, error) {
 	table.mtx.RLock()
 	defer table.mtx.RUnlock()
-- 
GitLab