You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by br...@apache.org on 2018/07/28 02:46:47 UTC
zookeeper git commit: ZOOKEEPER-3095: Connect string fix for
non-existent hosts
Repository: zookeeper
Updated Branches:
refs/heads/master 2a372fcdc -> 932fee861
ZOOKEEPER-3095: Connect string fix for non-existent hosts
ZKPatch: eda58d9970c76831046ddc45251c9b110856836e (extract)
Author: Jeelani Mohamed Abdul Khader <mj...@devvm3360.prn2.facebook.com>
Reviewers: Benjamin Reed <br...@apache.org>
Closes #579 from mjeelanimsft/connect-string-fix-for-non-existent-hosts
Project: http://git-wip-us.apache.org/repos/asf/zookeeper/repo
Commit: http://git-wip-us.apache.org/repos/asf/zookeeper/commit/932fee86
Tree: http://git-wip-us.apache.org/repos/asf/zookeeper/tree/932fee86
Diff: http://git-wip-us.apache.org/repos/asf/zookeeper/diff/932fee86
Branch: refs/heads/master
Commit: 932fee861001c158343c0bc64dbe80f253f0bb6d
Parents: 2a372fc
Author: Jeelani Mohamed Abdul Khader <mj...@fb.com>
Authored: Fri Jul 27 19:46:31 2018 -0700
Committer: Benjamin Reed <br...@apache.org>
Committed: Fri Jul 27 19:46:31 2018 -0700
----------------------------------------------------------------------
src/c/src/zookeeper.c | 9 +++++++--
src/c/tests/TestClient.cc | 13 ++++++++++++-
src/c/tests/zkServer.sh | 2 +-
3 files changed, 20 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/932fee86/src/c/src/zookeeper.c
----------------------------------------------------------------------
diff --git a/src/c/src/zookeeper.c b/src/c/src/zookeeper.c
index cab3e50..ab40ae9 100644
--- a/src/c/src/zookeeper.c
+++ b/src/c/src/zookeeper.c
@@ -810,7 +810,7 @@ static int resolve_hosts(const zhandle_t *zh, const char *hosts_in, addrvec_t *a
LOG_ERROR(LOGCALLBACK(zh), "getaddrinfo: %s\n", strerror(errno));
#endif
rc=ZSYSTEMERROR;
- goto fail;
+ goto next;
}
}
@@ -842,11 +842,16 @@ static int resolve_hosts(const zhandle_t *zh, const char *hosts_in, addrvec_t *a
}
freeaddrinfo(res0);
-
+next:
host = strtok_r(0, ",", &strtok_last);
}
#endif
}
+ if (avec->count == 0) {
+ rc = ZSYSTEMERROR; // not a single host resolved
+ goto fail;
+ }
+
free(hosts);
if(!disable_conn_permute){
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/932fee86/src/c/tests/TestClient.cc
----------------------------------------------------------------------
diff --git a/src/c/tests/TestClient.cc b/src/c/tests/TestClient.cc
index 52ce92c..008bfdb 100644
--- a/src/c/tests/TestClient.cc
+++ b/src/c/tests/TestClient.cc
@@ -204,6 +204,7 @@ class Zookeeper_simpleSystem : public CPPUNIT_NS::TestFixture
CPPUNIT_TEST(testAsyncWatcherAutoReset);
CPPUNIT_TEST(testDeserializeString);
CPPUNIT_TEST(testFirstServerDown);
+ CPPUNIT_TEST(testNonexistentHost);
#ifdef THREADED
CPPUNIT_TEST(testNullData);
#ifdef ZOO_IPV6_ENABLED
@@ -325,7 +326,17 @@ public:
CPPUNIT_ASSERT(zk != 0);
CPPUNIT_ASSERT(ctx.waitForConnected(zk));
}
-
+
+ /* Checks that a non-existent host will not block the connection*/
+ void testNonexistentHost() {
+ char hosts[] = "jimmy:5555,127.0.0.1:22181";
+ watchctx_t ctx;
+ zoo_deterministic_conn_order(true /* disable permute */);
+ zhandle_t *zh = createClient(hosts, &ctx);
+ CPPUNIT_ASSERT(ctx.waitForConnected(zh));
+ zoo_deterministic_conn_order(false /* enable permute */);
+ }
+
/** this checks for a deadlock in calling zookeeper_close and calls from a default watcher that might get triggered just when zookeeper_close() is in progress **/
void testHangingClient() {
int zrc = 0;
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/932fee86/src/c/tests/zkServer.sh
----------------------------------------------------------------------
diff --git a/src/c/tests/zkServer.sh b/src/c/tests/zkServer.sh
index 64e5a04..f0ba2c5 100755
--- a/src/c/tests/zkServer.sh
+++ b/src/c/tests/zkServer.sh
@@ -77,7 +77,7 @@ fi
if [ "x${base_dir}" == "x" ]
then
-zk_base="../../"
+zk_base="../../../"
else
zk_base="${base_dir}"
fi