浏览代码

ZOOKEEPER-107. Allow dynamic changes to server cluster membership, small bugfix (michi via camille)

git-svn-id: https://svn.apache.org/repos/asf/zookeeper/trunk@1455387 13f79535-47bb-0310-9956-ffa450edef68
Camille Fournier 12 年之前
父节点
当前提交
541f601a22
共有 2 个文件被更改,包括 19 次插入4 次删除
  1. 1 2
      src/c/tests/TestReconfigServer.cc
  2. 18 2
      src/c/tests/ZooKeeperQuorumServer.cc

+ 1 - 2
src/c/tests/TestReconfigServer.cc

@@ -69,8 +69,6 @@ TestReconfigServer::
 void TestReconfigServer::
 setUp() {
     cluster_ = ZooKeeperQuorumServer::getCluster(NUM_SERVERS);
-    // give the cluster some time to start up.
-    sleep(2);
 }
 
 void TestReconfigServer::
@@ -303,6 +301,7 @@ testRemoveConnectedFollower() {
         CPPUNIT_ASSERT(std::find(servers.begin(), servers.end(),
                        cluster_[i]->getServerString()) != servers.end());
     }
+    zookeeper_close(zk);
 }
 
 CPPUNIT_TEST_SUITE_REGISTRATION(TestReconfigServer);

+ 18 - 2
src/c/tests/ZooKeeperQuorumServer.cc

@@ -86,7 +86,7 @@ getMode() {
         return "follower";
     } else {
         printf("%s\n", result.c_str());
-        assert(!"unknown mode");
+        return "";
     }
 }
 
@@ -169,5 +169,21 @@ getCluster(uint32_t numServers) {
     for (int i = 0; i < numServers; i++) {
         cluster.push_back(new ZooKeeperQuorumServer(i, numServers));
     }
-    return cluster;
+
+    // Wait until all the servers start, and fail if they don't start within 10
+    // seconds.
+    for (int i = 0; i < 10; i++) {
+        int j = 0;
+        for (; j < cluster.size(); j++) {
+            if (cluster[j]->getMode() == "") {
+                // The server hasn't started.
+                sleep(1);
+                break;
+            }
+        }
+        if (j == cluster.size()) {
+            return cluster;
+        }
+    }
+    assert(!"The cluster didn't start for 10 seconds");
 }