diff --git a/CMakeLists.txt b/CMakeLists.txt index ce02102405f..8e54265a453 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml index e72b079526d..517600ae358 100644 --- a/build_autogenerated.yaml +++ b/build_autogenerated.yaml @@ -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 diff --git a/src/proto/grpc/testing/BUILD b/src/proto/grpc/testing/BUILD index 980989298cb..0f7bbbecf63 100644 --- a/src/proto/grpc/testing/BUILD +++ b/src/proto/grpc/testing/BUILD @@ -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( diff --git a/src/proto/grpc/testing/messages.proto b/src/proto/grpc/testing/messages.proto index 921e8bf0d41..33d07f47fdd 100644 --- a/src/proto/grpc/testing/messages.proto +++ b/src/proto/grpc/testing/messages.proto @@ -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 request_cost = 3; + map utilization = 4; +} diff --git a/src/proto/grpc/testing/xds/v3/BUILD b/src/proto/grpc/testing/xds/v3/BUILD index 17c71390835..9ac92f32df9 100644 --- a/src/proto/grpc/testing/xds/v3/BUILD +++ b/src/proto/grpc/testing/xds/v3/BUILD @@ -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 = [ diff --git a/test/cpp/interop/BUILD b/test/cpp/interop/BUILD index 6178cdab986..50008ec5f0b 100644 --- a/test/cpp/interop/BUILD +++ b/test/cpp/interop/BUILD @@ -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", ], ) diff --git a/test/cpp/interop/backend_metrics_lb_policy.cc b/test/cpp/interop/backend_metrics_lb_policy.cc index 5a3eb1dbbab..a1a05a19dc1 100644 --- a/test/cpp/interop/backend_metrics_lb_policy.cc +++ b/test/cpp/interop/backend_metrics_lb_policy.cc @@ -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& - predicate, + const std::function& predicate, absl::Duration poll_timeout, size_t max_attempts) { absl::MutexLock lock(&load_reports_mu_); // This condition will be called under lock diff --git a/test/cpp/interop/backend_metrics_lb_policy.h b/test/cpp/interop/backend_metrics_lb_policy.h index cf0f1618b67..9284c90b2c5 100644 --- a/test/cpp/interop/backend_metrics_lb_policy.h +++ b/test/cpp/interop/backend_metrics_lb_policy.h @@ -24,14 +24,14 @@ #include #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; + using LoadReportEntry = absl::optional; 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 GetNextLoadReport(); LoadReportEntry WaitForOobLoadReport( - const std::function& - predicate, + const std::function& predicate, absl::Duration poll_timeout, size_t max_attempts); private: std::deque per_rpc_load_reports_ ABSL_GUARDED_BY(load_reports_mu_); - std::deque oob_load_reports_ + std::deque oob_load_reports_ ABSL_GUARDED_BY(load_reports_mu_); absl::Mutex load_reports_mu_; }; diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc index a720e77e03a..702cb9e94ec 100644 --- a/test/cpp/interop/interop_client.cc +++ b/test/cpp/interop/interop_client.cc @@ -132,16 +132,15 @@ absl::optional MapsDiff(absl::string_view path, return absl::nullopt; } -absl::optional OrcaLoadReportsDiff( - const xds::data::orca::v3::OrcaLoadReport& expected, - const xds::data::orca::v3::OrcaLoadReport& actual) { +absl::optional 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)) { diff --git a/test/cpp/interop/interop_server.cc b/test/cpp/interop/interop_server.cc index af4e51d8f9d..c17693798bc 100644 --- a/test/cpp/interop/interop_server.cc +++ b/test/cpp/interop/interop_server.cc @@ -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( @@ -225,8 +221,8 @@ class TestServiceImpl : public TestService::Service { static_cast(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 named_utilizations;