Package io.grpc.internal
Class PickFirstLeafLoadBalancer
java.lang.Object
io.grpc.LoadBalancer
io.grpc.internal.PickFirstLeafLoadBalancer
A
LoadBalancer that provides no load-balancing over the addresses from the NameResolver. 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 ClassesModifier and TypeClassDescriptionprivate final class(package private) static final classIndex as in 'i', the pointer to an entry.private static final classNo-op picker which doesn't add any custom picking logic.static final classprivate final classPicker that requests connection during the first pick, and returns noResult.private static final classNested 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
FieldsModifier and TypeFieldDescriptionprivate final PickFirstLeafLoadBalancer.Indexprivate final BackoffPolicy.Providerprivate ConnectivityState(package private) static final intprivate final booleanprivate booleanprivate final LoadBalancer.Helperprivate static final Loggerprivate booleanprivate intprivate ConnectivityStateprivate BackoffPolicyprivate final booleanprivate final Map<SocketAddress, PickFirstLeafLoadBalancer.SubchannelData> 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 -
Method Summary
Modifier and TypeMethodDescriptionacceptResolvedAddresses(LoadBalancer.ResolvedAddresses resolvedAddresses) Accepts newly resolved addresses from the name resolution system.private voidcreateNewSubchannel(SocketAddress addr, Attributes attrs) private static List<EquivalentAddressGroup> deDupAddresses(List<EquivalentAddressGroup> groups) private SocketAddressgetAddress(LoadBalancer.Subchannel subchannel) (package private) ConnectivityState(package private) intvoidhandleNameResolutionError(Status error) Handles an error from the name resolution system.(package private) booleanprivate boolean(package private) static boolean(package private) voidprocessSubchannelState(PickFirstLeafLoadBalancer.SubchannelData subchannelData, ConnectivityStateInfo stateInfo) voidRequests a connection to the next applicable address' subchannel, creating one if necessary.private voidOnly called after all addresses attempted and failed (TRANSIENT_FAILURE).private voidHappy 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 Details
-
log
-
CONNECTION_DELAY_INTERVAL_MS
static final int CONNECTION_DELAY_INTERVAL_MS- See Also:
-
helper
-
subchannels
-
addressIndex
-
numTf
private int numTf -
firstPass
private boolean firstPass -
scheduleConnectionTask
-
rawConnectivityState
-
concludedState
-
enableHappyEyeballs
private final boolean enableHappyEyeballs -
notAPetiolePolicy
private boolean notAPetiolePolicy -
bkoffPolProvider
-
reconnectPolicy
-
reconnectTask
-
serializingRetries
private final boolean serializingRetries
-
-
Constructor Details
-
PickFirstLeafLoadBalancer
PickFirstLeafLoadBalancer(LoadBalancer.Helper helper)
-
-
Method Details
-
isSerializingRetries
static boolean isSerializingRetries() -
acceptResolvedAddresses
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
-
handleNameResolutionError
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
-
updateBalancingState
-
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
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(SocketAddress addr, Attributes attrs) -
isPassComplete
private boolean isPassComplete() -
getAddress
-
getConcludedConnectivityState
ConnectivityState getConcludedConnectivityState() -
getGroupIndex
int getGroupIndex() -
isIndexValid
boolean isIndexValid()
-