[sheepdog] [PATCH v3 2/2] sheep/cluster: re-create znode of 'lock-id' if it isn't exists

Robin Dong robin.k.dong at gmail.com
Sun Jan 19 13:52:59 CET 2014


From: Robin Dong <sanbai at taobao.com>

When a sheep daemon call zk_unlock(), it will remove the whole znode of 'lock-id' and
make zoo_create() fail in zk_lock() which called by another sheep daemon.
To avoid this, we should try to create a znode of 'lock-id' if zoo_create() fail.

Signed-off-by: Robin Dong <sanbai at taobao.com>
---
 sheep/cluster/zookeeper.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/sheep/cluster/zookeeper.c b/sheep/cluster/zookeeper.c
index ad5a9af..4527db1 100644
--- a/sheep/cluster/zookeeper.c
+++ b/sheep/cluster/zookeeper.c
@@ -1256,6 +1256,10 @@ static void zk_lock(uint64_t lock_id)
 				     flags, my_path, MAX_NODE_STR_LEN);
 		if (rc == ZOK)
 			break;
+		if (rc == ZNONODE) {
+			zk_init_node(parent);
+			continue;
+		}
 		sd_err("failed to create path:%s, %s", my_path, zerror(rc));
 		zk_wait();
 	}
-- 
1.7.12.4




More information about the sheepdog mailing list