Class ForwardingLoadBalancer
- java.lang.Object
-
- io.grpc.LoadBalancer
-
- io.grpc.util.ForwardingLoadBalancer
-
- Direct Known Subclasses:
GracefulSwitchLoadBalancer
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/1771") public abstract class ForwardingLoadBalancer extends LoadBalancer
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class io.grpc.LoadBalancer
LoadBalancer.CreateSubchannelArgs, LoadBalancer.ErrorPicker, LoadBalancer.Factory, LoadBalancer.FixedResultPicker, LoadBalancer.Helper, LoadBalancer.PickDetailsConsumer, LoadBalancer.PickResult, LoadBalancer.PickSubchannelArgs, LoadBalancer.ResolvedAddresses, LoadBalancer.Subchannel, LoadBalancer.SubchannelPicker, LoadBalancer.SubchannelStateListener
-
-
Field Summary
-
Fields inherited from class io.grpc.LoadBalancer
ATTR_HEALTH_CHECKING_CONFIG, DISABLE_SUBCHANNEL_RECONNECT_KEY, EMPTY_PICKER, HAS_HEALTH_PRODUCER_LISTENER_KEY, HEALTH_CONSUMER_LISTENER_ARG_KEY, IS_PETIOLE_POLICY
-
-
Constructor Summary
Constructors Constructor Description ForwardingLoadBalancer()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description boolean
canHandleEmptyAddressListFromNameResolution()
Whether this LoadBalancer can handle empty address group list to be passed toLoadBalancer.handleResolvedAddresses(ResolvedAddresses)
.protected abstract LoadBalancer
delegate()
Returns the underlying balancer.void
handleNameResolutionError(Status error)
Handles an error from the name resolution system.void
handleResolvedAddresses(LoadBalancer.ResolvedAddresses resolvedAddresses)
Handles newly resolved server groups and metadata attributes from name resolution system.void
handleSubchannelState(LoadBalancer.Subchannel subchannel, ConnectivityStateInfo stateInfo)
Deprecated.void
requestConnection()
The channel asks the LoadBalancer to establish connections now (if applicable) so that the upcoming RPC may then just pick a ready connection without waiting for connections.void
shutdown()
The channel asks the load-balancer to shutdown.String
toString()
-
Methods inherited from class io.grpc.LoadBalancer
acceptResolvedAddresses
-
-
-
-
Method Detail
-
delegate
protected abstract LoadBalancer delegate()
Returns the underlying balancer.
-
handleResolvedAddresses
public void handleResolvedAddresses(LoadBalancer.ResolvedAddresses resolvedAddresses)
Description copied from class:LoadBalancer
Handles newly resolved server groups and metadata attributes from name resolution system.servers
contained inEquivalentAddressGroup
should be considered equivalent but may be flattened into a single list if needed.Implementations should not modify the given
servers
.- Overrides:
handleResolvedAddresses
in classLoadBalancer
- Parameters:
resolvedAddresses
- the resolved server addresses, attributes, and config.
-
handleNameResolutionError
public void handleNameResolutionError(Status error)
Description copied from class:LoadBalancer
Handles an error from the name resolution system.- Specified by:
handleNameResolutionError
in classLoadBalancer
- Parameters:
error
- a non-OK status
-
handleSubchannelState
@Deprecated public void handleSubchannelState(LoadBalancer.Subchannel subchannel, ConnectivityStateInfo stateInfo)
Deprecated.Description copied from class:LoadBalancer
Handles a state change on a Subchannel.The initial state of a Subchannel is IDLE. You won't get a notification for the initial IDLE state.
If the new state is not SHUTDOWN, this method should create a new picker and call
Helper.updateBalancingState()
. Failing to do so may result in unnecessary delays of RPCs. Please refer toPickResult.withSubchannel()
's javadoc for more information.SHUTDOWN can only happen in two cases. One is that LoadBalancer called
LoadBalancer.Subchannel.shutdown()
earlier, thus it should have already discarded this Subchannel. The other is that Channel is doing aforced shutdown
or has already terminated, thus there won't be further requests to LoadBalancer. Therefore, the LoadBalancer usually don't need to react to a SHUTDOWN state.- Overrides:
handleSubchannelState
in classLoadBalancer
- Parameters:
subchannel
- the involved SubchannelstateInfo
- the new state
-
shutdown
public void shutdown()
Description copied from class:LoadBalancer
The channel asks the load-balancer to shutdown. No more methods on this class will be called after this method. The implementation should shutdown all Subchannels and OOB channels, and do any other cleanup as necessary.- Specified by:
shutdown
in classLoadBalancer
-
canHandleEmptyAddressListFromNameResolution
public boolean canHandleEmptyAddressListFromNameResolution()
Description copied from class:LoadBalancer
Whether this LoadBalancer can handle empty address group list to be passed toLoadBalancer.handleResolvedAddresses(ResolvedAddresses)
. The default implementation returnsfalse
, meaning that if the NameResolver returns an empty list, the Channel will turn that into an error and callLoadBalancer.handleNameResolutionError(io.grpc.Status)
. LoadBalancers that want to accept empty lists should override this method and returntrue
.This method should always return a constant value. It's not specified when this will be called.
- Overrides:
canHandleEmptyAddressListFromNameResolution
in classLoadBalancer
-
requestConnection
public void requestConnection()
Description copied from class:LoadBalancer
The channel asks the LoadBalancer to establish connections now (if applicable) so that the upcoming RPC may then just pick a ready connection without waiting for connections. This is triggered byManagedChannel.getState(true)
.If LoadBalancer doesn't override it, this is no-op. If it infeasible to create connections given the current state, e.g. no Subchannel has been created yet, LoadBalancer can ignore this request.
- Overrides:
requestConnection
in classLoadBalancer
-
-