Add dns_resolver changes

reviewable/pr20542/r1
Yash Tibrewal 5 years ago
parent 4a71a911e8
commit 0e10bc17ea
  1. 32
      src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc
  2. 2
      src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc

@ -66,7 +66,9 @@ class NativeDnsResolver : public Resolver {
void MaybeStartResolvingLocked(); void MaybeStartResolvingLocked();
void StartResolvingLocked(); void StartResolvingLocked();
static void OnNextResolution(void* arg, grpc_error* error);
static void OnNextResolutionLocked(void* arg, grpc_error* error); static void OnNextResolutionLocked(void* arg, grpc_error* error);
static void OnResolved(void* arg, grpc_error* error);
static void OnResolvedLocked(void* arg, grpc_error* error); static void OnResolvedLocked(void* arg, grpc_error* error);
/// name to resolve /// name to resolve
@ -115,11 +117,6 @@ NativeDnsResolver::NativeDnsResolver(ResolverArgs args)
if (args.pollset_set != nullptr) { if (args.pollset_set != nullptr) {
grpc_pollset_set_add_pollset_set(interested_parties_, args.pollset_set); grpc_pollset_set_add_pollset_set(interested_parties_, args.pollset_set);
} }
GRPC_CLOSURE_INIT(&on_next_resolution_,
NativeDnsResolver::OnNextResolutionLocked, this,
grpc_combiner_scheduler(args.combiner));
GRPC_CLOSURE_INIT(&on_resolved_, NativeDnsResolver::OnResolvedLocked, this,
grpc_combiner_scheduler(args.combiner));
} }
NativeDnsResolver::~NativeDnsResolver() { NativeDnsResolver::~NativeDnsResolver() {
@ -150,6 +147,15 @@ void NativeDnsResolver::ShutdownLocked() {
} }
} }
void NativeDnsResolver::OnNextResolution(void* arg, grpc_error* error) {
NativeDnsResolver* r = static_cast<NativeDnsResolver*>(arg);
r->combiner()->Run(
GRPC_CLOSURE_INIT(&r->on_next_resolution_,
NativeDnsResolver::OnNextResolutionLocked, this,
nullptr),
GRPC_ERROR_NONE);
}
void NativeDnsResolver::OnNextResolutionLocked(void* arg, grpc_error* error) { void NativeDnsResolver::OnNextResolutionLocked(void* arg, grpc_error* error) {
NativeDnsResolver* r = static_cast<NativeDnsResolver*>(arg); NativeDnsResolver* r = static_cast<NativeDnsResolver*>(arg);
r->have_next_resolution_timer_ = false; r->have_next_resolution_timer_ = false;
@ -159,6 +165,14 @@ void NativeDnsResolver::OnNextResolutionLocked(void* arg, grpc_error* error) {
r->Unref(DEBUG_LOCATION, "retry-timer"); r->Unref(DEBUG_LOCATION, "retry-timer");
} }
void NativeDnsResolver::OnResolved(void* arg, grpc_error* error) {
NativeDnsResolver* r = static_cast<NativeDnsResolver*>(arg);
r->combiner()->Run(
GRPC_CLOSURE_INIT(&on_resolved_, NativeDnsResolver::OnResolvedLocked,
this, nullptr),
GRPC_ERROR_NONE)
}
void NativeDnsResolver::OnResolvedLocked(void* arg, grpc_error* error) { void NativeDnsResolver::OnResolvedLocked(void* arg, grpc_error* error) {
NativeDnsResolver* r = static_cast<NativeDnsResolver*>(arg); NativeDnsResolver* r = static_cast<NativeDnsResolver*>(arg);
GPR_ASSERT(r->resolving_); GPR_ASSERT(r->resolving_);
@ -202,6 +216,9 @@ void NativeDnsResolver::OnResolvedLocked(void* arg, grpc_error* error) {
} else { } else {
gpr_log(GPR_DEBUG, "retrying immediately"); gpr_log(GPR_DEBUG, "retrying immediately");
} }
GRPC_CLOSURE_INIT(&r->on_next_resolution_,
NativeDnsResolver::OnNextResolution, this,
grpc_schedule_on_exec_ctx);
grpc_timer_init(&r->next_resolution_timer_, next_try, grpc_timer_init(&r->next_resolution_timer_, next_try,
&r->on_next_resolution_); &r->on_next_resolution_);
} }
@ -229,6 +246,9 @@ void NativeDnsResolver::MaybeStartResolvingLocked() {
// new closure API is done, find a way to track this ref with the timer // new closure API is done, find a way to track this ref with the timer
// callback as part of the type system. // callback as part of the type system.
Ref(DEBUG_LOCATION, "next_resolution_timer_cooldown").release(); Ref(DEBUG_LOCATION, "next_resolution_timer_cooldown").release();
GRPC_CLOSURE_INIT(&on_next_resolution_,
NativeDnsResolver::OnNextResolution, this,
grpc_schedule_on_exec_ctx);
grpc_timer_init(&next_resolution_timer_, grpc_timer_init(&next_resolution_timer_,
ExecCtx::Get()->Now() + ms_until_next_resolution, ExecCtx::Get()->Now() + ms_until_next_resolution,
&on_next_resolution_); &on_next_resolution_);
@ -247,6 +267,8 @@ void NativeDnsResolver::StartResolvingLocked() {
GPR_ASSERT(!resolving_); GPR_ASSERT(!resolving_);
resolving_ = true; resolving_ = true;
addresses_ = nullptr; addresses_ = nullptr;
GRPC_CLOSURE_INIT(&on_resolved_, NativeDnsResolver::OnResolved, this,
grpc_schedule_on_exec_ctx);
grpc_resolve_address(name_to_resolve_, kDefaultPort, interested_parties_, grpc_resolve_address(name_to_resolve_, kDefaultPort, interested_parties_,
&on_resolved_, &addresses_); &on_resolved_, &addresses_);
last_resolution_timestamp_ = grpc_core::ExecCtx::Get()->Now(); last_resolution_timestamp_ = grpc_core::ExecCtx::Get()->Now();

@ -128,7 +128,7 @@ void FakeResolver::RequestReresolutionLocked() {
reresolution_closure_pending_ = true; reresolution_closure_pending_ = true;
Ref().release(); // ref held by closure Ref().release(); // ref held by closure
GRPC_CLOSURE_INIT(&reresolution_closure_, ReturnReresolutionResult, this, GRPC_CLOSURE_INIT(&reresolution_closure_, ReturnReresolutionResult, this,
grpc_combiner_scheduler(combiner())); nullptr);
combiner()->Run(&reresolution_closure_, GRPC_ERROR_NONE); combiner()->Run(&reresolution_closure_, GRPC_ERROR_NONE);
} }
} }

Loading…
Cancel
Save