aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Yuchen Zeng <zyc@google.com>2016-11-18 01:06:57 -0800
committerGravatar Yuchen Zeng <zyc@google.com>2016-11-18 01:17:10 -0800
commit9e4c8eb8e84123d275bc72f048c96cb1f8ce5acc (patch)
tree3b846436bf39d952977c3367003a96a28499ee02 /src/core
parent224870ec5ee836a07bb301713973fb536db0040d (diff)
Address review comments
Diffstat (limited to 'src/core')
-rw-r--r--src/core/ext/client_channel/resolver_registry.c8
-rw-r--r--src/core/ext/client_channel/resolver_registry.h1
-rw-r--r--src/core/ext/resolver/dns/c_ares/dns_resolver_ares.c35
-rw-r--r--src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver.h4
-rw-r--r--src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c7
-rw-r--r--src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c7
-rw-r--r--src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.h5
-rw-r--r--src/core/ext/resolver/dns/native/dns_resolver.c9
8 files changed, 47 insertions, 29 deletions
diff --git a/src/core/ext/client_channel/resolver_registry.c b/src/core/ext/client_channel/resolver_registry.c
index 94942069a1..dc8be78764 100644
--- a/src/core/ext/client_channel/resolver_registry.c
+++ b/src/core/ext/client_channel/resolver_registry.c
@@ -77,8 +77,12 @@ void grpc_resolver_registry_set_default_prefix(
void grpc_register_resolver_type(grpc_resolver_factory *factory) {
int i;
for (i = 0; i < g_number_of_resolvers; i++) {
- GPR_ASSERT(0 != strcmp(factory->vtable->scheme,
- g_all_of_the_resolvers[i]->vtable->scheme));
+ if (0 == strcmp(factory->vtable->scheme,
+ g_all_of_the_resolvers[i]->vtable->scheme)) {
+ grpc_resolver_factory_unref(g_all_of_the_resolvers[i]);
+ g_all_of_the_resolvers[i] = factory;
+ return;
+ }
}
GPR_ASSERT(g_number_of_resolvers != MAX_RESOLVERS);
grpc_resolver_factory_ref(factory);
diff --git a/src/core/ext/client_channel/resolver_registry.h b/src/core/ext/client_channel/resolver_registry.h
index 2a95a669f0..c216ae1466 100644
--- a/src/core/ext/client_channel/resolver_registry.h
+++ b/src/core/ext/client_channel/resolver_registry.h
@@ -43,6 +43,7 @@ void grpc_resolver_registry_shutdown(void);
void grpc_resolver_registry_set_default_prefix(const char *default_prefix);
/** Register a resolver type.
+ \a factory will replace a registered factory if they have the same scheme.
URI's of \a scheme will be resolved with the given resolver.
If \a priority is greater than zero, then the resolver will be eligible
to resolve names that are passed in with no scheme. Higher priority
diff --git a/src/core/ext/resolver/dns/c_ares/dns_resolver_ares.c b/src/core/ext/resolver/dns/c_ares/dns_resolver_ares.c
index e5691942a4..c0c1efbb86 100644
--- a/src/core/ext/resolver/dns/c_ares/dns_resolver_ares.c
+++ b/src/core/ext/resolver/dns/c_ares/dns_resolver_ares.c
@@ -32,6 +32,8 @@
*/
#include <grpc/support/port_platform.h>
+#if GRPC_ARES == 1
+
#include <string.h>
#include <grpc/support/alloc.h>
@@ -277,7 +279,7 @@ static void dns_ares_start_resolving_locked(grpc_exec_ctx *exec_ctx,
GPR_ASSERT(!r->resolving);
r->resolving = true;
r->addresses = NULL;
- grpc_resolve_address_ares(
+ grpc_resolve_address(
exec_ctx, r->name_to_resolve, r->default_port, r->base.pollset_set,
grpc_closure_create(dns_ares_on_resolved, r), &r->addresses);
}
@@ -299,7 +301,6 @@ static void dns_ares_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *gr) {
gpr_log(GPR_DEBUG, "dns_ares_destroy");
ares_dns_resolver *r = (ares_dns_resolver *)gr;
grpc_combiner_destroy(exec_ctx, r->combiner);
- grpc_ares_cleanup();
if (r->resolved_result != NULL) {
grpc_channel_args_destroy(r->resolved_result);
}
@@ -311,29 +312,18 @@ static void dns_ares_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *gr) {
static grpc_resolver *dns_ares_create(grpc_resolver_args *args,
const char *default_port) {
- ares_dns_resolver *r;
- grpc_error *error = GRPC_ERROR_NONE;
- char *proxy_name;
// Get name from args.
const char *path = args->uri->path;
-
if (0 != strcmp(args->uri->authority, "")) {
gpr_log(GPR_ERROR, "authority based dns uri's not supported");
return NULL;
}
-
- error = grpc_ares_init();
- if (error != GRPC_ERROR_NONE) {
- GRPC_LOG_IF_ERROR("ares_library_init() failed", error);
- return NULL;
- }
-
if (path[0] == '/') ++path;
// Get proxy name, if any.
- proxy_name = grpc_get_http_proxy_server();
+ char *proxy_name = grpc_get_http_proxy_server();
// Create resolver.
- r = gpr_malloc(sizeof(ares_dns_resolver));
+ ares_dns_resolver *r = gpr_malloc(sizeof(ares_dns_resolver));
memset(r, 0, sizeof(*r));
grpc_resolver_init(&r->base, &dns_ares_resolver_vtable);
r->combiner = grpc_combiner_create(NULL);
@@ -389,9 +379,24 @@ 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) {
+ grpc_error *error = grpc_ares_init();
+ if (error != GRPC_ERROR_NONE) {
+ GRPC_LOG_IF_ERROR("ares_library_init() failed", error);
+ return;
+ }
+ grpc_resolve_address = grpc_resolve_address_ares;
grpc_register_resolver_type(dns_ares_resolver_factory_create());
}
gpr_free(resolver);
}
+void grpc_resolver_dns_ares_shutdown(void) { grpc_ares_cleanup(); }
+
+#else /* GRPC_ARES == 1 */
+#include <grpc/support/log.h>
+
+void grpc_resolver_dns_ares_init(void) {}
+
void grpc_resolver_dns_ares_shutdown(void) {}
+
+#endif /* GRPC_ARES == 1 */
diff --git a/src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver.h b/src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver.h
index 7165df0afc..334feaa2ab 100644
--- a/src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver.h
+++ b/src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver.h
@@ -34,6 +34,8 @@
#ifndef GRPC_CORE_EXT_RESOLVER_DNS_C_ARES_GRPC_ARES_EV_DRIVER_H
#define GRPC_CORE_EXT_RESOLVER_DNS_C_ARES_GRPC_ARES_EV_DRIVER_H
+#include <ares.h>
+
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/pollset_set.h"
@@ -48,7 +50,7 @@ void grpc_ares_ev_driver_start(grpc_exec_ctx *exec_ctx,
/* Returns the ares_channel owned by \a ev_driver. To bind a c-ares query to
\a ev_driver, use the ares_channel owned by \a ev_driver as the arg of the
query. */
-void *grpc_ares_ev_driver_get_channel(grpc_ares_ev_driver *ev_driver);
+ares_channel *grpc_ares_ev_driver_get_channel(grpc_ares_ev_driver *ev_driver);
/* Creates a new grpc_ares_ev_driver. Returns GRPC_ERROR_NONE if \a ev_driver is
created successfully. */
diff --git a/src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c b/src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c
index a4733dcb4b..68c52e43f0 100644
--- a/src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c
+++ b/src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c
@@ -32,11 +32,10 @@
*/
#include <grpc/support/port_platform.h>
#include "src/core/lib/iomgr/port.h"
-#if !defined(GRPC_NATIVE_ADDRESS_RESOLVE) && defined(GRPC_POSIX_SOCKET)
+#if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET)
#include "src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver.h"
-#include <ares.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
@@ -236,7 +235,7 @@ static void on_writable_cb(grpc_exec_ctx *exec_ctx, void *arg,
grpc_ares_ev_driver_unref(ev_driver);
}
-void *grpc_ares_ev_driver_get_channel(grpc_ares_ev_driver *ev_driver) {
+ares_channel *grpc_ares_ev_driver_get_channel(grpc_ares_ev_driver *ev_driver) {
return &ev_driver->channel;
}
@@ -327,4 +326,4 @@ void grpc_ares_ev_driver_start(grpc_exec_ctx *exec_ctx,
grpc_ares_ev_driver_unref(ev_driver);
}
-#endif /* !GRPC_NATIVE_ADDRESS_RESOLVE && GRPC_POSIX_SOCKET */
+#endif /* GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET) */
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 f90222b2e6..c8323e740a 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
@@ -32,7 +32,7 @@
*/
#include <grpc/support/port_platform.h>
-#ifndef GRPC_NATIVE_ADDRESS_RESOLVE
+#if GRPC_ARES == 1
#include "src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.h"
#include "src/core/lib/iomgr/sockaddr.h"
@@ -244,8 +244,7 @@ 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;
- ares_channel *channel =
- (ares_channel *)grpc_ares_ev_driver_get_channel(r->ev_driver);
+ 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);
@@ -292,4 +291,4 @@ void grpc_ares_cleanup(void) {
gpr_mu_unlock(&g_init_mu);
}
-#endif /* GRPC_NATIVE_ADDRESS_RESOLVE */
+#endif /* GRPC_ARES == 1 */
diff --git a/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.h b/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.h
index 3968a445ab..ab00a26b36 100644
--- a/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.h
+++ b/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.h
@@ -34,14 +34,13 @@
#ifndef GRPC_CORE_EXT_RESOLVER_DNS_C_ARES_GRPC_ARES_WRAPPER_H
#define GRPC_CORE_EXT_RESOLVER_DNS_C_ARES_GRPC_ARES_WRAPPER_H
-#include "src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver.h"
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/iomgr.h"
#include "src/core/lib/iomgr/polling_entity.h"
#include "src/core/lib/iomgr/resolve_address.h"
-/* Asynchronously resolve addr. Use default_port if a port isn't designated in
- addr, otherwise use the port in addr. grpc_ares_init() must be called at
+/* Asynchronously resolve addr. Use \a default_port if a port isn't designated
+ in addr, otherwise use the port in addr. grpc_ares_init() must be called at
least once before this function. \a on_done may be called directly in this
function without being scheduled with \a exec_ctx, it must not try to acquire
locks that are being held by the caller. */
diff --git a/src/core/ext/resolver/dns/native/dns_resolver.c b/src/core/ext/resolver/dns/native/dns_resolver.c
index 7cbd6ce95c..a3b4d5b9af 100644
--- a/src/core/ext/resolver/dns/native/dns_resolver.c
+++ b/src/core/ext/resolver/dns/native/dns_resolver.c
@@ -310,6 +310,15 @@ void grpc_resolver_dns_native_init(void) {
if (resolver != NULL && gpr_stricmp(resolver, "native") == 0) {
gpr_log(GPR_DEBUG, "Using native dns resolver");
grpc_register_resolver_type(dns_resolver_factory_create());
+ } else {
+ grpc_resolver_factory *existing_factory =
+ grpc_resolver_factory_lookup("dns");
+ if (existing_factory == NULL) {
+ gpr_log(GPR_DEBUG, "Using native dns resolver");
+ grpc_register_resolver_type(dns_resolver_factory_create());
+ } else {
+ grpc_resolver_factory_unref(existing_factory);
+ }
}
gpr_free(resolver);
}