Class InProcessTransport

java.lang.Object
io.grpc.inprocess.InProcessTransport
All Implemented Interfaces:
ClientTransport, ConnectionClientTransport, ManagedClientTransport, ServerTransport, InternalInstrumented<InternalChannelz.SocketStats>, InternalWithLogId

@ThreadSafe final class InProcessTransport extends Object implements ServerTransport, ConnectionClientTransport
  • Field Details

  • Constructor Details

    • InProcessTransport

      public InProcessTransport(SocketAddress address, int maxInboundMetadataSize, String authority, String userAgent, Attributes eagAttrs, boolean includeCauseWithStatus, long assumedMessageSize)
  • Method Details

    • start

      Description copied from interface: ManagedClientTransport
      Starts transport. This method may only be called once.

      This method and the returned Runnable should not throw any exceptions.

      Specified by:
      start in interface ManagedClientTransport
      Parameters:
      listener - non-null listener of transport events
      Returns:
      a Runnable that is executed after-the-fact by the original caller, typically after locks are released
    • newStream

      public ClientStream newStream(MethodDescriptor<?,?> method, Metadata headers, CallOptions callOptions, ClientStreamTracer[] tracers)
      Description copied from interface: ClientTransport
      Creates a new stream for sending messages to a remote end-point.

      This method returns immediately and does not wait for any validation of the request. If creation fails for any reason, ClientStreamListener.closed(io.grpc.Status, io.grpc.internal.ClientStreamListener.RpcProgress, io.grpc.Metadata) will be called to provide the error information. Any sent messages for this stream will be buffered until creation has completed (either successfully or unsuccessfully).

      This method is called under the Context of the ClientCall.

      Specified by:
      newStream in interface ClientTransport
      Parameters:
      method - the descriptor of the remote method to be called for this stream.
      headers - to send at the beginning of the call
      callOptions - runtime options of the call
      tracers - a non-empty array of tracers. The last element in it is reserved to be set by the load balancer's pick result and otherwise is a no-op tracer.
      Returns:
      the newly created stream.
    • failedClientStream

      private ClientStream failedClientStream(StatsTraceContext statsTraceCtx, Status status)
    • ping

      public void ping(ClientTransport.PingCallback callback, Executor executor)
      Description copied from interface: ClientTransport
      Pings a remote endpoint. When an acknowledgement is received, the given callback will be invoked using the given executor.

      Pings are not necessarily sent to the same endpoint, thus a successful ping only means at least one endpoint responded, but doesn't imply the availability of other endpoints (if there is any).

      This is an optional method. Transports that do not have any mechanism by which to ping the remote endpoint may throw UnsupportedOperationException.

      Specified by:
      ping in interface ClientTransport
    • shutdown

      public void shutdown(Status reason)
      Description copied from interface: ManagedClientTransport
      Initiates an orderly shutdown of the transport. Existing streams continue, but the transport will not own any new streams. New streams will either fail (once ManagedClientTransport.Listener.transportShutdown(io.grpc.Status) callback called), or be transferred off this transport (in which case they may succeed). This method may only be called once.
      Specified by:
      shutdown in interface ManagedClientTransport
    • shutdown

      public void shutdown()
      Description copied from interface: ServerTransport
      Initiates an orderly shutdown of the transport. Existing streams continue, but new streams will eventually begin failing. New streams "eventually" begin failing because shutdown may need to be processed on a separate thread. May only be called once.
      Specified by:
      shutdown in interface ServerTransport
    • shutdownNow

      public void shutdownNow(Status reason)
      Description copied from interface: ServerTransport
      Initiates a forceful shutdown in which preexisting and new calls are closed. Existing calls should be closed with the provided reason.
      Specified by:
      shutdownNow in interface ManagedClientTransport
      Specified by:
      shutdownNow in interface ServerTransport
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getLogId

      public InternalLogId getLogId()
      Description copied from interface: InternalWithLogId
      Returns an ID that is primarily used in debug logs. It usually contains the class name and a numeric ID that is unique among the instances.

      The subclasses of this interface usually want to include the log ID in their Object.toString() results.

      Specified by:
      getLogId in interface InternalWithLogId
    • getAttributes

      public Attributes getAttributes()
      Description copied from interface: ConnectionClientTransport
      Returns a set of attributes, which may vary depending on the state of the transport. The keys should define in what states they will be present.
      Specified by:
      getAttributes in interface ConnectionClientTransport
    • getScheduledExecutorService

      public ScheduledExecutorService getScheduledExecutorService()
      Description copied from interface: ServerTransport
      Returns an executor for scheduling provided by the transport. The service should be configured to allow cancelled scheduled runnables to be GCed.

      The executor may not be used after the transport terminates. The caller should ensure any outstanding tasks are cancelled when the transport terminates.

      Specified by:
      getScheduledExecutorService in interface ServerTransport
    • getStats

      public com.google.common.util.concurrent.ListenableFuture<InternalChannelz.SocketStats> getStats()
      Description copied from interface: InternalInstrumented
      Returns the stats object.
      Specified by:
      getStats in interface InternalInstrumented<InternalChannelz.SocketStats>
    • notifyShutdown

      private void notifyShutdown(Status s)
    • notifyTerminated

      private void notifyTerminated()
    • metadataSize

      private static int metadataSize(Metadata metadata)
    • cleanStatus

      private static Status cleanStatus(Status status, boolean includeCauseWithStatus)
      Returns a new status with the same code and description. If includeCauseWithStatus is true, cause is also included.

      For InProcess transport to behave in the same way as the other transports, when exchanging statuses between client and server and vice versa, the cause should be excluded from the status. For easier debugging, the status may be optionally included.