Class ForwardingSubchannel

java.lang.Object
io.grpc.LoadBalancer.Subchannel
io.grpc.util.ForwardingSubchannel
Direct Known Subclasses:
HealthCheckingLoadBalancerFactory.SubchannelImpl, HealthProducerHelper.HealthProducerSubchannel, OutlierDetectionLoadBalancer.OutlierDetectionSubchannel

@ExperimentalApi("https://github.com/grpc/grpc-java/issues/1771") public abstract class ForwardingSubchannel extends LoadBalancer.Subchannel
  • Constructor Details

    • ForwardingSubchannel

      public ForwardingSubchannel()
  • Method Details

    • delegate

      protected abstract LoadBalancer.Subchannel delegate()
      Returns the underlying Subchannel.
    • start

      public void start(LoadBalancer.SubchannelStateListener listener)
      Description copied from class: LoadBalancer.Subchannel
      Starts the Subchannel. Can only be called once.

      Must be called prior to any other method on this class, except for LoadBalancer.Subchannel.shutdown() which may be called at any time.

      Must be called from the Synchronization Context, otherwise it may throw. See #5015 for more discussions.

      Overrides:
      start in class LoadBalancer.Subchannel
      Parameters:
      listener - receives state updates for this Subchannel.
    • shutdown

      public void shutdown()
      Description copied from class: LoadBalancer.Subchannel
      Shuts down the Subchannel. After this method is called, this Subchannel should no longer be returned by the latest picker, and can be safely discarded.

      Calling it on an already shut-down Subchannel has no effect.

      It should be called from the Synchronization Context. Currently will log a warning if violated. It will become an exception eventually. See #5015 for the background.

      Specified by:
      shutdown in class LoadBalancer.Subchannel
    • requestConnection

      public void requestConnection()
      Description copied from class: LoadBalancer.Subchannel
      Asks the Subchannel to create a connection (aka transport), if there isn't an active one.

      It should be called from the Synchronization Context. Currently will log a warning if violated. It will become an exception eventually. See #5015 for the background.

      Specified by:
      requestConnection in class LoadBalancer.Subchannel
    • getAllAddresses

      public List<EquivalentAddressGroup> getAllAddresses()
      Description copied from class: LoadBalancer.Subchannel
      Returns the addresses that this Subchannel is bound to. The returned list will not be empty.

      It should be called from the Synchronization Context. Currently will log a warning if violated. It will become an exception eventually. See #5015 for the background.

      Overrides:
      getAllAddresses in class LoadBalancer.Subchannel
    • getAttributes

      public Attributes getAttributes()
      Description copied from class: LoadBalancer.Subchannel
      The same attributes passed to Helper.createSubchannel(). LoadBalancer can use it to attach additional information here, e.g., the shard this Subchannel belongs to.
      Specified by:
      getAttributes in class LoadBalancer.Subchannel
    • asChannel

      public Channel asChannel()
      Description copied from class: LoadBalancer.Subchannel
      (Internal use only) returns a Channel that is backed by this Subchannel. This allows a LoadBalancer to issue its own RPCs for auxiliary purposes, such as health-checking, on already-established connections. This channel has certain restrictions:
      1. It can issue RPCs only if the Subchannel is READY. If Channel.newCall(MethodDescriptor, CallOptions) is called when the Subchannel is not READY, the RPC will fail immediately.
      2. It doesn't support wait-for-ready RPCs. Such RPCs will fail immediately.

      RPCs made on this Channel is not counted when determining ManagedChannel's idle mode. In other words, they won't prevent ManagedChannel from entering idle mode.

      Warning: RPCs made on this channel will prevent a shut-down transport from terminating. If you make long-running RPCs, you need to make sure they will finish in time after the Subchannel has transitioned away from READY state (notified through LoadBalancer.handleSubchannelState(LoadBalancer.Subchannel, ConnectivityStateInfo)).

      Warning: this is INTERNAL API, is not supposed to be used by external users, and may change without notice. If you think you must use it, please file an issue.

      Overrides:
      asChannel in class LoadBalancer.Subchannel
    • getChannelLogger

      public ChannelLogger getChannelLogger()
      Description copied from class: LoadBalancer.Subchannel
      Returns a ChannelLogger for this Subchannel.
      Overrides:
      getChannelLogger in class LoadBalancer.Subchannel
    • getInternalSubchannel

      public Object getInternalSubchannel()
      Description copied from class: LoadBalancer.Subchannel
      (Internal use only) returns an object that represents the underlying subchannel that is used by the Channel for sending RPCs when this LoadBalancer.Subchannel is picked. This is an opaque object that is both provided and consumed by the Channel. Its type is not Subchannel.

      Warning: this is INTERNAL API, is not supposed to be used by external users, and may change without notice. If you think you must use it, please file an issue and we can consider removing its "internal" status.

      Overrides:
      getInternalSubchannel in class LoadBalancer.Subchannel
    • updateAddresses

      public void updateAddresses(List<EquivalentAddressGroup> addrs)
      Description copied from class: LoadBalancer.Subchannel
      Replaces the existing addresses used with this Subchannel. If the new and old addresses overlap, the Subchannel can continue using an existing connection.

      It must be called from the Synchronization Context or will throw.

      Overrides:
      updateAddresses in class LoadBalancer.Subchannel
    • getConnectedAddressAttributes

      public Attributes getConnectedAddressAttributes()
      Description copied from class: LoadBalancer.Subchannel
      (Internal use only) returns attributes of the address subchannel is connected to.

      Warning: this is INTERNAL API, is not supposed to be used by external users, and may change without notice. If you think you must use it, please file an issue and we can consider removing its "internal" status.

      Overrides:
      getConnectedAddressAttributes in class LoadBalancer.Subchannel
    • toString

      public String toString()
      Overrides:
      toString in class Object