Package io.grpc.grpclb
Class GrpclbState
- java.lang.Object
-
- io.grpc.grpclb.GrpclbState
-
@NotThreadSafe final class GrpclbState extends java.lang.Object
The states of a GRPCLB working session ofGrpclbLoadBalancer
. Created when GrpclbLoadBalancer switches to GRPCLB mode. Closed and discarded when GrpclbLoadBalancer switches away from GRPCLB mode.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
GrpclbState.BackendEntry
(package private) static class
GrpclbState.DropEntry
(package private) static class
GrpclbState.ErrorEntry
(package private) class
GrpclbState.FallbackModeTask
(package private) static class
GrpclbState.IdleSubchannelEntry
(package private) class
GrpclbState.LbRpcRetryTask
private class
GrpclbState.LbStream
(package private) static class
GrpclbState.LoadReportingTask
(package private) static class
GrpclbState.Mode
(package private) static interface
GrpclbState.RoundRobinEntry
(package private) static class
GrpclbState.RoundRobinPicker
-
Field Summary
-
Constructor Summary
Constructors Constructor Description GrpclbState(GrpclbConfig config, LoadBalancer.Helper helper, Context context, SubchannelPool subchannelPool, TimeProvider time, com.google.common.base.Stopwatch stopwatch, BackoffPolicy.Provider backoffPolicyProvider)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
cancelFallbackTimer()
private void
cancelLbRpcRetryTimer()
private static Attributes
createSubchannelAttrs()
(package private) GrpclbClientLoadRecorder
getLoadRecorder()
(package private) void
handleAddresses(java.util.List<EquivalentAddressGroup> newLbAddressGroups, java.util.List<EquivalentAddressGroup> newBackendServers)
Handle new addresses of the balancer and backends from the resolver, and create connection if not yet connected.(package private) void
handleSubchannelState(LoadBalancer.Subchannel subchannel, ConnectivityStateInfo newState)
private void
maybeUpdatePicker()
Make and use a picker out of the current lists and the states of subchannels if they have changed since the last picker created.private void
maybeUpdatePicker(ConnectivityState state, GrpclbState.RoundRobinPicker picker)
Update the given picker to the helper if it's different from the current one.private void
maybeUseFallbackBackends()
(package private) void
propagateError(Status status)
(package private) void
requestConnection()
private void
returnSubchannelToPool(LoadBalancer.Subchannel subchannel)
(package private) void
shutdown()
private void
shutdownLbComm()
private void
shutdownLbRpc()
private void
startLbComm(java.util.List<EquivalentAddressGroup> overrideAuthorityEags)
private void
startLbRpc()
private void
updateServerList(java.util.List<GrpclbState.DropEntry> newDropList, java.util.List<BackendAddressGroup> newBackendAddrList, GrpclbClientLoadRecorder loadRecorder)
Populate backend servers to be used based on the given list of addresses.private void
useFallbackBackends()
Populate backend servers to be used from the fallback backends.
-
-
-
Field Detail
-
FALLBACK_TIMEOUT_MS
static final long FALLBACK_TIMEOUT_MS
-
LB_PROVIDED_BACKEND_ATTRS
private static final Attributes LB_PROVIDED_BACKEND_ATTRS
-
SHOULD_LOG_SERVER_LISTS
static final boolean SHOULD_LOG_SERVER_LISTS
-
DROP_PICK_RESULT
static final LoadBalancer.PickResult DROP_PICK_RESULT
-
NO_AVAILABLE_BACKENDS_STATUS
static final Status NO_AVAILABLE_BACKENDS_STATUS
-
BALANCER_TIMEOUT_STATUS
static final Status BALANCER_TIMEOUT_STATUS
-
BALANCER_REQUESTED_FALLBACK_STATUS
static final Status BALANCER_REQUESTED_FALLBACK_STATUS
-
NO_FALLBACK_BACKENDS_STATUS
static final Status NO_FALLBACK_BACKENDS_STATUS
-
NO_LB_ADDRESS_PROVIDED_STATUS
private static final Status NO_LB_ADDRESS_PROVIDED_STATUS
-
BUFFER_ENTRY
static final GrpclbState.RoundRobinEntry BUFFER_ENTRY
-
NO_USE_AUTHORITY_SUFFIX
static final java.lang.String NO_USE_AUTHORITY_SUFFIX
- See Also:
- Constant Field Values
-
serviceName
private final java.lang.String serviceName
-
fallbackTimeoutMs
private final long fallbackTimeoutMs
-
helper
private final LoadBalancer.Helper helper
-
context
private final Context context
-
syncContext
private final SynchronizationContext syncContext
-
subchannelPool
@Nullable private final SubchannelPool subchannelPool
-
time
private final TimeProvider time
-
stopwatch
private final com.google.common.base.Stopwatch stopwatch
-
timerService
private final java.util.concurrent.ScheduledExecutorService timerService
-
STATE_INFO
private static final Attributes.Key<java.util.concurrent.atomic.AtomicReference<ConnectivityStateInfo>> STATE_INFO
-
backoffPolicyProvider
private final BackoffPolicy.Provider backoffPolicyProvider
-
logger
private final ChannelLogger logger
-
fallbackTimer
@Nullable private SynchronizationContext.ScheduledHandle fallbackTimer
-
fallbackBackendList
private java.util.List<EquivalentAddressGroup> fallbackBackendList
-
usingFallbackBackends
private boolean usingFallbackBackends
-
fallbackReason
@Nullable private Status fallbackReason
-
balancerWorking
private boolean balancerWorking
-
lbRpcRetryPolicy
@Nullable private BackoffPolicy lbRpcRetryPolicy
-
lbRpcRetryTimer
@Nullable private SynchronizationContext.ScheduledHandle lbRpcRetryTimer
-
lbCommChannel
@Nullable private ManagedChannel lbCommChannel
-
lbStream
@Nullable private GrpclbState.LbStream lbStream
-
subchannels
private java.util.Map<java.util.List<EquivalentAddressGroup>,LoadBalancer.Subchannel> subchannels
-
config
private final GrpclbConfig config
-
dropList
private java.util.List<GrpclbState.DropEntry> dropList
-
backendList
private java.util.List<GrpclbState.BackendEntry> backendList
-
currentPicker
private GrpclbState.RoundRobinPicker currentPicker
-
requestConnectionPending
private boolean requestConnectionPending
-
-
Constructor Detail
-
GrpclbState
GrpclbState(GrpclbConfig config, LoadBalancer.Helper helper, Context context, SubchannelPool subchannelPool, TimeProvider time, com.google.common.base.Stopwatch stopwatch, BackoffPolicy.Provider backoffPolicyProvider)
-
-
Method Detail
-
handleSubchannelState
void handleSubchannelState(LoadBalancer.Subchannel subchannel, ConnectivityStateInfo newState)
-
handleAddresses
void handleAddresses(java.util.List<EquivalentAddressGroup> newLbAddressGroups, java.util.List<EquivalentAddressGroup> newBackendServers)
Handle new addresses of the balancer and backends from the resolver, and create connection if not yet connected.
-
requestConnection
void requestConnection()
-
maybeUseFallbackBackends
private void maybeUseFallbackBackends()
-
useFallbackBackends
private void useFallbackBackends()
Populate backend servers to be used from the fallback backends.
-
shutdownLbComm
private void shutdownLbComm()
-
shutdownLbRpc
private void shutdownLbRpc()
-
startLbComm
private void startLbComm(java.util.List<EquivalentAddressGroup> overrideAuthorityEags)
-
startLbRpc
private void startLbRpc()
-
cancelFallbackTimer
private void cancelFallbackTimer()
-
cancelLbRpcRetryTimer
private void cancelLbRpcRetryTimer()
-
shutdown
void shutdown()
-
propagateError
void propagateError(Status status)
-
returnSubchannelToPool
private void returnSubchannelToPool(LoadBalancer.Subchannel subchannel)
-
getLoadRecorder
@Nullable GrpclbClientLoadRecorder getLoadRecorder()
-
updateServerList
private void updateServerList(java.util.List<GrpclbState.DropEntry> newDropList, java.util.List<BackendAddressGroup> newBackendAddrList, @Nullable GrpclbClientLoadRecorder loadRecorder)
Populate backend servers to be used based on the given list of addresses.
-
maybeUpdatePicker
private void maybeUpdatePicker()
Make and use a picker out of the current lists and the states of subchannels if they have changed since the last picker created.
-
maybeUpdatePicker
private void maybeUpdatePicker(ConnectivityState state, GrpclbState.RoundRobinPicker picker)
Update the given picker to the helper if it's different from the current one.
-
createSubchannelAttrs
private static Attributes createSubchannelAttrs()
-
-