example: fix orca example to use new ORCA API (#9403)

This commit is contained in:
yifeizhuang 2022-07-22 07:40:49 -07:00 committed by GitHub
parent 4850ad219e
commit 58cd6e1a7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 40 additions and 23 deletions

View File

@ -83,6 +83,9 @@ if [[ -z "${SKIP_TESTS:-}" ]]; then
../gradlew build $GRADLE_FLAGS ../gradlew build $GRADLE_FLAGS
popd popd
# TODO(zpencer): also build the GAE examples # TODO(zpencer): also build the GAE examples
pushd examples/example-orca
../gradlew build $GRADLE_FLAGS
popd
fi fi
LOCAL_MVN_TEMP=$(mktemp -d) LOCAL_MVN_TEMP=$(mktemp -d)

View File

@ -20,11 +20,11 @@ import io.grpc.ConnectivityState;
import io.grpc.LoadBalancer; import io.grpc.LoadBalancer;
import io.grpc.LoadBalancerProvider; import io.grpc.LoadBalancerProvider;
import io.grpc.LoadBalancerRegistry; import io.grpc.LoadBalancerRegistry;
import io.grpc.services.MetricReport;
import io.grpc.util.ForwardingLoadBalancer; import io.grpc.util.ForwardingLoadBalancer;
import io.grpc.util.ForwardingLoadBalancerHelper; import io.grpc.util.ForwardingLoadBalancerHelper;
import io.grpc.xds.orca.OrcaOobUtil; import io.grpc.xds.orca.OrcaOobUtil;
import io.grpc.xds.orca.OrcaPerRequestUtil; import io.grpc.xds.orca.OrcaPerRequestUtil;
import io.grpc.xds.shaded.com.github.xds.data.orca.v3.OrcaLoadReport;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
@ -87,7 +87,7 @@ final class CustomBackendMetricsLoadBalancerProvider extends LoadBalancerProvide
// otherwise it is treated as server minimum report interval. // otherwise it is treated as server minimum report interval.
OrcaOobUtil.setListener(subchannel, new OrcaOobUtil.OrcaOobReportListener() { OrcaOobUtil.setListener(subchannel, new OrcaOobUtil.OrcaOobReportListener() {
@Override @Override
public void onLoadReport(OrcaLoadReport orcaLoadReport) { public void onLoadReport(MetricReport orcaLoadReport) {
System.out.println("Example load balancer received OOB metrics report:\n" System.out.println("Example load balancer received OOB metrics report:\n"
+ orcaLoadReport); + orcaLoadReport);
} }
@ -129,7 +129,7 @@ final class CustomBackendMetricsLoadBalancerProvider extends LoadBalancerProvide
OrcaPerRequestUtil.getInstance().newOrcaClientStreamTracerFactory( OrcaPerRequestUtil.getInstance().newOrcaClientStreamTracerFactory(
new OrcaPerRequestUtil.OrcaPerRequestReportListener() { new OrcaPerRequestUtil.OrcaPerRequestReportListener() {
@Override @Override
public void onLoadReport(OrcaLoadReport orcaLoadReport) { public void onLoadReport(MetricReport orcaLoadReport) {
System.out.println("Example load balancer received per-rpc metrics report:\n" System.out.println("Example load balancer received per-rpc metrics report:\n"
+ orcaLoadReport); + orcaLoadReport);
} }

View File

@ -16,6 +16,7 @@
package io.grpc.examples.orca; package io.grpc.examples.orca;
import com.google.common.collect.ImmutableMap;
import io.grpc.BindableService; import io.grpc.BindableService;
import io.grpc.examples.helloworld.GreeterGrpc; import io.grpc.examples.helloworld.GreeterGrpc;
import io.grpc.examples.helloworld.HelloReply; import io.grpc.examples.helloworld.HelloReply;
@ -23,12 +24,13 @@ import io.grpc.examples.helloworld.HelloRequest;
import io.grpc.Server; import io.grpc.Server;
import io.grpc.ServerBuilder; import io.grpc.ServerBuilder;
import io.grpc.services.CallMetricRecorder; import io.grpc.services.CallMetricRecorder;
import io.grpc.services.InternalCallMetricRecorder;
import io.grpc.services.MetricRecorder; import io.grpc.services.MetricRecorder;
import io.grpc.stub.StreamObserver; import io.grpc.stub.StreamObserver;
import io.grpc.xds.orca.OrcaMetricReportingServerInterceptor; import io.grpc.xds.orca.OrcaMetricReportingServerInterceptor;
import io.grpc.xds.orca.OrcaServiceImpl; import io.grpc.xds.orca.OrcaServiceImpl;
import io.grpc.xds.shaded.com.github.xds.data.orca.v3.OrcaLoadReport;
import java.io.IOException; import java.io.IOException;
import java.util.Map;
import java.util.Random; import java.util.Random;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
@ -108,29 +110,30 @@ public class CustomBackendMetricsServer {
@Override @Override
public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) { public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) {
HelloReply reply = HelloReply.newBuilder().setMessage("Hello " + req.getName()).build(); HelloReply reply = HelloReply.newBuilder().setMessage("Hello " + req.getName()).build();
OrcaLoadReport randomPerRpcMetrics = OrcaLoadReport.newBuilder() double cpuUtilization = random.nextDouble();
.setCpuUtilization(random.nextDouble()) double memoryUtilization = random.nextDouble();
.setMemUtilization(random.nextDouble()) Map<String, Double> utilization = ImmutableMap.of("util", random.nextDouble());
.putUtilization("util", random.nextDouble()) Map<String, Double> requestCost = ImmutableMap.of("cost", random.nextDouble());
.putRequestCost("cost", random.nextDouble())
.build();
// Sets per-query backend metrics to a random test report. // Sets per-query backend metrics to a random test report.
CallMetricRecorder.getCurrent() CallMetricRecorder.getCurrent()
.recordMemoryUtilizationMetric(randomPerRpcMetrics.getMemUtilization()) .recordCpuUtilizationMetric(cpuUtilization)
.recordCallMetric("cost", randomPerRpcMetrics.getRequestCostOrDefault("cost", 0.0)) .recordMemoryUtilizationMetric(memoryUtilization)
.recordUtilizationMetric("util", randomPerRpcMetrics.getUtilizationOrDefault("util", 0.0)); .recordCallMetric("cost", requestCost.get("cost"))
System.out.println("Hello World Server updates RPC metrics data:\n" + randomPerRpcMetrics); .recordUtilizationMetric("util", utilization.get("util"));
System.out.println(String.format("Hello World Server updates RPC metrics data:\n" +
"cpu: %s, memory: %s, request cost: %s, utilization: %s\n",
cpuUtilization, memoryUtilization, requestCost, utilization));
OrcaLoadReport randomOobMetrics = OrcaLoadReport.newBuilder() cpuUtilization = random.nextDouble();
.setCpuUtilization(random.nextDouble()) memoryUtilization = random.nextDouble();
.setMemUtilization(random.nextDouble()) utilization = ImmutableMap.of("util", random.nextDouble());
.putUtilization("util", random.nextDouble())
.build();
// Sets OOB backend metrics to a random test report. // Sets OOB backend metrics to a random test report.
metricRecorder.setCpuUtilizationMetric(randomOobMetrics.getCpuUtilization()); metricRecorder.setCpuUtilizationMetric(cpuUtilization);
metricRecorder.setMemoryUtilizationMetric(randomOobMetrics.getMemUtilization()); metricRecorder.setMemoryUtilizationMetric(memoryUtilization);
metricRecorder.setAllUtilizationMetrics(randomOobMetrics.getUtilizationMap()); metricRecorder.setAllUtilizationMetrics(utilization);
System.out.println("Hello World Server updates OOB metrics data:\n" + randomOobMetrics); System.out.println(String.format("Hello World Server updates OOB metrics data:\n" +
"cpu: %s, memory: %s, utilization: %s\n",
cpuUtilization, memoryUtilization, utilization));
responseObserver.onNext(reply); responseObserver.onNext(reply);
responseObserver.onCompleted(); responseObserver.onCompleted();
} }

View File

@ -18,6 +18,7 @@ package io.grpc.services;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.base.MoreObjects;
import io.grpc.ExperimentalApi; import io.grpc.ExperimentalApi;
import java.util.Map; import java.util.Map;
@ -56,4 +57,14 @@ public final class MetricReport {
public Map<String, Double> getUtilizationMetrics() { public Map<String, Double> getUtilizationMetrics() {
return utilizationMetrics; return utilizationMetrics;
} }
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("cpuUtilization", cpuUtilization)
.add("memoryUtilization", memoryUtilization)
.add("requestCost", requestCostMetrics)
.add("utilization", utilizationMetrics)
.toString();
}
} }