diff --git a/internal/proxyservice/impl.go b/internal/proxyservice/impl.go index 34f55af4ac35593dfb56184eaff2a9f58db73b9b..7881fbc9881f997491865a675d5319a259f1c6b3 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 321d3df0de718bd673c4815a7c6662a3ff9d3bfc..0bceb22fbe6300178b681b1dd7db59e22fa2ad1d 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()