aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark D. Roth <roth@google.com>2018-01-31 16:58:30 -0800
committerGitHub <noreply@github.com>2018-01-31 16:58:30 -0800
commit076f5ba5f31fa4fc000d7184ff24a656c07fcee7 (patch)
tree5c93153ae0a742570e1c8659967b2a8642ea20e5
parentd2cbfac17fbc0fb73d42e568977cb633e735ab38 (diff)
parenta9d07ef7c69f55e8e8dd9120f8a8b3a6fc882828 (diff)
downloadgrpc-grpc-076f5ba5f31fa4fc000d7184ff24a656c07fcee7.tar.gz
Merge pull request #14250 from markdroth/dns_resolver_backoff_reset_fix
Fix DNS resolvers to reset the backoff in a better place.
-rw-r--r--src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc5
-rw-r--r--src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc5
2 files changed, 6 insertions, 4 deletions
diff --git a/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc b/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc
index 6ba5f932f0..0315a29d15 100644
--- a/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc
+++ b/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc
@@ -131,7 +131,6 @@ static void dns_ares_shutdown_locked(grpc_resolver* resolver) {
static void dns_ares_channel_saw_error_locked(grpc_resolver* resolver) {
ares_dns_resolver* r = (ares_dns_resolver*)resolver;
if (!r->resolving) {
- r->backoff->Reset();
dns_ares_start_resolving_locked(r);
}
}
@@ -261,6 +260,9 @@ static void dns_ares_on_resolved_locked(void* arg, grpc_error* error) {
if (service_config != nullptr) grpc_service_config_destroy(service_config);
gpr_free(service_config_string);
grpc_lb_addresses_destroy(r->lb_addresses);
+ // Reset backoff state so that we start from the beginning when the
+ // next request gets triggered.
+ r->backoff->Reset();
} else {
const char* msg = grpc_error_string(error);
gpr_log(GPR_DEBUG, "dns resolution failed: %s", msg);
@@ -297,7 +299,6 @@ static void dns_ares_next_locked(grpc_resolver* resolver,
r->next_completion = on_complete;
r->target_result = target_result;
if (r->resolved_version == 0 && !r->resolving) {
- r->backoff->Reset();
dns_ares_start_resolving_locked(r);
} else {
dns_ares_maybe_finish_next_locked(r);
diff --git a/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc b/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc
index 62f03d52c0..d071c3ca42 100644
--- a/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc
+++ b/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc
@@ -106,7 +106,6 @@ static void dns_shutdown_locked(grpc_resolver* resolver) {
static void dns_channel_saw_error_locked(grpc_resolver* resolver) {
dns_resolver* r = (dns_resolver*)resolver;
if (!r->resolving) {
- r->backoff->Reset();
dns_start_resolving_locked(r);
}
}
@@ -119,7 +118,6 @@ static void dns_next_locked(grpc_resolver* resolver,
r->next_completion = on_complete;
r->target_result = target_result;
if (r->resolved_version == 0 && !r->resolving) {
- r->backoff->Reset();
dns_start_resolving_locked(r);
} else {
dns_maybe_finish_next_locked(r);
@@ -160,6 +158,9 @@ static void dns_on_resolved_locked(void* arg, grpc_error* error) {
result = grpc_channel_args_copy_and_add(r->channel_args, &new_arg, 1);
grpc_resolved_addresses_destroy(r->addresses);
grpc_lb_addresses_destroy(addresses);
+ // Reset backoff state so that we start from the beginning when the
+ // next request gets triggered.
+ r->backoff->Reset();
} else {
grpc_millis next_try = r->backoff->NextAttemptTime();
grpc_millis timeout = next_try - grpc_core::ExecCtx::Get()->Now();