WRR: update tests to cover qps plumbing (#32068)

pull/32078/head
Mark D. Roth 2 years ago committed by GitHub
parent e5a37d59fa
commit daded8a59f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      src/proto/grpc/testing/xds/v3/orca_load_report.proto
  2. 18
      test/cpp/end2end/client_lb_end2end_test.cc

@ -32,7 +32,7 @@ message OrcaLoadReport {
// Total RPS being served by an endpoint. This should cover all services that an endpoint is
// responsible for.
uint64 rps = 3;
uint64 rps = 3 [deprecated = true];
// Application specific requests costs. Each value is an absolute cost (e.g. 3487 bytes of
// storage) associated with the request.
@ -41,4 +41,6 @@ message OrcaLoadReport {
// Resource utilization values. Each value is expressed as a fraction of total resources
// available, derived from the latest sample or measurement.
map<string, double> utilization = 5;
double rps_fractional = 6;
}

@ -98,7 +98,8 @@ class MyTestServiceImpl : public TestServiceImpl {
auto* recorder = context->ExperimentalGetCallMetricRecorder();
EXPECT_NE(recorder, nullptr);
recorder->RecordCpuUtilizationMetric(load_report_.cpu_utilization())
.RecordMemoryUtilizationMetric(load_report_.mem_utilization());
.RecordMemoryUtilizationMetric(load_report_.mem_utilization())
.RecordQpsMetric(load_report_.rps_fractional());
for (const auto& p : load_report_.request_cost()) {
recorder->RecordRequestCostMetric(p.first, p.second);
}
@ -2271,6 +2272,7 @@ xds::data::orca::v3::OrcaLoadReport BackendMetricDataToOrcaLoadReport(
xds::data::orca::v3::OrcaLoadReport load_report;
load_report.set_cpu_utilization(backend_metric_data.cpu_utilization);
load_report.set_mem_utilization(backend_metric_data.mem_utilization);
load_report.set_rps_fractional(backend_metric_data.qps);
for (const auto& p : backend_metric_data.request_cost) {
std::string name(p.first);
(*load_report.mutable_request_cost())[name] = p.second;
@ -2501,6 +2503,7 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, BackendMetricData) {
xds::data::orca::v3::OrcaLoadReport load_report;
load_report.set_cpu_utilization(0.5);
load_report.set_mem_utilization(0.75);
load_report.set_rps_fractional(0.25);
auto* request_cost = load_report.mutable_request_cost();
(*request_cost)["foo"] = 0.8;
(*request_cost)["bar"] = 1.4;
@ -2520,6 +2523,7 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, BackendMetricData) {
// available in OSS.
EXPECT_EQ(actual->cpu_utilization(), load_report.cpu_utilization());
EXPECT_EQ(actual->mem_utilization(), load_report.mem_utilization());
EXPECT_EQ(actual->rps_fractional(), load_report.rps_fractional());
EXPECT_EQ(actual->request_cost().size(), load_report.request_cost().size());
for (const auto& p : actual->request_cost()) {
auto it = load_report.request_cost().find(p.first);
@ -2690,7 +2694,8 @@ TEST_F(OobBackendMetricTest, Basic) {
constexpr char kMetricName[] = "foo";
servers_[0]->orca_service_.SetCpuUtilization(0.1);
servers_[0]->orca_service_.SetMemoryUtilization(0.2);
servers_[0]->orca_service_.SetNamedUtilization(kMetricName, 0.3);
servers_[0]->orca_service_.SetQps(0.3);
servers_[0]->orca_service_.SetNamedUtilization(kMetricName, 0.4);
// Start client.
auto response_generator = BuildResolverResponseGenerator();
auto channel = BuildChannel("oob_backend_metric_test_lb", response_generator);
@ -2708,9 +2713,10 @@ TEST_F(OobBackendMetricTest, Basic) {
EXPECT_EQ(report->first, servers_[0]->port_);
EXPECT_EQ(report->second.cpu_utilization(), 0.1);
EXPECT_EQ(report->second.mem_utilization(), 0.2);
EXPECT_EQ(report->second.rps_fractional(), 0.3);
EXPECT_THAT(
report->second.utilization(),
::testing::UnorderedElementsAre(::testing::Pair(kMetricName, 0.3)));
::testing::UnorderedElementsAre(::testing::Pair(kMetricName, 0.4)));
break;
}
gpr_sleep_until(grpc_timeout_seconds_to_deadline(1));
@ -2719,7 +2725,8 @@ TEST_F(OobBackendMetricTest, Basic) {
// Note that the server may send a new report while we're updating these,
// so we set them in reverse order, so that we know we'll get all new
// data once we see a report with the new CPU utilization value.
servers_[0]->orca_service_.SetNamedUtilization(kMetricName, 0.6);
servers_[0]->orca_service_.SetNamedUtilization(kMetricName, 0.7);
servers_[0]->orca_service_.SetQps(0.6);
servers_[0]->orca_service_.SetMemoryUtilization(0.5);
servers_[0]->orca_service_.SetCpuUtilization(0.4);
// Wait for client to see new report.
@ -2730,9 +2737,10 @@ TEST_F(OobBackendMetricTest, Basic) {
if (report->second.cpu_utilization() != 0.1) {
EXPECT_EQ(report->second.cpu_utilization(), 0.4);
EXPECT_EQ(report->second.mem_utilization(), 0.5);
EXPECT_EQ(report->second.rps_fractional(), 0.6);
EXPECT_THAT(
report->second.utilization(),
::testing::UnorderedElementsAre(::testing::Pair(kMetricName, 0.6)));
::testing::UnorderedElementsAre(::testing::Pair(kMetricName, 0.7)));
break;
}
}

Loading…
Cancel
Save