diff options
author | Craig Tiller <ctiller@google.com> | 2016-03-31 17:05:28 -0700 |
---|---|---|
committer | Craig Tiller <ctiller@google.com> | 2016-03-31 17:05:28 -0700 |
commit | 131b6deb5cddcc6c8ae5f9684418eee29bb43664 (patch) | |
tree | 9e3ca72bb95b3984f5a3fbf563b32b1dbde38d67 /src | |
parent | a95f1b56ff5be69a3e5742d6a3f5e480cb46e275 (diff) |
Refine model used to enter transient failure for pick_first
Diffstat (limited to 'src')
-rw-r--r-- | src/core/ext/lb_policy/pick_first/pick_first.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/core/ext/lb_policy/pick_first/pick_first.c b/src/core/ext/lb_policy/pick_first/pick_first.c index 8c556f4ab2..53c14f8f0a 100644 --- a/src/core/ext/lb_policy/pick_first/pick_first.c +++ b/src/core/ext/lb_policy/pick_first/pick_first.c @@ -315,11 +315,14 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg, &p->checking_connectivity, &p->connectivity_changed); break; case GRPC_CHANNEL_TRANSIENT_FAILURE: - grpc_connectivity_state_set(exec_ctx, &p->state_tracker, - GRPC_CHANNEL_TRANSIENT_FAILURE, - "connecting_transient_failure"); p->checking_subchannel = (p->checking_subchannel + 1) % p->num_subchannels; + if (p->checking_subchannel == 0) { + /* only trigger transient failure when we've tried all alternatives */ + grpc_connectivity_state_set(exec_ctx, &p->state_tracker, + GRPC_CHANNEL_TRANSIENT_FAILURE, + "connecting_transient_failure"); + } p->checking_connectivity = grpc_subchannel_check_connectivity( p->subchannels[p->checking_subchannel]); if (p->checking_connectivity == GRPC_CHANNEL_TRANSIENT_FAILURE) { |