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
popd
# TODO(zpencer): also build the GAE examples
pushd examples/example-orca
../gradlew build $GRADLE_FLAGS
popd
fi
LOCAL_MVN_TEMP=$(mktemp -d)

View File

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

View File

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

View File

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