aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/client_config/lb_policies/round_robin.c
diff options
context:
space:
mode:
authorGravatar Craig Tiller <craig.tiller@gmail.com>2015-12-11 12:53:05 -0800
committerGravatar Craig Tiller <craig.tiller@gmail.com>2015-12-11 12:53:05 -0800
commit989f450a64bcbaeb974f5180439f77e0bfc0e744 (patch)
tree3a150c3a4b59bbee764dc7483ad5fa0db44abef1 /src/core/client_config/lb_policies/round_robin.c
parent4c33c55c9502861e0f0f22e25ada5402d7acf528 (diff)
parent5e61f2875c72569950f6841047ef29e61492f938 (diff)
Merge github.com:grpc/grpc into pipe-bomb
Diffstat (limited to 'src/core/client_config/lb_policies/round_robin.c')
-rw-r--r--src/core/client_config/lb_policies/round_robin.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/core/client_config/lb_policies/round_robin.c b/src/core/client_config/lb_policies/round_robin.c
index b86dba20ee..d487456363 100644
--- a/src/core/client_config/lb_policies/round_robin.c
+++ b/src/core/client_config/lb_policies/round_robin.c
@@ -467,8 +467,24 @@ static void rr_notify_on_state_change(grpc_exec_ctx *exec_ctx,
gpr_mu_unlock(&p->mu);
}
+static void rr_ping_one(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol,
+ grpc_closure *closure) {
+ round_robin_lb_policy *p = (round_robin_lb_policy *)pol;
+ ready_list *selected;
+ grpc_connected_subchannel *target;
+ gpr_mu_lock(&p->mu);
+ if ((selected = peek_next_connected_locked(p))) {
+ gpr_mu_unlock(&p->mu);
+ target = grpc_subchannel_get_connected_subchannel(selected->subchannel);
+ grpc_connected_subchannel_ping(exec_ctx, target, closure);
+ } else {
+ gpr_mu_unlock(&p->mu);
+ grpc_exec_ctx_enqueue(exec_ctx, closure, 0);
+ }
+}
+
static const grpc_lb_policy_vtable round_robin_lb_policy_vtable = {
- rr_destroy, rr_shutdown, rr_pick, rr_cancel_pick, rr_exit_idle,
+ rr_destroy, rr_shutdown, rr_pick, rr_cancel_pick, rr_ping_one, rr_exit_idle,
rr_check_connectivity, rr_notify_on_state_change};
static void round_robin_factory_ref(grpc_lb_policy_factory *factory) {}