Package io.grpc.internal
Class PickFirstLeafLoadBalancer
- java.lang.Object
-
- io.grpc.LoadBalancer
-
- io.grpc.internal.PickFirstLeafLoadBalancer
-
final class PickFirstLeafLoadBalancer extends LoadBalancer
ALoadBalancerthat provides no load-balancing over the addresses from theNameResolver. The channel's default behavior is used, which is walking down the address list and sticking to the first that works.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classPickFirstLeafLoadBalancer.HealthListener(package private) static classPickFirstLeafLoadBalancer.IndexIndex as in 'i', the pointer to an entry.private static classPickFirstLeafLoadBalancer.PickerNo-op picker which doesn't add any custom picking logic.static classPickFirstLeafLoadBalancer.PickFirstLeafLoadBalancerConfigprivate classPickFirstLeafLoadBalancer.RequestConnectionPickerPicker that requests connection during the first pick, and returns noResult.private static classPickFirstLeafLoadBalancer.SubchannelData-
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 Modifier and Type Field Description private PickFirstLeafLoadBalancer.IndexaddressIndexprivate BackoffPolicy.ProviderbkoffPolProviderprivate ConnectivityStateconcludedState(package private) static intCONNECTION_DELAY_INTERVAL_MSprivate booleanenableHappyEyeballsprivate booleanfirstPassprivate LoadBalancer.Helperhelperprivate static java.util.logging.Loggerlogprivate booleannotAPetiolePolicyprivate intnumTfprivate ConnectivityStaterawConnectivityStateprivate BackoffPolicyreconnectPolicyprivate SynchronizationContext.ScheduledHandlereconnectTaskprivate SynchronizationContext.ScheduledHandlescheduleConnectionTaskprivate booleanserializingRetriesprivate java.util.Map<java.net.SocketAddress,PickFirstLeafLoadBalancer.SubchannelData>subchannels-
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 PickFirstLeafLoadBalancer(LoadBalancer.Helper helper)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description StatusacceptResolvedAddresses(LoadBalancer.ResolvedAddresses resolvedAddresses)Accepts newly resolved addresses from the name resolution system.private voidcancelScheduleTask()private PickFirstLeafLoadBalancer.SubchannelDatacreateNewSubchannel(java.net.SocketAddress addr, Attributes attrs)private static java.util.List<EquivalentAddressGroup>deDupAddresses(java.util.List<EquivalentAddressGroup> groups)private java.net.SocketAddressgetAddress(LoadBalancer.Subchannel subchannel)(package private) ConnectivityStategetConcludedConnectivityState()(package private) intgetGroupIndex()voidhandleNameResolutionError(Status error)Handles an error from the name resolution system.(package private) booleanisIndexValid()private booleanisPassComplete()(package private) static booleanisSerializingRetries()(package private) voidprocessSubchannelState(PickFirstLeafLoadBalancer.SubchannelData subchannelData, ConnectivityStateInfo stateInfo)voidrequestConnection()Requests a connection to the next applicable address' subchannel, creating one if necessary.private voidscheduleBackoff()Only called after all addresses attempted and failed (TRANSIENT_FAILURE).private voidscheduleNextConnection()Happy Eyeballs Schedules connection attempt to happen after a delay to the next available address.voidshutdown()The channel asks the load-balancer to shutdown.private voidshutdownRemaining(PickFirstLeafLoadBalancer.SubchannelData activeSubchannelData)Shuts down remaining subchannels.private voidupdateBalancingState(ConnectivityState state, LoadBalancer.SubchannelPicker picker)private voidupdateHealthCheckedState(PickFirstLeafLoadBalancer.SubchannelData subchannelData)-
Methods inherited from class io.grpc.LoadBalancer
canHandleEmptyAddressListFromNameResolution, handleResolvedAddresses, handleSubchannelState
-
-
-
-
Field Detail
-
log
private static final java.util.logging.Logger log
-
CONNECTION_DELAY_INTERVAL_MS
static final int CONNECTION_DELAY_INTERVAL_MS
- See Also:
- Constant Field Values
-
helper
private final LoadBalancer.Helper helper
-
subchannels
private final java.util.Map<java.net.SocketAddress,PickFirstLeafLoadBalancer.SubchannelData> subchannels
-
addressIndex
private final PickFirstLeafLoadBalancer.Index addressIndex
-
numTf
private int numTf
-
firstPass
private boolean firstPass
-
scheduleConnectionTask
@Nullable private SynchronizationContext.ScheduledHandle scheduleConnectionTask
-
rawConnectivityState
private ConnectivityState rawConnectivityState
-
concludedState
private ConnectivityState concludedState
-
enableHappyEyeballs
private final boolean enableHappyEyeballs
-
notAPetiolePolicy
private boolean notAPetiolePolicy
-
bkoffPolProvider
private final BackoffPolicy.Provider bkoffPolProvider
-
reconnectPolicy
private BackoffPolicy reconnectPolicy
-
reconnectTask
@Nullable private SynchronizationContext.ScheduledHandle reconnectTask
-
serializingRetries
private final boolean serializingRetries
-
-
Constructor Detail
-
PickFirstLeafLoadBalancer
PickFirstLeafLoadBalancer(LoadBalancer.Helper helper)
-
-
Method Detail
-
isSerializingRetries
static boolean isSerializingRetries()
-
acceptResolvedAddresses
public Status acceptResolvedAddresses(LoadBalancer.ResolvedAddresses resolvedAddresses)
Description copied from class:LoadBalancerAccepts newly resolved addresses from the name resolution system. TheEquivalentAddressGroupaddresses should be considered equivalent but may be flattened into a single list if needed.Implementations can choose to reject the given addresses by returning
false.Implementations should not modify the given
addresses.- Overrides:
acceptResolvedAddressesin classLoadBalancer- Parameters:
resolvedAddresses- the resolved server addresses, attributes, and config.- Returns:
trueif the resolved addresses were accepted.falseif rejected.
-
deDupAddresses
private static java.util.List<EquivalentAddressGroup> deDupAddresses(java.util.List<EquivalentAddressGroup> groups)
-
handleNameResolutionError
public void handleNameResolutionError(Status error)
Description copied from class:LoadBalancerHandles an error from the name resolution system.- Specified by:
handleNameResolutionErrorin classLoadBalancer- Parameters:
error- a non-OK status
-
processSubchannelState
void processSubchannelState(PickFirstLeafLoadBalancer.SubchannelData subchannelData, ConnectivityStateInfo stateInfo)
-
scheduleBackoff
private void scheduleBackoff()
Only called after all addresses attempted and failed (TRANSIENT_FAILURE).
-
updateHealthCheckedState
private void updateHealthCheckedState(PickFirstLeafLoadBalancer.SubchannelData subchannelData)
-
updateBalancingState
private void updateBalancingState(ConnectivityState state, LoadBalancer.SubchannelPicker picker)
-
shutdown
public void shutdown()
Description copied from class:LoadBalancerThe 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:
shutdownin classLoadBalancer
-
shutdownRemaining
private void shutdownRemaining(PickFirstLeafLoadBalancer.SubchannelData activeSubchannelData)
Shuts down remaining subchannels. Called when a subchannel becomes ready, which means that all other subchannels must be shutdown.
-
requestConnection
public void requestConnection()
Requests a connection to the next applicable address' subchannel, creating one if necessary. Schedules a connection to next address in list as well. If the current channel has already attempted a connection, we attempt a connection to the next address/subchannel in our list. We assume that createNewSubchannel will never return null.- Overrides:
requestConnectionin classLoadBalancer
-
scheduleNextConnection
private void scheduleNextConnection()
Happy Eyeballs Schedules connection attempt to happen after a delay to the next available address.
-
cancelScheduleTask
private void cancelScheduleTask()
-
createNewSubchannel
private PickFirstLeafLoadBalancer.SubchannelData createNewSubchannel(java.net.SocketAddress addr, Attributes attrs)
-
isPassComplete
private boolean isPassComplete()
-
getAddress
private java.net.SocketAddress getAddress(LoadBalancer.Subchannel subchannel)
-
getConcludedConnectivityState
ConnectivityState getConcludedConnectivityState()
-
getGroupIndex
int getGroupIndex()
-
isIndexValid
boolean isIndexValid()
-
-