Turn off c_ares resolver by default

reviewable/pr7771/r14
Yuchen Zeng 8 years ago
parent e5230b7f2e
commit 15618625ed
  1. 4
      doc/environment_variables.md
  2. 4
      src/core/ext/resolver/dns/c_ares/dns_resolver_ares.c
  3. 58
      src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver_fallback.c
  4. 2
      src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c
  5. 60
      src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c
  6. 1
      src/core/lib/iomgr/exec_ctx.c
  7. 21
      src/core/lib/iomgr/tcp_client_posix.c
  8. 19
      tools/run_tests/run_tests_matrix.py

@ -74,6 +74,6 @@ some configuration as environment variables that can be set.
Declares which DNS resolver to use. The default is ares if gRPC is built with Declares which DNS resolver to use. The default is ares if gRPC is built with
c-ares support. Otherwise, the value of this environment variable is ignored. c-ares support. Otherwise, the value of this environment variable is ignored.
Available DNS resolver include: Available DNS resolver include:
- ares (default) - a DNS resolver based around the c-ares library - native (default)- a DNS resolver based around getaddrinfo(), creates a new thread to
- native - a DNS resolver based around getaddrinfo(), creates a new thread to
perform name resolution perform name resolution
- ares - a DNS resolver based around the c-ares library

