You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by da...@apache.org on 2016/10/06 19:17:04 UTC

kudu git commit: KUDU-1681: DNS resolution failure of master hostname causes tserver crash

Repository: kudu
Updated Branches:
  refs/heads/master cae2f9899 -> fc5e6a3e7


KUDU-1681: DNS resolution failure of master hostname causes tserver crash

Also changes the fail_dns_resolution flag to make DNS resolution return
an error Status instead of an empty resolved list. From the manpage of
getaddrinfo:

    After a successful call to getaddrinfo(), *res is a pointer to a
    linked list of one or more addrinfo structures.

Change-Id: Ib79973a38bebbe84df419e274c08c8cc0c5d31cd
Reviewed-on: http://gerrit.cloudera.org:8080/4640
Reviewed-by: Todd Lipcon <to...@apache.org>
Tested-by: Kudu Jenkins


Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/fc5e6a3e
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/fc5e6a3e
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/fc5e6a3e

Branch: refs/heads/master
Commit: fc5e6a3e7921b9a475848117063e2d7db56f8ee4
Parents: cae2f98
Author: Dan Burkert <da...@cloudera.com>
Authored: Wed Oct 5 18:40:17 2016 -0700
Committer: Dan Burkert <da...@cloudera.com>
Committed: Thu Oct 6 19:16:41 2016 +0000

----------------------------------------------------------------------
 src/kudu/tserver/heartbeater.cc        |  4 +---
 src/kudu/tserver/tablet_server-test.cc | 13 ++++++++++++-
 src/kudu/util/net/net_util.cc          |  2 +-
 3 files changed, 14 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/fc5e6a3e/src/kudu/tserver/heartbeater.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tserver/heartbeater.cc b/src/kudu/tserver/heartbeater.cc
index 231539b..f16214c 100644
--- a/src/kudu/tserver/heartbeater.cc
+++ b/src/kudu/tserver/heartbeater.cc
@@ -280,9 +280,7 @@ Heartbeater::Thread::Thread(const HostPort& master_address, TabletServer* server
 
 Status Heartbeater::Thread::ConnectToMaster() {
   gscoped_ptr<MasterServiceProxy> new_proxy;
-  MasterServiceProxyForHostPort(master_address_,
-                                server_->messenger(),
-                                &new_proxy);
+  RETURN_NOT_OK(MasterServiceProxyForHostPort(master_address_, server_->messenger(), &new_proxy));
 
   // Ping the master to verify that it's alive.
   master::PingRequestPB req;

http://git-wip-us.apache.org/repos/asf/kudu/blob/fc5e6a3e/src/kudu/tserver/tablet_server-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tserver/tablet_server-test.cc b/src/kudu/tserver/tablet_server-test.cc
index 6d99c24..76ddad6 100644
--- a/src/kudu/tserver/tablet_server-test.cc
+++ b/src/kudu/tserver/tablet_server-test.cc
@@ -29,6 +29,7 @@
 #include "kudu/server/server_base.pb.h"
 #include "kudu/server/server_base.proxy.h"
 #include "kudu/tablet/tablet_bootstrap.h"
+#include "kudu/tserver/heartbeater.h"
 #include "kudu/util/crc.h"
 #include "kudu/util/curl_util.h"
 #include "kudu/util/url-coding.h"
@@ -56,8 +57,9 @@ DEFINE_int32(single_threaded_insert_latency_bench_insert_rows, 1000,
              "Number of rows to insert in the testing phase of the single threaded"
              " tablet server insert latency micro-benchmark");
 
-DECLARE_int32(scanner_batch_size_rows);
+DECLARE_bool(fail_dns_resolution);
 DECLARE_int32(metrics_retirement_age_ms);
+DECLARE_int32(scanner_batch_size_rows);
 DECLARE_string(block_manager);
 
 // Declare these metrics prototypes for simpler unit testing of their behavior.
@@ -2335,5 +2337,14 @@ TEST_F(TabletServerTest, TestKudu120PreRequisites) {
   flush_done_latch.Wait();
 }
 
+// Test DNS resolution failure in the master heartbeater.
+// Regression test for KUDU-1681.
+TEST_F(TabletServerTest, TestFailedDnsResolution) {
+  FLAGS_fail_dns_resolution = true;
+  mini_server_->server()->heartbeater()->TriggerASAP();
+  // Wait to make sure the heartbeater thread attempts the DNS lookup.
+  usleep(100 * 1000);
+}
+
 } // namespace tserver
 } // namespace kudu

http://git-wip-us.apache.org/repos/asf/kudu/blob/fc5e6a3e/src/kudu/util/net/net_util.cc
----------------------------------------------------------------------
diff --git a/src/kudu/util/net/net_util.cc b/src/kudu/util/net/net_util.cc
index 0564398..ac5fb62 100644
--- a/src/kudu/util/net/net_util.cc
+++ b/src/kudu/util/net/net_util.cc
@@ -142,7 +142,7 @@ Status HostPort::ResolveAddresses(vector<Sockaddr>* addresses) const {
             << " for host/port " << ToString();
   }
   if (PREDICT_FALSE(FLAGS_fail_dns_resolution)) {
-    addresses->clear();
+    return Status::NetworkError("injected DNS resolution failure");
   }
   return Status::OK();
 }