From dc6b569d97aa54e987681f869f13acdd9c89834f Mon Sep 17 00:00:00 2001
From: Yuchen Zeng <zyc@google.com>
Date: Mon, 13 Feb 2017 22:44:01 -0800
Subject: [PATCH] Print debug info

---
 .../resolver/dns/c_ares/grpc_ares_wrapper.c   | 32 +++++++------------
 src/core/lib/iomgr/exec_ctx.c                 |  1 +
 src/core/lib/iomgr/tcp_client_posix.c         | 21 ++++++++++++
 3 files changed, 33 insertions(+), 21 deletions(-)

diff --git a/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c b/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c
index 8e54982571..77f87c8a57 100644
--- a/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c
+++ b/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c
@@ -156,8 +156,8 @@ static void on_done_cb(void *arg, int status, int timeouts,
         ares_inet_ntop(AF_INET6, &addr->sin6_addr, output, INET6_ADDRSTRLEN);
         gpr_log(GPR_DEBUG,
                 "c-ares resolver gets a AF_INET6 result: \n"
-                "  addr: %s\n  port: %s\n",
-                output, r->port);
+                "  addr: %s\n  port: %s\n  sin6_scope_id: %d\n",
+                output, r->port, addr->sin6_scope_id);
       } else {
         (*addresses)->addrs[i].len = sizeof(struct sockaddr_in);
         struct sockaddr_in *addr =
@@ -191,22 +191,6 @@ static void on_done_cb(void *arg, int status, int timeouts,
   grpc_ares_request_unref(NULL, r);
 }
 
-static void start_resolving(grpc_exec_ctx *exec_ctx, void *arg,
-                            grpc_error *error) {
-  grpc_ares_request *r = (grpc_ares_request *)arg;
-  ares_channel *channel = grpc_ares_ev_driver_get_channel(r->ev_driver);
-  // An extra reference is put here to avoid destroying the request in
-  // on_done_cb before calling grpc_ares_ev_driver_start.
-  gpr_ref_init(&r->pending_queries, 2);
-  if (grpc_ipv6_loopback_available()) {
-    gpr_ref(&r->pending_queries);
-    ares_gethostbyname(*channel, r->host, AF_INET6, on_done_cb, r);
-  }
-  ares_gethostbyname(*channel, r->host, AF_INET, on_done_cb, r);
-  grpc_ares_ev_driver_start(exec_ctx, r->ev_driver);
-  grpc_ares_request_unref(exec_ctx, r);
-}
-
 void grpc_resolve_address_ares_impl(grpc_exec_ctx *exec_ctx, const char *name,
                                     const char *default_port,
                                     grpc_pollset_set *interested_parties,
@@ -249,9 +233,15 @@ void grpc_resolve_address_ares_impl(grpc_exec_ctx *exec_ctx, const char *name,
   r->host = host;
   r->success = false;
   r->error = GRPC_ERROR_NONE;
-  grpc_closure_sched(exec_ctx, grpc_closure_create(start_resolving, r,
-                                                   grpc_schedule_on_exec_ctx),
-                     GRPC_ERROR_NONE);
+  ares_channel *channel = grpc_ares_ev_driver_get_channel(r->ev_driver);
+  gpr_ref_init(&r->pending_queries, 2);
+  if (grpc_ipv6_loopback_available()) {
+    gpr_ref(&r->pending_queries);
+    ares_gethostbyname(*channel, r->host, AF_INET6, on_done_cb, r);
+  }
+  ares_gethostbyname(*channel, r->host, AF_INET, on_done_cb, r);
+  grpc_ares_ev_driver_start(exec_ctx, r->ev_driver);
+  grpc_ares_request_unref(exec_ctx, r);
   return;
 
 error_cleanup:
diff --git a/src/core/lib/iomgr/exec_ctx.c b/src/core/lib/iomgr/exec_ctx.c
index 83bb436bd0..39ab396268 100644
--- a/src/core/lib/iomgr/exec_ctx.c
+++ b/src/core/lib/iomgr/exec_ctx.c
@@ -64,6 +64,7 @@ bool grpc_always_ready_to_finish(grpc_exec_ctx *exec_ctx, void *arg_ignored) {
 
 bool grpc_exec_ctx_flush(grpc_exec_ctx *exec_ctx) {
   bool did_something = 0;
+  gpr_log(GPR_DEBUG, "grpc_exec_ctx_flush");
   GPR_TIMER_BEGIN("grpc_exec_ctx_flush", 0);
   for (;;) {
     if (!grpc_closure_list_empty(exec_ctx->closure_list)) {
diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c
index 0144192b71..daa4eb51ee 100644
--- a/src/core/lib/iomgr/tcp_client_posix.c
+++ b/src/core/lib/iomgr/tcp_client_posix.c
@@ -35,6 +35,9 @@
 
 #ifdef GRPC_POSIX_SOCKET
 
+#include "src/core/lib/iomgr/sockaddr.h"
+#include "src/core/lib/iomgr/socket_utils_posix.h"
+
 #include "src/core/lib/iomgr/tcp_client_posix.h"
 
 #include <errno.h>
@@ -287,6 +290,24 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx,
 
   *ep = NULL;
 
+  struct sockaddr_in *addr4 = (struct sockaddr_in *)addr->addr;
+  if (addr4->sin_family == AF_INET) {
+    char output[INET_ADDRSTRLEN];
+    inet_ntop(AF_INET, &addr4->sin_addr, output, INET_ADDRSTRLEN);
+    gpr_log(GPR_DEBUG,
+            "native resolver gets a AF_INET result: \n"
+            "  addr: %s\n",
+            output);
+  } else {
+    struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)addr->addr;
+    char output[INET6_ADDRSTRLEN];
+    inet_ntop(AF_INET6, &addr6->sin6_addr, output, INET6_ADDRSTRLEN);
+    gpr_log(GPR_DEBUG,
+            "native resolver gets a AF_INET6 result: \n"
+            "  addr: %s\n, sin6_scope_id: %d\n",
+            output, addr6->sin6_scope_id);
+  }
+
   /* Use dualstack sockets where available. */
   if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) {
     addr = &addr6_v4mapped;
-- 
GitLab