|
|
|
@ -66,7 +66,9 @@ class NativeDnsResolver : public Resolver { |
|
|
|
|
void MaybeStartResolvingLocked(); |
|
|
|
|
void StartResolvingLocked(); |
|
|
|
|
|
|
|
|
|
static void OnNextResolution(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); |
|
|
|
|
|
|
|
|
|
/// name to resolve
|
|
|
|
@ -115,11 +117,6 @@ NativeDnsResolver::NativeDnsResolver(ResolverArgs args) |
|
|
|
|
if (args.pollset_set != nullptr) { |
|
|
|
|
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() { |
|
|
|
@ -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) { |
|
|
|
|
NativeDnsResolver* r = static_cast<NativeDnsResolver*>(arg); |
|
|
|
|
r->have_next_resolution_timer_ = false; |
|
|
|
@ -159,6 +165,14 @@ void NativeDnsResolver::OnNextResolutionLocked(void* arg, grpc_error* error) { |
|
|
|
|
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) { |
|
|
|
|
NativeDnsResolver* r = static_cast<NativeDnsResolver*>(arg); |
|
|
|
|
GPR_ASSERT(r->resolving_); |
|
|
|
@ -202,6 +216,9 @@ void NativeDnsResolver::OnResolvedLocked(void* arg, grpc_error* error) { |
|
|
|
|
} else { |
|
|
|
|
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, |
|
|
|
|
&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
|
|
|
|
|
// callback as part of the type system.
|
|
|
|
|
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_, |
|
|
|
|
ExecCtx::Get()->Now() + ms_until_next_resolution, |
|
|
|
|
&on_next_resolution_); |
|
|
|
@ -247,6 +267,8 @@ void NativeDnsResolver::StartResolvingLocked() { |
|
|
|
|
GPR_ASSERT(!resolving_); |
|
|
|
|
resolving_ = true; |
|
|
|
|
addresses_ = nullptr; |
|
|
|
|
GRPC_CLOSURE_INIT(&on_resolved_, NativeDnsResolver::OnResolved, this, |
|
|
|
|
grpc_schedule_on_exec_ctx); |
|
|
|
|
grpc_resolve_address(name_to_resolve_, kDefaultPort, interested_parties_, |
|
|
|
|
&on_resolved_, &addresses_); |
|
|
|
|
last_resolution_timestamp_ = grpc_core::ExecCtx::Get()->Now(); |
|
|
|
|