Fixed ordering in adding pending picks to PF

pull/16054/head
David Garcia Quintas 7 years ago
parent da786c2dcf
commit d08ea3025b
  1. 4
      src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc
  2. 17
      test/cpp/end2end/client_lb_end2end_test.cc

@ -279,11 +279,11 @@ bool PickFirst::PickLocked(PickState* pick, grpc_error** error) {
"No pick result available but synchronous result required.");
return true;
}
pick->next = pending_picks_;
pending_picks_ = pick;
if (!started_picking_) {
StartPickingLocked();
}
pick->next = pending_picks_;
pending_picks_ = pick;
return false;
}

@ -353,6 +353,23 @@ TEST_F(ClientLbEnd2endTest, PickFirst) {
EXPECT_EQ("pick_first", channel->GetLoadBalancingPolicyName());
}
TEST_F(ClientLbEnd2endTest, PickFirstProcessPending) {
StartServers(1); // Single server
auto channel = BuildChannel(""); // test that pick first is the default.
auto stub = BuildStub(channel);
SetNextResolution({servers_[0]->port_});
WaitForServer(stub, 0, DEBUG_LOCATION);
// Create a new channel and its corresponding PF 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("");
auto second_stub = BuildStub(second_channel);
SetNextResolution({servers_[0]->port_});
CheckRpcSendOk(second_stub, DEBUG_LOCATION);
}
TEST_F(ClientLbEnd2endTest, PickFirstBackOffInitialReconnect) {
ChannelArguments args;
constexpr int kInitialBackOffMs = 100;

Loading…
Cancel
Save