Add fake_resolver changes

reviewable/pr20542/r1
Yash Tibrewal 6 years ago
parent 8610a64ec9
commit 4a71a911e8
  1. 49
      src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc
  2. 3
      src/core/ext/filters/client_channel/xds/xds_client.cc

@ -98,8 +98,6 @@ FakeResolver::FakeResolver(ResolverArgs args)
: Resolver(args.combiner, std::move(args.result_handler)),
response_generator_(
FakeResolverResponseGenerator::GetFromArgs(args.args)) {
GRPC_CLOSURE_INIT(&reresolution_closure_, ReturnReresolutionResult, this,
grpc_combiner_scheduler(combiner()));
// Channels sharing the same subchannels may have different resolver response
// generators. If we don't remove this arg, subchannel pool will create new
// subchannels for the same address instead of reusing existing ones because
@ -129,7 +127,9 @@ void FakeResolver::RequestReresolutionLocked() {
if (!reresolution_closure_pending_) {
reresolution_closure_pending_ = true;
Ref().release(); // ref held by closure
GRPC_CLOSURE_SCHED(&reresolution_closure_, GRPC_ERROR_NONE);
GRPC_CLOSURE_INIT(&reresolution_closure_, ReturnReresolutionResult, this,
grpc_combiner_scheduler(combiner()));
combiner()->Run(&reresolution_closure_, GRPC_ERROR_NONE);
}
}
}
@ -208,11 +208,11 @@ void FakeResolverResponseGenerator::SetResponse(Resolver::Result result) {
SetResponseClosureArg* closure_arg = New<SetResponseClosureArg>();
closure_arg->resolver = std::move(resolver);
closure_arg->result = std::move(result);
GRPC_CLOSURE_SCHED(
GRPC_CLOSURE_INIT(
&closure_arg->set_response_closure, SetResponseLocked, closure_arg,
grpc_combiner_scheduler(closure_arg->resolver->combiner())),
closure_arg->resolver->combiner()->Run(
GRPC_CLOSURE_INIT(&closure_arg->set_response_closure, SetResponseLocked,
closure_arg, nullptr),
GRPC_ERROR_NONE);
;
}
void FakeResolverResponseGenerator::SetReresolutionResponseLocked(
@ -238,11 +238,9 @@ void FakeResolverResponseGenerator::SetReresolutionResponse(
closure_arg->resolver = std::move(resolver);
closure_arg->result = std::move(result);
closure_arg->has_result = true;
GRPC_CLOSURE_SCHED(
GRPC_CLOSURE_INIT(
&closure_arg->set_response_closure, SetReresolutionResponseLocked,
closure_arg,
grpc_combiner_scheduler(closure_arg->resolver->combiner())),
closure_arg->resolver->combiner()->Run(
GRPC_CLOSURE_INIT(&closure_arg->set_response_closure,
SetReresolutionResponseLocked, closure_arg, nullptr),
GRPC_ERROR_NONE);
}
@ -255,11 +253,9 @@ void FakeResolverResponseGenerator::UnsetReresolutionResponse() {
}
SetResponseClosureArg* closure_arg = New<SetResponseClosureArg>();
closure_arg->resolver = std::move(resolver);
GRPC_CLOSURE_SCHED(
GRPC_CLOSURE_INIT(
&closure_arg->set_response_closure, SetReresolutionResponseLocked,
closure_arg,
grpc_combiner_scheduler(closure_arg->resolver->combiner())),
closure_arg->resolver->combiner()->Run(
GRPC_CLOSURE_INIT(&closure_arg->set_response_closure,
SetReresolutionResponseLocked, closure_arg, nullptr),
GRPC_ERROR_NONE);
}
@ -283,10 +279,9 @@ void FakeResolverResponseGenerator::SetFailure() {
}
SetResponseClosureArg* closure_arg = New<SetResponseClosureArg>();
closure_arg->resolver = std::move(resolver);
GRPC_CLOSURE_SCHED(
GRPC_CLOSURE_INIT(
&closure_arg->set_response_closure, SetFailureLocked, closure_arg,
grpc_combiner_scheduler(closure_arg->resolver->combiner())),
closure_arg->resolver->combiner()->Run(
GRPC_CLOSURE_INIT(&closure_arg->set_response_closure, SetFailureLocked,
closure_arg, nullptr),
GRPC_ERROR_NONE);
}
@ -300,10 +295,9 @@ void FakeResolverResponseGenerator::SetFailureOnReresolution() {
SetResponseClosureArg* closure_arg = New<SetResponseClosureArg>();
closure_arg->resolver = std::move(resolver);
closure_arg->immediate = false;
GRPC_CLOSURE_SCHED(
GRPC_CLOSURE_INIT(
&closure_arg->set_response_closure, SetFailureLocked, closure_arg,
grpc_combiner_scheduler(closure_arg->resolver->combiner())),
closure_arg->resolver->combiner()->Run(
GRPC_CLOSURE_INIT(&closure_arg->set_response_closure, SetFailureLocked,
closure_arg, nullptr),
GRPC_ERROR_NONE);
}
@ -316,10 +310,9 @@ void FakeResolverResponseGenerator::SetFakeResolver(
SetResponseClosureArg* closure_arg = New<SetResponseClosureArg>();
closure_arg->resolver = resolver_->Ref();
closure_arg->result = std::move(result_);
GRPC_CLOSURE_SCHED(
resolver_->combiner()->Run(
GRPC_CLOSURE_INIT(&closure_arg->set_response_closure, SetResponseLocked,
closure_arg,
grpc_combiner_scheduler(resolver_->combiner())),
closure_arg, nullptr),
GRPC_ERROR_NONE);
has_result_ = false;
}

@ -302,8 +302,7 @@ class XdsClient::ChannelState::StateWatcher
parent_(std::move(parent)) {}
private:
void OnConnectivityStateChange(
grpc_connectivity_state new_state) override {
void OnConnectivityStateChange(grpc_connectivity_state new_state) override {
if (!parent_->shutting_down_ &&
new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
// In TRANSIENT_FAILURE. Notify all watchers of error.

Loading…
Cancel
Save