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