From 1d1bbe08088bbe704f79ffdbf3e19f0ef1fbda0d Mon Sep 17 00:00:00 2001 From: Joe Zou <yixian.zou@gmail.com> Date: Mon, 1 Jun 2020 23:17:33 +0800 Subject: [PATCH] lock optimize : change to rwlock --- registry/zookeeper/registry.go | 1 - remoting/zookeeper/client.go | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/registry/zookeeper/registry.go b/registry/zookeeper/registry.go index cf442a196..5d5f9e052 100644 --- a/registry/zookeeper/registry.go +++ b/registry/zookeeper/registry.go @@ -158,7 +158,6 @@ func (r *zkRegistry) DoRegister(root string, node string) error { func (r *zkRegistry) DoUnregister(root string, node string) error { r.cltLock.Lock() defer r.cltLock.Unlock() - if !r.ZkClient().ZkConnValid() { return perrors.Errorf("zk client is not valid.") } diff --git a/remoting/zookeeper/client.go b/remoting/zookeeper/client.go index cc34c76b4..c66bf4b67 100644 --- a/remoting/zookeeper/client.go +++ b/remoting/zookeeper/client.go @@ -278,7 +278,7 @@ LOOP: break LOOP case (int)(zk.EventNodeDataChanged), (int)(zk.EventNodeChildrenChanged): logger.Infof("zkClient{%s} get zk node changed event{path:%s}", z.name, event.Path) - z.Lock() + z.RLock() for p, a := range z.eventRegistry { if strings.HasPrefix(p, event.Path) { logger.Infof("send event{state:zk.EventNodeDataChange, Path:%s} notify event to path{%s} related listener", @@ -288,7 +288,7 @@ LOOP: } } } - z.Unlock() + z.RUnlock() case (int)(zk.StateConnecting), (int)(zk.StateConnected), (int)(zk.StateHasSession): if state == (int)(zk.StateHasSession) { continue @@ -371,11 +371,11 @@ func (z *ZookeeperClient) ZkConnValid() bool { } valid := true - z.Lock() + z.RLock() if z.Conn == nil { valid = false } - z.Unlock() + z.RUnlock() return valid } -- GitLab