[testing] Synchronize interop test protos. (#32631)

Fixes: issue #32628
pull/32640/head
Eugene Ostroukhov 2 years ago committed by GitHub
parent a9873e8357
commit a70fd8e5e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 28
      CMakeLists.txt
  2. 7
      build_autogenerated.yaml
  3. 8
      src/proto/grpc/testing/BUILD
  4. 25
      src/proto/grpc/testing/messages.proto
  5. 5
      src/proto/grpc/testing/xds/v3/BUILD
  6. 3
      test/cpp/interop/BUILD
  7. 8
      test/cpp/interop/backend_metrics_lb_policy.cc
  8. 9
      test/cpp/interop/backend_metrics_lb_policy.h
  9. 44
      test/cpp/interop/interop_client.cc
  10. 27
      test/cpp/interop/interop_server.cc

28
CMakeLists.txt generated

@ -13604,10 +13604,6 @@ add_executable(http2_client
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.grpc.pb.h
test/cpp/interop/http2_client.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
@ -14106,10 +14102,6 @@ add_executable(interop_client
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.grpc.pb.h
test/core/security/oauth2_utils.cc
test/cpp/interop/backend_metrics_lb_policy.cc
test/cpp/interop/client.cc
@ -14164,10 +14156,6 @@ add_executable(interop_server
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/test.grpc.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.grpc.pb.h
src/cpp/server/orca/orca_service.cc
test/cpp/interop/interop_server.cc
test/cpp/interop/interop_server_bootstrap.cc
@ -16872,10 +16860,6 @@ add_executable(qps_json_driver
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/worker_service.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/worker_service.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/worker_service.grpc.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.grpc.pb.h
test/cpp/qps/benchmark_config.cc
test/cpp/qps/client_async.cc
test/cpp/qps/client_callback.cc
@ -16951,10 +16935,6 @@ add_executable(qps_worker
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/worker_service.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/worker_service.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/worker_service.grpc.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.grpc.pb.h
test/cpp/qps/client_async.cc
test/cpp/qps/client_callback.cc
test/cpp/qps/client_sync.cc
@ -24310,10 +24290,6 @@ add_executable(xds_interop_client
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/csds.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/csds.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/csds.grpc.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.grpc.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/percent.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/percent.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/percent.pb.h
@ -24389,10 +24365,6 @@ add_executable(xds_interop_server
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/csds.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/csds.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/csds.grpc.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/orca_load_report.grpc.pb.h
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/percent.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/percent.grpc.pb.cc
${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/xds/v3/percent.pb.h

@ -8724,7 +8724,6 @@ targets:
- src/proto/grpc/testing/empty.proto
- src/proto/grpc/testing/messages.proto
- src/proto/grpc/testing/test.proto
- src/proto/grpc/testing/xds/v3/orca_load_report.proto
- test/cpp/interop/http2_client.cc
deps:
- grpc++_test_config
@ -8977,7 +8976,6 @@ targets:
- src/proto/grpc/testing/empty.proto
- src/proto/grpc/testing/messages.proto
- src/proto/grpc/testing/test.proto
- src/proto/grpc/testing/xds/v3/orca_load_report.proto
- test/core/security/oauth2_utils.cc
- test/cpp/interop/backend_metrics_lb_policy.cc
- test/cpp/interop/client.cc
@ -8996,7 +8994,6 @@ targets:
- src/proto/grpc/testing/empty.proto
- src/proto/grpc/testing/messages.proto
- src/proto/grpc/testing/test.proto
- src/proto/grpc/testing/xds/v3/orca_load_report.proto
- src/cpp/server/orca/orca_service.cc
- test/cpp/interop/interop_server.cc
- test/cpp/interop/interop_server_bootstrap.cc
@ -10166,7 +10163,6 @@ targets:
- src/proto/grpc/testing/report_qps_scenario_service.proto
- src/proto/grpc/testing/stats.proto
- src/proto/grpc/testing/worker_service.proto
- src/proto/grpc/testing/xds/v3/orca_load_report.proto
- test/cpp/qps/benchmark_config.cc
- test/cpp/qps/client_async.cc
- test/cpp/qps/client_callback.cc
@ -10204,7 +10200,6 @@ targets:
- src/proto/grpc/testing/payloads.proto
- src/proto/grpc/testing/stats.proto
- src/proto/grpc/testing/worker_service.proto
- src/proto/grpc/testing/xds/v3/orca_load_report.proto
- test/cpp/qps/client_async.cc
- test/cpp/qps/client_callback.cc
- test/cpp/qps/client_sync.cc
@ -13296,7 +13291,6 @@ targets:
- src/proto/grpc/testing/xds/v3/base.proto
- src/proto/grpc/testing/xds/v3/config_dump.proto
- src/proto/grpc/testing/xds/v3/csds.proto
- src/proto/grpc/testing/xds/v3/orca_load_report.proto
- src/proto/grpc/testing/xds/v3/percent.proto
- src/cpp/server/admin/admin_services.cc
- src/cpp/server/csds/csds.cc
@ -13322,7 +13316,6 @@ targets:
- src/proto/grpc/testing/xds/v3/base.proto
- src/proto/grpc/testing/xds/v3/config_dump.proto
- src/proto/grpc/testing/xds/v3/csds.proto
- src/proto/grpc/testing/xds/v3/orca_load_report.proto
- src/proto/grpc/testing/xds/v3/percent.proto
- src/cpp/server/admin/admin_services.cc
- src/cpp/server/csds/csds.cc

@ -93,17 +93,11 @@ grpc_proto_library(
name = "messages_proto",
srcs = ["messages.proto"],
has_services = False,
deps = [
"//src/proto/grpc/testing/xds/v3:orca_load_report_proto",
],
)
proto_library(
name = "messages_proto_descriptor",
srcs = ["messages.proto"],
deps = [
"//src/proto/grpc/testing/xds/v3:orca_load_report_proto_descriptor",
],
)
py_proto_library(
@ -194,7 +188,7 @@ genrule(
name = "messages_gen_proto_file",
srcs = ["messages.proto"],
outs = ["messages_gen.proto"],
cmd = "sed '/orca_/d' $< > $@",
cmd = "cp $< $@",
)
grpc_proto_library(

@ -17,10 +17,10 @@
syntax = "proto3";
import "src/proto/grpc/testing/xds/v3/orca_load_report.proto";
package grpc.testing;
option java_package = "io.grpc.testing.integration";
// TODO(dgq): Go back to using well-known types once
// https://github.com/grpc/grpc/issues/6980 has been fixed.
// import "google/protobuf/wrappers.proto";
@ -101,8 +101,11 @@ message SimpleRequest {
// Whether SimpleResponse should include grpclb_route_type.
bool fill_grpclb_route_type = 10;
// Orca report for this RPC
xds.data.orca.v3.OrcaLoadReport orca_per_rpc_report = 11;
// If set the server should record this metrics report data for the current RPC.
TestOrcaReport orca_per_query_report = 11;
// If set the server should update this metrics report data at the OOB server.
TestOrcaReport orca_oob_report = 12;
}
// Unary response, as configured by the request.
@ -178,8 +181,8 @@ message StreamingOutputCallRequest {
// Whether server should return a given status
EchoStatus response_status = 7;
// ORCA data to be returned out of band
xds.data.orca.v3.OrcaLoadReport orca_oob_report = 8;
// If set the server should update this metrics report data at the OOB server.
TestOrcaReport orca_oob_report = 8;
}
// Server-streaming response, as configured by the request and parameters.
@ -280,3 +283,13 @@ message ClientConfigureResponse {}
message MemorySize {
int64 rss = 1;
}
// Metrics data the server will update and send to the client. It mirrors orca load report
// https://github.com/cncf/xds/blob/eded343319d09f30032952beda9840bbd3dcf7ac/xds/data/orca/v3/orca_load_report.proto#L15,
// but avoids orca dependency. Used by both per-query and out-of-band reporting tests.
message TestOrcaReport {
double cpu_utilization = 1;
double memory_utilization = 2;
map<string, double> request_cost = 3;
map<string, double> utilization = 4;
}

@ -182,11 +182,6 @@ grpc_proto_library(
],
)
proto_library(
name = "orca_load_report_proto_descriptor",
srcs = ["orca_load_report.proto"],
)
grpc_proto_library(
name = "orca_service_proto",
srcs = [

@ -87,7 +87,6 @@ grpc_cc_library(
"//src/proto/grpc/testing:empty_proto",
"//src/proto/grpc/testing:messages_proto",
"//src/proto/grpc/testing:test_proto",
"//src/proto/grpc/testing/xds/v3:orca_load_report_proto",
"//test/cpp/util:test_config",
],
)
@ -444,6 +443,6 @@ grpc_cc_library(
deps = [
"//:grpc",
"//:grpc++",
"//src/proto/grpc/testing/xds/v3:orca_load_report_proto",
"//src/proto/grpc/testing:messages_proto",
],
)

@ -45,10 +45,9 @@ LoadReportTracker::LoadReportEntry BackendMetricDataToOrcaLoadReport(
if (backend_metric_data == nullptr) {
return absl::nullopt;
}
xds::data::orca::v3::OrcaLoadReport load_report;
TestOrcaReport 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);
load_report.set_memory_utilization(backend_metric_data->mem_utilization);
for (const auto& p : backend_metric_data->request_cost) {
std::string name(p.first);
(*load_report.mutable_request_cost())[name] = p.second;
@ -261,8 +260,7 @@ LoadReportTracker::GetNextLoadReport() {
}
LoadReportTracker::LoadReportEntry LoadReportTracker::WaitForOobLoadReport(
const std::function<bool(const xds::data::orca::v3::OrcaLoadReport&)>&
predicate,
const std::function<bool(const TestOrcaReport&)>& predicate,
absl::Duration poll_timeout, size_t max_attempts) {
absl::MutexLock lock(&load_reports_mu_);
// This condition will be called under lock

@ -24,14 +24,14 @@
#include <grpcpp/support/channel_arguments.h>
#include "src/core/lib/config/core_configuration.h"
#include "src/proto/grpc/testing/xds/v3/orca_load_report.pb.h"
#include "src/proto/grpc/testing/messages.pb.h"
namespace grpc {
namespace testing {
class LoadReportTracker {
public:
// A load report, or nullopt if the call had no load report.
using LoadReportEntry = absl::optional<xds::data::orca::v3::OrcaLoadReport>;
using LoadReportEntry = absl::optional<TestOrcaReport>;
ChannelArguments GetChannelArguments();
void ResetCollectedLoadReports();
@ -41,14 +41,13 @@ class LoadReportTracker {
// Returns the next per-RPC load report, or nullopt if the queue is empty.
absl::optional<LoadReportEntry> GetNextLoadReport();
LoadReportEntry WaitForOobLoadReport(
const std::function<bool(const xds::data::orca::v3::OrcaLoadReport&)>&
predicate,
const std::function<bool(const TestOrcaReport&)>& predicate,
absl::Duration poll_timeout, size_t max_attempts);
private:
std::deque<LoadReportEntry> per_rpc_load_reports_
ABSL_GUARDED_BY(load_reports_mu_);
std::deque<xds::data::orca::v3::OrcaLoadReport> oob_load_reports_
std::deque<TestOrcaReport> oob_load_reports_
ABSL_GUARDED_BY(load_reports_mu_);
absl::Mutex load_reports_mu_;
};

@ -132,16 +132,15 @@ absl::optional<std::string> MapsDiff(absl::string_view path,
return absl::nullopt;
}
absl::optional<std::string> OrcaLoadReportsDiff(
const xds::data::orca::v3::OrcaLoadReport& expected,
const xds::data::orca::v3::OrcaLoadReport& actual) {
absl::optional<std::string> OrcaLoadReportsDiff(const TestOrcaReport& expected,
const TestOrcaReport& actual) {
auto error = ValuesDiff("cpu_utilization", expected.cpu_utilization(),
actual.cpu_utilization());
if (error.has_value()) {
return error;
}
error = ValuesDiff("mem_utilization", expected.mem_utilization(),
actual.mem_utilization());
error = ValuesDiff("mem_utilization", expected.memory_utilization(),
actual.memory_utilization());
if (error.has_value()) {
return error;
}
@ -1019,9 +1018,9 @@ bool InteropClient::DoOrcaPerRpc() {
SimpleRequest request;
SimpleResponse response;
ClientContext context;
auto orca_report = request.mutable_orca_per_rpc_report();
auto orca_report = request.mutable_orca_per_query_report();
orca_report->set_cpu_utilization(0.8210);
orca_report->set_mem_utilization(0.5847);
orca_report->set_memory_utilization(0.5847);
orca_report->mutable_request_cost()->emplace("cost", 3456.32);
orca_report->mutable_utilization()->emplace("util", 0.30499);
auto status = serviceStub_.Get()->UnaryCall(&context, request, &response);
@ -1053,10 +1052,9 @@ bool InteropClient::DoOrcaOob() {
{
StreamingOutputCallRequest request;
request.add_response_parameters()->set_size(1);
xds::data::orca::v3::OrcaLoadReport* orca_report =
request.mutable_orca_oob_report();
TestOrcaReport* orca_report = request.mutable_orca_oob_report();
orca_report->set_cpu_utilization(0.8210);
orca_report->set_mem_utilization(0.5847);
orca_report->set_memory_utilization(0.5847);
orca_report->mutable_utilization()->emplace("util", 0.30499);
StreamingOutputCallResponse response;
if (!stream->Write(request)) {
@ -1067,22 +1065,26 @@ bool InteropClient::DoOrcaOob() {
gpr_log(GPR_ERROR, "DoOrcaOob(): stream->Read failed");
return TransientFailureOrAbort();
}
GPR_ASSERT(
load_report_tracker_
.WaitForOobLoadReport(
[orca_report](const auto& actual) {
return !OrcaLoadReportsDiff(*orca_report, actual).has_value();
},
absl::Seconds(5), 10)
.has_value());
GPR_ASSERT(load_report_tracker_
.WaitForOobLoadReport(
[orca_report](const auto& actual) {
auto value = OrcaLoadReportsDiff(*orca_report, actual);
if (value.has_value()) {
gpr_log(GPR_DEBUG, "Reports mismatch: %s",
value->c_str());
return false;
}
return true;
},
absl::Seconds(5), 10)
.has_value());
}
{
StreamingOutputCallRequest request;
request.add_response_parameters()->set_size(1);
xds::data::orca::v3::OrcaLoadReport* orca_report =
request.mutable_orca_oob_report();
TestOrcaReport* orca_report = request.mutable_orca_oob_report();
orca_report->set_cpu_utilization(0.29309);
orca_report->set_mem_utilization(0.2);
orca_report->set_memory_utilization(0.2);
orca_report->mutable_utilization()->emplace("util", 0.2039);
StreamingOutputCallResponse response;
if (!stream->Write(request)) {

@ -39,7 +39,6 @@
#include "src/proto/grpc/testing/empty.pb.h"
#include "src/proto/grpc/testing/messages.pb.h"
#include "src/proto/grpc/testing/test.grpc.pb.h"
#include "src/proto/grpc/testing/xds/v3/orca_load_report.pb.h"
#include "test/cpp/interop/server_helper.h"
#include "test/cpp/util/test_config.h"
@ -140,19 +139,16 @@ bool CheckExpectedCompression(const ServerContext& context,
return true;
}
void RecordCallMetrics(
ServerContext* context,
const xds::data::orca::v3::OrcaLoadReport& request_metrics) {
void RecordCallMetrics(ServerContext* context,
const grpc::testing::TestOrcaReport& request_metrics) {
auto recorder = context->ExperimentalGetCallMetricRecorder();
// Do not record when zero since it indicates no test per-call report.
if (request_metrics.cpu_utilization() > 0) {
recorder->RecordCpuUtilizationMetric(request_metrics.cpu_utilization());
}
if (request_metrics.mem_utilization() > 0) {
recorder->RecordMemoryUtilizationMetric(request_metrics.mem_utilization());
}
if (request_metrics.rps_fractional() > 0) {
recorder->RecordQpsMetric(request_metrics.rps_fractional());
if (request_metrics.memory_utilization() > 0) {
recorder->RecordMemoryUtilizationMetric(
request_metrics.memory_utilization());
}
for (const auto& p : request_metrics.request_cost()) {
char* key = static_cast<char*>(
@ -225,8 +221,8 @@ class TestServiceImpl : public TestService::Service {
static_cast<grpc::StatusCode>(request->response_status().code()),
request->response_status().message());
}
if (request->has_orca_per_rpc_report()) {
RecordCallMetrics(context, request->orca_per_rpc_report());
if (request->has_orca_per_query_report()) {
RecordCallMetrics(context, request->orca_per_query_report());
}
return Status::OK;
}
@ -361,18 +357,15 @@ class TestServiceImpl : public TestService::Service {
private:
void RecordServerMetrics(
const xds::data::orca::v3::OrcaLoadReport& request_metrics) {
const grpc::testing::TestOrcaReport& request_metrics) {
// Do not record when zero since it indicates no test per-call report.
if (request_metrics.cpu_utilization() > 0) {
server_metric_recorder_->SetCpuUtilization(
request_metrics.cpu_utilization());
}
if (request_metrics.mem_utilization() > 0) {
if (request_metrics.memory_utilization() > 0) {
server_metric_recorder_->SetMemoryUtilization(
request_metrics.mem_utilization());
}
if (request_metrics.rps_fractional() > 0) {
server_metric_recorder_->SetQps(request_metrics.rps_fractional());
request_metrics.memory_utilization());
}
absl::MutexLock lock(&retained_utilization_names_mu_);
std::map<grpc::string_ref, double> named_utilizations;

Loading…
Cancel
Save