Merge pull request #8192 from dgquintas/resolver_prefix

Rewrote handling of default resolver prefix
pull/8198/merge
David G. Quintas 8 years ago committed by GitHub
commit 1e70deaa5f
  1. 6
      src/core/ext/client_config/client_config_plugin.c
  2. 31
      src/core/ext/client_config/resolver_registry.c
  3. 5
      src/core/ext/client_config/resolver_registry.h
  4. 2
      test/core/surface/channel_create_test.c
  5. 2
      test/core/surface/secure_channel_create_test.c

@ -43,10 +43,6 @@
#include "src/core/ext/client_config/subchannel_index.h" #include "src/core/ext/client_config/subchannel_index.h"
#include "src/core/lib/surface/channel_init.h" #include "src/core/lib/surface/channel_init.h"
#ifndef GRPC_DEFAULT_NAME_PREFIX
#define GRPC_DEFAULT_NAME_PREFIX "dns:///"
#endif
static bool append_filter(grpc_channel_stack_builder *builder, void *arg) { static bool append_filter(grpc_channel_stack_builder *builder, void *arg) {
return grpc_channel_stack_builder_append_filter( return grpc_channel_stack_builder_append_filter(
builder, (const grpc_channel_filter *)arg, NULL, NULL); builder, (const grpc_channel_filter *)arg, NULL, NULL);
@ -79,7 +75,7 @@ static bool set_default_host_if_unset(grpc_channel_stack_builder *builder,
void grpc_client_config_init(void) { void grpc_client_config_init(void) {
grpc_lb_policy_registry_init(); grpc_lb_policy_registry_init();
grpc_resolver_registry_init(GRPC_DEFAULT_NAME_PREFIX); grpc_resolver_registry_init();
grpc_subchannel_index_init(); grpc_subchannel_index_init();
grpc_channel_init_register_stage(GRPC_CLIENT_CHANNEL, INT_MIN, grpc_channel_init_register_stage(GRPC_CLIENT_CHANNEL, INT_MIN,
set_default_host_if_unset, NULL); set_default_host_if_unset, NULL);

@ -40,22 +40,20 @@
#include <grpc/support/string_util.h> #include <grpc/support/string_util.h>
#define MAX_RESOLVERS 10 #define MAX_RESOLVERS 10
#define DEFAULT_RESOLVER_PREFIX_MAX_LENGTH 32
static grpc_resolver_factory *g_all_of_the_resolvers[MAX_RESOLVERS]; static grpc_resolver_factory *g_all_of_the_resolvers[MAX_RESOLVERS];
static int g_number_of_resolvers = 0; static int g_number_of_resolvers = 0;
static char *g_default_resolver_prefix; static char g_default_resolver_prefix[DEFAULT_RESOLVER_PREFIX_MAX_LENGTH] =
"dns:///";
void grpc_resolver_registry_init(const char *default_resolver_prefix) { void grpc_resolver_registry_init() {}
g_default_resolver_prefix = gpr_strdup(default_resolver_prefix);
}
void grpc_resolver_registry_shutdown(void) { void grpc_resolver_registry_shutdown(void) {
int i; for (int i = 0; i < g_number_of_resolvers; i++) {
for (i = 0; i < g_number_of_resolvers; i++) {
grpc_resolver_factory_unref(g_all_of_the_resolvers[i]); grpc_resolver_factory_unref(g_all_of_the_resolvers[i]);
} }
gpr_free(g_default_resolver_prefix);
// FIXME(ctiller): this should live in grpc_resolver_registry_init, // FIXME(ctiller): this should live in grpc_resolver_registry_init,
// however that would have the client_config plugin call this AFTER we start // however that would have the client_config plugin call this AFTER we start
// registering resolvers from third party plugins, and so they'd never show // registering resolvers from third party plugins, and so they'd never show
@ -65,6 +63,17 @@ void grpc_resolver_registry_shutdown(void) {
g_number_of_resolvers = 0; g_number_of_resolvers = 0;
} }
void grpc_resolver_registry_set_default_prefix(
const char *default_resolver_prefix) {
const size_t len = strlen(default_resolver_prefix);
GPR_ASSERT(len < DEFAULT_RESOLVER_PREFIX_MAX_LENGTH &&
"default resolver prefix too long");
GPR_ASSERT(len > 0 && "default resolver prefix can't be empty");
// By the previous assert, default_resolver_prefix is safe to be copied with a
// plain strcpy.
strcpy(g_default_resolver_prefix, default_resolver_prefix);
}
void grpc_register_resolver_type(grpc_resolver_factory *factory) { void grpc_register_resolver_type(grpc_resolver_factory *factory) {
int i; int i;
for (i = 0; i < g_number_of_resolvers; i++) { for (i = 0; i < g_number_of_resolvers; i++) {
@ -108,7 +117,6 @@ static grpc_resolver_factory *resolve_factory(const char *target,
*uri = grpc_uri_parse(target, 1); *uri = grpc_uri_parse(target, 1);
factory = lookup_factory_by_uri(*uri); factory = lookup_factory_by_uri(*uri);
if (factory == NULL) { if (factory == NULL) {
if (g_default_resolver_prefix != NULL) {
grpc_uri_destroy(*uri); grpc_uri_destroy(*uri);
gpr_asprintf(&tmp, "%s%s", g_default_resolver_prefix, target); gpr_asprintf(&tmp, "%s%s", g_default_resolver_prefix, target);
*uri = grpc_uri_parse(tmp, 1); *uri = grpc_uri_parse(tmp, 1);
@ -116,14 +124,9 @@ static grpc_resolver_factory *resolve_factory(const char *target,
if (factory == NULL) { if (factory == NULL) {
grpc_uri_destroy(grpc_uri_parse(target, 0)); grpc_uri_destroy(grpc_uri_parse(target, 0));
grpc_uri_destroy(grpc_uri_parse(tmp, 0)); grpc_uri_destroy(grpc_uri_parse(tmp, 0));
gpr_log(GPR_ERROR, "don't know how to resolve '%s' or '%s'", target, gpr_log(GPR_ERROR, "don't know how to resolve '%s' or '%s'", target, tmp);
tmp);
} }
gpr_free(tmp); gpr_free(tmp);
} else {
grpc_uri_destroy(grpc_uri_parse(target, 0));
gpr_log(GPR_ERROR, "don't know how to resolve '%s'", target);
}
} }
return factory; return factory;
} }

@ -36,9 +36,12 @@
#include "src/core/ext/client_config/resolver_factory.h" #include "src/core/ext/client_config/resolver_factory.h"
void grpc_resolver_registry_init(const char *default_prefix); void grpc_resolver_registry_init();
void grpc_resolver_registry_shutdown(void); void grpc_resolver_registry_shutdown(void);
/** Set the default URI prefix to \a default_prefix. */
void grpc_resolver_registry_set_default_prefix(const char *default_prefix);
/** Register a resolver type. /** Register a resolver type.
URI's of \a scheme will be resolved with the given resolver. 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 If \a priority is greater than zero, then the resolver will be eligible

@ -40,7 +40,7 @@ void test_unknown_scheme_target(void) {
grpc_channel *chan; grpc_channel *chan;
/* avoid default prefix */ /* avoid default prefix */
grpc_resolver_registry_shutdown(); grpc_resolver_registry_shutdown();
grpc_resolver_registry_init(""); grpc_resolver_registry_init();
chan = grpc_insecure_channel_create("blah://blah", NULL, NULL); chan = grpc_insecure_channel_create("blah://blah", NULL, NULL);
GPR_ASSERT(chan != NULL); GPR_ASSERT(chan != NULL);

@ -46,7 +46,7 @@ void test_unknown_scheme_target(void) {
grpc_channel *chan; grpc_channel *chan;
grpc_channel_credentials *creds; grpc_channel_credentials *creds;
grpc_resolver_registry_shutdown(); grpc_resolver_registry_shutdown();
grpc_resolver_registry_init(""); grpc_resolver_registry_init();
creds = grpc_fake_transport_security_credentials_create(); creds = grpc_fake_transport_security_credentials_create();
chan = grpc_secure_channel_create(creds, "blah://blah", NULL, NULL); chan = grpc_secure_channel_create(creds, "blah://blah", NULL, NULL);

Loading…
Cancel
Save