Class OrcaPerRequestUtil

java.lang.Object
io.grpc.xds.orca.OrcaPerRequestUtil

@ExperimentalApi("https://github.com/grpc/grpc-java/issues/9128") public abstract class OrcaPerRequestUtil extends Object
Utility class that provides method for LoadBalancer to install listeners to receive per-request backend cost metrics in the format of Open Request Cost Aggregation (ORCA).
  • Field Details

    • NOOP_CLIENT_STREAM_TRACER

      private static final io.grpc.ClientStreamTracer NOOP_CLIENT_STREAM_TRACER
    • NOOP_CLIENT_STREAM_TRACER_FACTORY

      private static final io.grpc.ClientStreamTracer.Factory NOOP_CLIENT_STREAM_TRACER_FACTORY
    • DEFAULT_INSTANCE

      private static final OrcaPerRequestUtil DEFAULT_INSTANCE
  • Constructor Details

    • OrcaPerRequestUtil

      public OrcaPerRequestUtil()
  • Method Details

    • getInstance

      public static OrcaPerRequestUtil getInstance()
      Gets an OrcaPerRequestUtil instance that provides actual implementation of newOrcaClientStreamTracerFactory(io.grpc.xds.orca.OrcaPerRequestUtil.OrcaPerRequestReportListener).
    • newOrcaClientStreamTracerFactory

      public abstract io.grpc.ClientStreamTracer.Factory newOrcaClientStreamTracerFactory(OrcaPerRequestUtil.OrcaPerRequestReportListener listener)
      Creates a new ClientStreamTracer.Factory with provided OrcaPerRequestUtil.OrcaPerRequestReportListener installed to receive callback when a per-request ORCA report is received.

      Example usages for leaf level policy (e.g., WRR policy)

         
         class WrrPicker extends SubchannelPicker {
      
           public PickResult pickSubchannel(PickSubchannelArgs args) {
             Subchannel subchannel = ...  // WRR picking logic
             return PickResult.withSubchannel(
                 subchannel,
                 OrcaPerRequestReportUtil.getInstance().newOrcaClientStreamTracerFactory(listener));
           }
         }
         
       
      Parameters:
      listener - contains the callback to be invoked when a per-request ORCA report is received.
    • newOrcaClientStreamTracerFactory

      public abstract io.grpc.ClientStreamTracer.Factory newOrcaClientStreamTracerFactory(io.grpc.ClientStreamTracer.Factory delegate, OrcaPerRequestUtil.OrcaPerRequestReportListener listener)
      Creates a new ClientStreamTracer.Factory with provided OrcaPerRequestUtil.OrcaPerRequestReportListener installed to receive callback when a per-request ORCA report is received.

      Example usages:

      • Delegating policy (e.g., xDS)
               
               class XdsPicker extends SubchannelPicker {
        
                 public PickResult pickSubchannel(PickSubchannelArgs args) {
                   SubchannelPicker perLocalityPicker = ...  // locality picking logic
                   Result result = perLocalityPicker.pickSubchannel(args);
                   return PickResult.withSubchannel(
                       result.getSubchannel(),
                       OrcaPerRequestReportUtil.getInstance().newOrcaClientTracerFactory(
                           result.getStreamTracerFactory(), listener));
        
                 }
               }
               
             
      • Delegating policy with additional tracing logic
               
               class WrappingPicker extends SubchannelPicker {
        
                 public PickResult pickSubchannel(PickSubchannelArgs args) {
                   Result result = delegate.pickSubchannel(args);
                   return PickResult.withSubchannel(
                       result.getSubchannel(),
                       new ClientStreamTracer.Factory() {
                         public ClientStreamTracer newClientStreamTracer(
                             StreamInfo info, Metadata metadata) {
                           ClientStreamTracer.Factory orcaTracerFactory =
                               OrcaPerRequestReportUtil.getInstance().newOrcaClientStreamTracerFactory(
                                   result.getStreamTracerFactory(), listener);
        
                           // Wrap the tracer from the delegate factory if you need to trace the
                           // stream for your own.
                           final ClientStreamTracer orcaTracer =
                               orcaTracerFactory.newClientStreamTracer(info, metadata);
        
                           return ForwardingClientStreamTracer() {
                             protected ClientStreamTracer delegate() {
                               return orcaTracer;
                             }
        
                             public void inboundMessage(int seqNo) {
                               // Handle this event.
                               ...
                             }
                           };
                         }
                       });
                 }
               }
               
             
      Parameters:
      delegate - the delegate factory to produce other client stream tracing.
      listener - contains the callback to be invoked when a per-request ORCA report is received.
    • fromOrcaLoadReport

      static io.grpc.services.MetricReport fromOrcaLoadReport(OrcaLoadReport loadReport)