Merge pull request #15947 from dgquintas/rr_ppicks_fix

Fixed ordering in adding pending picks to RR
pull/15991/head
David G. Quintas 6 years ago committed by GitHub
commit ea75af5e97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc
  2. 17
      test/cpp/end2end/client_lb_end2end_test.cc

@ -354,11 +354,11 @@ bool RoundRobin::PickLocked(PickState* pick) {
if (DoPickLocked(pick)) return true;
}
/* no pick currently available. Save for later in list of pending picks */
pick->next = pending_picks_;
pending_picks_ = pick;
if (!started_picking_) {
StartPickingLocked();
}
pick->next = pending_picks_;
pending_picks_ = pick;
return false;
}

@ -539,6 +539,23 @@ TEST_F(ClientLbEnd2endTest, RoundRobin) {
EXPECT_EQ("round_robin", channel->GetLoadBalancingPolicyName());
}
TEST_F(ClientLbEnd2endTest, RoundRobinProcessPending) {
StartServers(1); // Single server
auto channel = BuildChannel("round_robin");
auto stub = BuildStub(channel);
SetNextResolution({servers_[0]->port_});
WaitForServer(stub, 0, DEBUG_LOCATION);
// Create a new channel and its corresponding RR LB policy, which will pick
// the subchannels in READY state from the previous RPC against the same
// target (even if it happened over a different channel, because subchannels
// are globally reused). Progress should happen without any transition from
// this READY state.
auto second_channel = BuildChannel("round_robin");
auto second_stub = BuildStub(second_channel);
SetNextResolution({servers_[0]->port_});
CheckRpcSendOk(second_stub, DEBUG_LOCATION);
}
TEST_F(ClientLbEnd2endTest, RoundRobinUpdates) {
// Start servers and send one RPC per server.
const int kNumServers = 3;

Loading…
Cancel
Save