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 class
Index as in 'i', the pointer to an entry.private static final class
No-op picker which doesn't add any custom picking logic.static final class
private final class
Picker that requests connection during the first pick, and returns noResult.private static final class
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
FieldsModifier and TypeFieldDescriptionprivate final PickFirstLeafLoadBalancer.Index
private final BackoffPolicy.Provider
private ConnectivityState
(package private) static final int
private final boolean
private boolean
private final LoadBalancer.Helper
private static final Logger
private boolean
private int
private ConnectivityState
private BackoffPolicy
private final boolean
private 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 void
createNewSubchannel
(SocketAddress addr, Attributes attrs) private static List
<EquivalentAddressGroup> deDupAddresses
(List<EquivalentAddressGroup> groups) private SocketAddress
getAddress
(LoadBalancer.Subchannel subchannel) (package private) ConnectivityState
(package private) int
void
handleNameResolutionError
(Status error) Handles an error from the name resolution system.(package private) boolean
private boolean
(package private) static boolean
(package private) void
processSubchannelState
(PickFirstLeafLoadBalancer.SubchannelData subchannelData, ConnectivityStateInfo stateInfo) void
Requests a connection to the next applicable address' subchannel, creating one if necessary.private void
Only called after all addresses attempted and failed (TRANSIENT_FAILURE).private void
Happy Eyeballs Schedules connection attempt to happen after a delay to the next available address.void
shutdown()
The channel asks the load-balancer to shutdown.private void
shutdownRemaining
(PickFirstLeafLoadBalancer.SubchannelData activeSubchannelData) Shuts down remaining subchannels.private void
updateBalancingState
(ConnectivityState state, LoadBalancer.SubchannelPicker picker) private void
updateHealthCheckedState
(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:LoadBalancer
Accepts newly resolved addresses from the name resolution system. TheEquivalentAddressGroup
addresses 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:
acceptResolvedAddresses
in classLoadBalancer
- Parameters:
resolvedAddresses
- the resolved server addresses, attributes, and config.- Returns:
true
if the resolved addresses were accepted.false
if rejected.
-
deDupAddresses
-
handleNameResolutionError
Description copied from class:LoadBalancer
Handles an error from the name resolution system.- Specified by:
handleNameResolutionError
in 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: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
-
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:
requestConnection
in 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()
-