mirror of https://github.com/grpc/grpc-java.git
example: fix orca example to use new ORCA API (#9403)
This commit is contained in:
parent
4850ad219e
commit
58cd6e1a7f
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue