Skip to content
16 changes: 16 additions & 0 deletions api/udpa/data/orca/v1/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
load("@envoy_api//bazel:api_build_system.bzl", "api_go_proto_library", "api_proto_library")

licenses(["notice"]) # Apache 2

api_proto_library(
name = "orca_load_report",
srcs = ["orca_load_report.proto"],
visibility = [
"//visibility:public",
],
)

api_go_proto_library(
name = "orca_load_report",
proto = ":orca_load_report",
)
31 changes: 31 additions & 0 deletions api/udpa/data/orca/v1/orca_load_report.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
syntax = "proto3";

package udpa.data.orca.v1;

option java_outer_classname = "OrcaLoadReportProto";
option java_multiple_files = true;
option java_package = "io.envoyproxy.udpa.data.orca.v1";
option go_package = "v1";

import "validate/validate.proto";

// See section `ORCA load report format` of the design document in
// :ref:`https://github.com/envoyproxy/envoy/issues/6614`.

message OrcaLoadReport {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a pointer and reference to the public design doc and relevant section?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK.

// CPU utilization expressed as a fraction of available CPU resources. This
// should be derived from a sample or measurement taken during the request.
double cpu_utilization = 1 [(validate.rules).double.gte = 0, (validate.rules).double.lte = 1];

// Memory utilization expressed as a fraction of available memory
// resources. This should be derived from a sample or measurement taken
// during the request.
double mem_utilization = 2 [(validate.rules).double.gte = 0, (validate.rules).double.lte = 1];

// Application specific requests costs. Each value may be an absolute cost (e.g.
// 3487 bytes of storage) or utilization associated with the request,
// expressed as a fraction of total resources available. Utilization
// metrics should be derived from a sample or measurement taken
// during the request.
map<string, double> request_cost_or_utilization = 3;
}
20 changes: 20 additions & 0 deletions api/udpa/service/orca/v1/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
load("@envoy_api//bazel:api_build_system.bzl", "api_go_grpc_library", "api_proto_library_internal")

licenses(["notice"]) # Apache 2

api_proto_library_internal(
name = "orca",
srcs = ["orca.proto"],
has_services = 1,
deps = [
"//udpa/data/orca/v1:orca_load_report",
],
)

api_go_grpc_library(
name = "orca",
proto = ":orca",
deps = [
"//udpa/data/orca/v1:orca_load_report_go_proto",
],
)
38 changes: 38 additions & 0 deletions api/udpa/service/orca/v1/orca.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
syntax = "proto3";

package udpa.service.orca.v1;

option java_outer_classname = "OrcaProto";
option java_multiple_files = true;
option java_package = "io.envoyproxy.udpa.service.orca.v1";
option go_package = "v1";

import "udpa/data/orca/v1/orca_load_report.proto";

import "google/protobuf/duration.proto";

import "validate/validate.proto";

// See section `Out-of-band (OOB) reporting` of the design document in
// :ref:`https://github.com/envoyproxy/envoy/issues/6614`.

// Out-of-band (OOB) load reporting service for the additional load reporting
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a pointer and reference to the public design doc and relevant section?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK.

// agent that does not sit in the request path. Reports are periodically sampled
// with sufficient frequency to provide temporal association with requests.
// OOB reporting compensates the limitation of in-band reporting in revealing
// costs for backends that do not provide a steady stream of telemetry such as
// long running stream operations and zero QPS services. This is a server
// streaming service, client needs to terminate current RPC and initiate
// a new call to change backend reporting frequency.
service OpenRcaService {
rpc StreamCoreMetrics(OrcaLoadReportRequest) returns (stream udpa.data.orca.v1.OrcaLoadReport);
}

message OrcaLoadReportRequest {
// Interval for generating Open RCA core metric responses.
google.protobuf.Duration report_interval = 1;
// Request costs to collect. If this is empty, all known requests costs tracked by
// the load reporting agent will be returned. This provides an opportunity for
// the client to selectively obtain a subset of tracked costs.
repeated string request_cost_names = 2;
}
3 changes: 3 additions & 0 deletions tools/spelling_dictionary.txt
Original file line number Diff line number Diff line change
Expand Up @@ -160,8 +160,10 @@ NUL
Nilsson
OCSP
OK
OOB
OOM
OOMs
ORCA
OS
OSI
OSS
Expand All @@ -181,6 +183,7 @@ POSTs
PREBIND
PRNG
PROT
QPS
QUIC
RAII
RANLUX
Expand Down