|
|
|
@ -279,9 +279,14 @@ class ClientLbEnd2endTest : public ::testing::Test { |
|
|
|
|
|
|
|
|
|
void WaitForServer( |
|
|
|
|
const std::unique_ptr<grpc::testing::EchoTestService::Stub>& stub, |
|
|
|
|
size_t server_idx, const grpc_core::DebugLocation& location) { |
|
|
|
|
size_t server_idx, const grpc_core::DebugLocation& location, |
|
|
|
|
bool ignore_failure = false) { |
|
|
|
|
do { |
|
|
|
|
CheckRpcSendOk(stub, location); |
|
|
|
|
if (ignore_failure) { |
|
|
|
|
SendRpc(stub); |
|
|
|
|
} else { |
|
|
|
|
CheckRpcSendOk(stub, location); |
|
|
|
|
} |
|
|
|
|
} while (servers_[server_idx]->service_.request_count() == 0); |
|
|
|
|
ResetCounters(); |
|
|
|
|
} |
|
|
|
@ -507,6 +512,37 @@ TEST_F(ClientLbEnd2endTest, PickFirstManyUpdates) { |
|
|
|
|
EXPECT_EQ("pick_first", channel->GetLoadBalancingPolicyName()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_F(ClientLbEnd2endTest, PickFirstReresolutionNoSelected) { |
|
|
|
|
// Prepare the ports for up servers and down servers.
|
|
|
|
|
const int kNumServers = 3; |
|
|
|
|
const int kNumAliveServers = 1; |
|
|
|
|
StartServers(kNumAliveServers); |
|
|
|
|
std::vector<int> alive_ports, dead_ports; |
|
|
|
|
for (size_t i = 0; i < kNumServers; ++i) { |
|
|
|
|
if (i < kNumAliveServers) { |
|
|
|
|
alive_ports.emplace_back(servers_[i]->port_); |
|
|
|
|
} else { |
|
|
|
|
dead_ports.emplace_back(grpc_pick_unused_port_or_die()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
auto channel = BuildChannel("pick_first"); |
|
|
|
|
auto stub = BuildStub(channel); |
|
|
|
|
// The initial resolution only contains dead ports. There won't be any
|
|
|
|
|
// selected subchannel. Re-resolution will return the same result.
|
|
|
|
|
SetNextResolution(dead_ports); |
|
|
|
|
gpr_log(GPR_INFO, "****** INITIAL RESOLUTION SET *******"); |
|
|
|
|
for (size_t i = 0; i < 10; ++i) CheckRpcSendFailure(stub); |
|
|
|
|
// Set a re-resolution result that contains reachable ports, so that the
|
|
|
|
|
// pick_first LB policy can recover soon.
|
|
|
|
|
SetNextResolutionUponError(alive_ports); |
|
|
|
|
gpr_log(GPR_INFO, "****** RE-RESOLUTION SET *******"); |
|
|
|
|
WaitForServer(stub, 0, DEBUG_LOCATION, true /* ignore_failure */); |
|
|
|
|
CheckRpcSendOk(stub, DEBUG_LOCATION); |
|
|
|
|
EXPECT_EQ(servers_[0]->service_.request_count(), 1); |
|
|
|
|
// Check LB policy name for the channel.
|
|
|
|
|
EXPECT_EQ("pick_first", channel->GetLoadBalancingPolicyName()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_F(ClientLbEnd2endTest, RoundRobin) { |
|
|
|
|
// Start servers and send one RPC per server.
|
|
|
|
|
const int kNumServers = 3; |
|
|
|
|