@ -369,7 +369,9 @@ static grpc_resolver_factory *dns_ares_resolver_factory_create() {
void grpc_resolver_dns_ares_init(void) { void grpc_resolver_dns_ares_init(void) {
char *resolver = gpr_getenv("GRPC_DNS_RESOLVER"); char *resolver = gpr_getenv("GRPC_DNS_RESOLVER");
if (resolver == NULL || gpr_stricmp(resolver, "ares") == 0) { /* TODO(zyc): Turn on c-ares based resolver by default after the address
sorter is added. */
if (resolver != NULL && gpr_stricmp(resolver, "ares") == 0) {
grpc_error *error = grpc_ares_init(); grpc_error *error = grpc_ares_init();
if (error != GRPC_ERROR_NONE) { if (error != GRPC_ERROR_NONE) {
GRPC_LOG_IF_ERROR("ares_library_init() failed", error); GRPC_LOG_IF_ERROR("ares_library_init() failed", error);

@ -1,58 +0,0 @@
/*
*
* Copyright 2016, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#include <grpc/support/port_platform.h>
#include "src/core/lib/iomgr/port.h"
#if !(GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET))
#include "src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver.h"
struct grpc_ares_ev_driver {
char unused_member; // unused member to prevent undefined behaviour
};
void grpc_ares_ev_driver_start(grpc_exec_ctx *exec_ctx,
grpc_ares_ev_driver *ev_driver) {}
ares_channel *grpc_ares_ev_driver_get_channel(grpc_ares_ev_driver *ev_driver) {
return NULL;
}
grpc_error *grpc_ares_ev_driver_create(grpc_ares_ev_driver **ev_driver,
grpc_pollset_set *pollset_set) {
return GRPC_ERROR_NONE;
}
void grpc_ares_ev_driver_destroy(grpc_ares_ev_driver *ev_driver) {}
#endif /* !(GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET)) */

@ -98,7 +98,7 @@ static void grpc_ares_request_unref(grpc_exec_ctx *exec_ctx,
/* If there are no pending queries, invoke on_done callback and destroy the /* If there are no pending queries, invoke on_done callback and destroy the
request */ request */
if (gpr_unref(&r->pending_queries)) { if (gpr_unref(&r->pending_queries)) {
/* TODO(zyc): Sort results with RPC6724 before invoking on_done. */ /* TODO(zyc): Sort results with RFC6724 before invoking on_done. */
if (exec_ctx == NULL) { if (exec_ctx == NULL) {
/* A new exec_ctx is created here, as the c-ares interface does not /* A new exec_ctx is created here, as the c-ares interface does not
provide one in ares_host_callback. It's safe to schedule on_done with provide one in ares_host_callback. It's safe to schedule on_done with

@ -1,60 +0,0 @@
/*
*
* Copyright 2016, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/* TODO(zyc): remove this fallback after we can build c-ares on windows */
#include <grpc/support/port_platform.h>
#if !(GRPC_ARES == 1)
#include "src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver.h"
#include "src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.h"
void grpc_resolve_address_ares_impl(grpc_exec_ctx *exec_ctx, const char *name,
const char *default_port,
grpc_pollset_set *interested_parties,
grpc_closure *on_done,
grpc_resolved_addresses **addrs) {
grpc_resolve_address(exec_ctx, name, default_port, interested_parties,
on_done, addrs);
}
void (*grpc_resolve_address_ares)(
grpc_exec_ctx *exec_ctx, const char *name, const char *default_port,
grpc_pollset_set *interested_parties, grpc_closure *on_done,
grpc_resolved_addresses **addrs) = grpc_resolve_address_ares_impl;
grpc_error *grpc_ares_init(void) { return GRPC_ERROR_NONE; }
void grpc_ares_cleanup(void) {}
#endif /* GRPC_NATIVE_ADDRESS_RESOLVE */

@ -64,7 +64,6 @@ 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 grpc_exec_ctx_flush(grpc_exec_ctx *exec_ctx) {
bool did_something = 0; bool did_something = 0;
gpr_log(GPR_DEBUG, "grpc_exec_ctx_flush");
GPR_TIMER_BEGIN("grpc_exec_ctx_flush", 0); GPR_TIMER_BEGIN("grpc_exec_ctx_flush", 0);
for (;;) { for (;;) {
if (!grpc_closure_list_empty(exec_ctx->closure_list)) { if (!grpc_closure_list_empty(exec_ctx->closure_list)) {

@ -35,9 +35,6 @@
#ifdef GRPC_POSIX_SOCKET #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 "src/core/lib/iomgr/tcp_client_posix.h"
#include <errno.h> #include <errno.h>
@ -290,24 +287,6 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx,
*ep = NULL; *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. */ /* Use dualstack sockets where available. */
if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) { if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) {
addr = &addr6_v4mapped; addr = &addr6_v4mapped;

@ -221,19 +221,20 @@ def _create_portability_test_jobs(extra_args=[], inner_jobs=_DEFAULT_INNER_JOBS)
extra_args=extra_args, extra_args=extra_args,
inner_jobs=inner_jobs) inner_jobs=inner_jobs)
# C and C++ with the native DNS resolver on Linux # C and C++ with the c-ares DNS resolver on Linux
test_jobs += _generate_jobs(languages=['c', 'c++'], test_jobs += _generate_jobs(languages=['c', 'c++'],
configs=['dbg'], platforms=['linux'], configs=['dbg'], platforms=['linux'],
labels=['portability'], labels=['portability'],
extra_args=extra_args, extra_args=extra_args,
extra_envs={'GRPC_DNS_RESOLVER': 'native'}) extra_envs={'GRPC_DNS_RESOLVER': 'ares'})
# C with the native DNS resolver on Windonws # TODO(zyc): Turn on this test after adding c-ares support on windows.
test_jobs += _generate_jobs(languages=['c'], # C with the c-ares DNS resolver on Windonws
configs=['dbg'], platforms=['windows'], # test_jobs += _generate_jobs(languages=['c'],
labels=['portability'], # configs=['dbg'], platforms=['windows'],
extra_args=extra_args, # labels=['portability'],
extra_envs={'GRPC_DNS_RESOLVER': 'native'}) # extra_args=extra_args,
# extra_envs={'GRPC_DNS_RESOLVER': 'ares'})
# cmake build for C and C++ # cmake build for C and C++
# TODO(jtattermusch): some of the tests are failing, so we force --build_only # TODO(jtattermusch): some of the tests are failing, so we force --build_only

Loading…
Cancel
Save