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
c-ares support. Otherwise, the value of this environment variable is ignored.
Available DNS resolver include:
- ares (default) - a DNS resolver based around the c-ares library
- native - a DNS resolver based around getaddrinfo(), creates a new thread to
- native (default)- a DNS resolver based around getaddrinfo(), creates a new thread to
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) {
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();
if (error != GRPC_ERROR_NONE) {
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
request */
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) {
/* 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

@ -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 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)) {

@ -35,9 +35,6 @@
#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>
@ -290,24 +287,6 @@ 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;

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

Loading…
Cancel
Save