[sheepdog] [PATCH] zookeeper: allow only one to continue for concurrent setup

Liu Yuan namei.unix at gmail.com
Sun Dec 23 16:26:25 CET 2012


From: Liu Yuan <tailai.ly at taobao.com>

Signed-off-by: Liu Yuan <tailai.ly at taobao.com>
---
 sheep/cluster/zookeeper.c |   13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/sheep/cluster/zookeeper.c b/sheep/cluster/zookeeper.c
index de775e2..fe4093d 100644
--- a/sheep/cluster/zookeeper.c
+++ b/sheep/cluster/zookeeper.c
@@ -354,12 +354,9 @@ static bool is_master(void)
 	struct zk_node *zk;
 
 	if (!nr_sd_nodes) {
-		if (zk_member_empty()) {
-			if (zk_master_create() == ZOK)
-				return true;
-			else
-				return false;
-		} else
+		if (zk_member_empty())
+			return true;
+		else
 			return false;
 	}
 
@@ -461,6 +458,10 @@ static int zk_join(const struct sd_node *myself,
 		exit(1);
 	}
 
+	/* For concurrent nodes setup, we allow only one to continue */
+	while (zk_member_empty() && zk_master_create() != ZOK)
+		;/* wait */
+
 	return add_event(EVENT_JOIN_REQUEST, &this_node, opaque, opaque_len);
 }
 
-- 
1.7.9.5




More information about the sheepdog mailing list