Skip to content

Commit

Permalink
example: fix orca example to use new ORCA API (#9403)
Browse files Browse the repository at this point in the history
  • Loading branch information
YifeiZhuang committed Jul 28, 2022
1 parent 014c022 commit 0c287af
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 23 deletions.
3 changes: 3 additions & 0 deletions buildscripts/kokoro/unix.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@
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;

/**
Expand Down Expand Up @@ -87,7 +87,7 @@ public LoadBalancer.Subchannel createSubchannel(LoadBalancer.CreateSubchannelArg
// 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);
}
Expand Down Expand Up @@ -129,7 +129,7 @@ public LoadBalancer.PickResult pickSubchannel(LoadBalancer.PickSubchannelArgs ar
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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,21 @@

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;
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;
Expand Down Expand Up @@ -108,29 +110,30 @@ class GreeterImpl extends GreeterGrpc.GreeterImplBase {
@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();
}
Expand Down
11 changes: 11 additions & 0 deletions services/src/main/java/io/grpc/services/MetricReport.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import static com.google.common.base.Preconditions.checkNotNull;

import com.google.common.base.MoreObjects;
import io.grpc.ExperimentalApi;
import java.util.Map;

Expand Down Expand Up @@ -56,4 +57,14 @@ public Map<String, Double> getRequestCostMetrics() {
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();
}
}

0 comments on commit 0c287af

Please sign in to comment.