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

@ -98,7 +98,8 @@ class MyTestServiceImpl : public TestServiceImpl {
auto* recorder = context->ExperimentalGetCallMetricRecorder(); auto* recorder = context->ExperimentalGetCallMetricRecorder();
EXPECT_NE(recorder, nullptr); EXPECT_NE(recorder, nullptr);
recorder->RecordCpuUtilizationMetric(load_report_.cpu_utilization()) 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()) { for (const auto& p : load_report_.request_cost()) {
recorder->RecordRequestCostMetric(p.first, p.second); recorder->RecordRequestCostMetric(p.first, p.second);
} }
@ -2271,6 +2272,7 @@ xds::data::orca::v3::OrcaLoadReport BackendMetricDataToOrcaLoadReport(
xds::data::orca::v3::OrcaLoadReport load_report; xds::data::orca::v3::OrcaLoadReport load_report;
load_report.set_cpu_utilization(backend_metric_data.cpu_utilization); load_report.set_cpu_utilization(backend_metric_data.cpu_utilization);
load_report.set_mem_utilization(backend_metric_data.mem_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) { for (const auto& p : backend_metric_data.request_cost) {
std::string name(p.first); std::string name(p.first);
(*load_report.mutable_request_cost())[name] = p.second; (*load_report.mutable_request_cost())[name] = p.second;
@ -2501,6 +2503,7 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, BackendMetricData) {
xds::data::orca::v3::OrcaLoadReport load_report; xds::data::orca::v3::OrcaLoadReport load_report;
load_report.set_cpu_utilization(0.5); load_report.set_cpu_utilization(0.5);
load_report.set_mem_utilization(0.75); load_report.set_mem_utilization(0.75);
load_report.set_rps_fractional(0.25);
auto* request_cost = load_report.mutable_request_cost(); auto* request_cost = load_report.mutable_request_cost();
(*request_cost)["foo"] = 0.8; (*request_cost)["foo"] = 0.8;
(*request_cost)["bar"] = 1.4; (*request_cost)["bar"] = 1.4;
@ -2520,6 +2523,7 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, BackendMetricData) {
// available in OSS. // available in OSS.
EXPECT_EQ(actual->cpu_utilization(), load_report.cpu_utilization()); EXPECT_EQ(actual->cpu_utilization(), load_report.cpu_utilization());
EXPECT_EQ(actual->mem_utilization(), load_report.mem_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()); EXPECT_EQ(actual->request_cost().size(), load_report.request_cost().size());
for (const auto& p : actual->request_cost()) { for (const auto& p : actual->request_cost()) {
auto it = load_report.request_cost().find(p.first); auto it = load_report.request_cost().find(p.first);
@ -2690,7 +2694,8 @@ TEST_F(OobBackendMetricTest, Basic) {
constexpr char kMetricName[] = "foo"; constexpr char kMetricName[] = "foo";
servers_[0]->orca_service_.SetCpuUtilization(0.1); servers_[0]->orca_service_.SetCpuUtilization(0.1);
servers_[0]->orca_service_.SetMemoryUtilization(0.2); 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. // Start client.
auto response_generator = BuildResolverResponseGenerator(); auto response_generator = BuildResolverResponseGenerator();
auto channel = BuildChannel("oob_backend_metric_test_lb", response_generator); 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->first, servers_[0]->port_);
EXPECT_EQ(report->second.cpu_utilization(), 0.1); EXPECT_EQ(report->second.cpu_utilization(), 0.1);
EXPECT_EQ(report->second.mem_utilization(), 0.2); EXPECT_EQ(report->second.mem_utilization(), 0.2);
EXPECT_EQ(report->second.rps_fractional(), 0.3);
EXPECT_THAT( EXPECT_THAT(
report->second.utilization(), report->second.utilization(),
::testing::UnorderedElementsAre(::testing::Pair(kMetricName, 0.3))); ::testing::UnorderedElementsAre(::testing::Pair(kMetricName, 0.4)));
break; break;
} }
gpr_sleep_until(grpc_timeout_seconds_to_deadline(1)); 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, // 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 // 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. // 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_.SetMemoryUtilization(0.5);
servers_[0]->orca_service_.SetCpuUtilization(0.4); servers_[0]->orca_service_.SetCpuUtilization(0.4);
// Wait for client to see new report. // Wait for client to see new report.
@ -2730,9 +2737,10 @@ TEST_F(OobBackendMetricTest, Basic) {
if (report->second.cpu_utilization() != 0.1) { if (report->second.cpu_utilization() != 0.1) {
EXPECT_EQ(report->second.cpu_utilization(), 0.4); EXPECT_EQ(report->second.cpu_utilization(), 0.4);
EXPECT_EQ(report->second.mem_utilization(), 0.5); EXPECT_EQ(report->second.mem_utilization(), 0.5);
EXPECT_EQ(report->second.rps_fractional(), 0.6);
EXPECT_THAT( EXPECT_THAT(
report->second.utilization(), report->second.utilization(),
::testing::UnorderedElementsAre(::testing::Pair(kMetricName, 0.6))); ::testing::UnorderedElementsAre(::testing::Pair(kMetricName, 0.7)));
break; break;
} }
} }

Loading…
Cancel
Save