Skip to content
Snippets Groups Projects
Commit cebc1d73 authored by David Garcia Quintas's avatar David Garcia Quintas
Browse files

Deal with errors refs

parent bc6bc090
No related branches found
No related tags found
No related merge requests found
...@@ -415,33 +415,35 @@ static grpc_connectivity_state update_lb_connectivity_status_locked( ...@@ -415,33 +415,35 @@ static grpc_connectivity_state update_lb_connectivity_status_locked(
* CHECK: p->num_idle == p->num_subchannels. * CHECK: p->num_idle == p->num_subchannels.
*/ */
round_robin_lb_policy *p = sd->policy; round_robin_lb_policy *p = sd->policy;
grpc_connectivity_state new_state = sd->curr_connectivity_state;
if (p->num_ready > 0) { /* 1) READY */ if (p->num_ready > 0) { /* 1) READY */
grpc_connectivity_state_set(exec_ctx, &p->state_tracker, GRPC_CHANNEL_READY, grpc_connectivity_state_set(exec_ctx, &p->state_tracker, GRPC_CHANNEL_READY,
GRPC_ERROR_NONE, "rr_ready"); GRPC_ERROR_NONE, "rr_ready");
return GRPC_CHANNEL_READY; new_state = GRPC_CHANNEL_READY;
} else if (sd->curr_connectivity_state == } else if (sd->curr_connectivity_state ==
GRPC_CHANNEL_CONNECTING) { /* 2) CONNECTING */ GRPC_CHANNEL_CONNECTING) { /* 2) CONNECTING */
grpc_connectivity_state_set(exec_ctx, &p->state_tracker, grpc_connectivity_state_set(exec_ctx, &p->state_tracker,
GRPC_CHANNEL_CONNECTING, GRPC_ERROR_NONE, GRPC_CHANNEL_CONNECTING, GRPC_ERROR_NONE,
"rr_connecting"); "rr_connecting");
return GRPC_CHANNEL_CONNECTING; new_state = GRPC_CHANNEL_CONNECTING;
} else if (p->num_shutdown == p->num_subchannels) { /* 3) SHUTDOWN */ } else if (p->num_shutdown == p->num_subchannels) { /* 3) SHUTDOWN */
grpc_connectivity_state_set(exec_ctx, &p->state_tracker, grpc_connectivity_state_set(exec_ctx, &p->state_tracker,
GRPC_CHANNEL_SHUTDOWN, error, "rr_shutdown"); GRPC_CHANNEL_SHUTDOWN, GRPC_ERROR_REF(error),
return GRPC_CHANNEL_SHUTDOWN; "rr_shutdown");
new_state = GRPC_CHANNEL_SHUTDOWN;
} else if (p->num_transient_failures == } else if (p->num_transient_failures ==
p->num_subchannels) { /* 4) TRANSIENT_FAILURE */ p->num_subchannels) { /* 4) TRANSIENT_FAILURE */
grpc_connectivity_state_set(exec_ctx, &p->state_tracker, grpc_connectivity_state_set(exec_ctx, &p->state_tracker,
GRPC_CHANNEL_TRANSIENT_FAILURE, error, GRPC_CHANNEL_TRANSIENT_FAILURE,
"rr_transient_failure"); GRPC_ERROR_REF(error), "rr_transient_failure");
return GRPC_CHANNEL_TRANSIENT_FAILURE; new_state = GRPC_CHANNEL_TRANSIENT_FAILURE;
} else if (p->num_idle == p->num_subchannels) { /* 5) IDLE */ } else if (p->num_idle == p->num_subchannels) { /* 5) IDLE */
grpc_connectivity_state_set(exec_ctx, &p->state_tracker, GRPC_CHANNEL_IDLE, grpc_connectivity_state_set(exec_ctx, &p->state_tracker, GRPC_CHANNEL_IDLE,
GRPC_ERROR_NONE, "rr_idle"); GRPC_ERROR_NONE, "rr_idle");
return GRPC_CHANNEL_IDLE; new_state = GRPC_CHANNEL_IDLE;
} }
/* no change */ GRPC_ERROR_UNREF(error);
return sd->curr_connectivity_state; return new_state;
} }
static void rr_connectivity_changed_locked(grpc_exec_ctx *exec_ctx, void *arg, static void rr_connectivity_changed_locked(grpc_exec_ctx *exec_ctx, void *arg,
...@@ -557,8 +559,9 @@ static void rr_ping_one_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, ...@@ -557,8 +559,9 @@ static void rr_ping_one_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol,
grpc_connected_subchannel_ping(exec_ctx, target, closure); grpc_connected_subchannel_ping(exec_ctx, target, closure);
GRPC_CONNECTED_SUBCHANNEL_UNREF(exec_ctx, target, "rr_picked"); GRPC_CONNECTED_SUBCHANNEL_UNREF(exec_ctx, target, "rr_picked");
} else { } else {
grpc_closure_sched(exec_ctx, closure, GRPC_ERROR_CREATE_FROM_STATIC_STRING( grpc_closure_sched(
"Round Robin not connected")); exec_ctx, closure,
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Round Robin not connected"));
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment