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