Class OutlierDetectionLoadBalancer
LoadBalancer while monitoring for outlier backends and removing them from
the use of the child LB.
This implements the outlier detection gRFC: https://github.com/grpc/proposal/blob/master/A50-xds-outlier-detection.md
The implementation maintains two maps. Each endpoint status is tracked using an EndpointTracker. E.g. for two endpoints with these address list and their tracker: Endpoint e1 : [a1, a2] is tracked with EndpointTracker t1 Endpoint e2 : [a3] is tracked with EndpointTracker t2 The two maps are: First, addressMap maps from socket address -> endpoint tracker : [a1 -> t1, a2 -> t1, a3 -> t2] EndpointTracker has reference to all the subchannels of the corresponding endpoint. Second, trackerMap maps from unordered address set -> endpoint tracker. Updated upon address updates.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) classThis child helper wraps the provided helper so that it can hand out wrappedOutlierDetectionLoadBalancer.OutlierDetectionSubchannels and manage the address info map.(package private) classThis timer will be invoked periodically, according to configuration, and it will look for any outlier subchannels.(package private) static classTracks additional information about the endpoint needed for outlier detection.(package private) static classMaintains a mapping from endpoint (a set of addresses) to their trackers.(package private) static classstatic final classThe configuration forOutlierDetectionLoadBalancer.(package private) classThis picker delegates the actual picking logic to a wrapped delegate, but associates aClientStreamTracerwith each pick to track the results of each subchannel stream.(package private) class(package private) static interfaceImplementations provide different ways of ejecting outlier addresses..(package private) static classThis algorithm ejects addresses that don't maintain a required rate of successful calls.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 TypeFieldDescription(package private) final Map<SocketAddress, OutlierDetectionLoadBalancer.EndpointTracker> private final LoadBalancer.Helperprivate Longprivate static final Attributes.Key<OutlierDetectionLoadBalancer.EndpointTracker> (package private) final OutlierDetectionLoadBalancer.EndpointTrackerMapprivate final ChannelLoggerprivate final GracefulSwitchLoadBalancerprivate final SynchronizationContextprivate TimeProviderprivate final ScheduledExecutorServiceFields 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
ConstructorsConstructorDescriptionOutlierDetectionLoadBalancer(LoadBalancer.Helper helper, TimeProvider timeProvider) Creates a new instance ofOutlierDetectionLoadBalancer. -
Method Summary
Modifier and TypeMethodDescriptionacceptResolvedAddresses(LoadBalancer.ResolvedAddresses resolvedAddresses) Accepts newly resolved addresses from the name resolution system.voidhandleNameResolutionError(Status error) Handles an error from the name resolution system.private static booleanhasSingleAddress(List<EquivalentAddressGroup> addressGroups) Counts how many addresses are in a given address group.voidshutdown()The channel asks the load-balancer to shutdown.private static List<OutlierDetectionLoadBalancer.EndpointTracker> trackersWithVolume(OutlierDetectionLoadBalancer.EndpointTrackerMap trackerMap, int volume) Returns only the trackers that have the minimum configured volume to be considered.Methods inherited from class io.grpc.LoadBalancer
canHandleEmptyAddressListFromNameResolution, handleResolvedAddresses, handleSubchannelState, requestConnection
-
Field Details
-
endpointTrackerMap
-
addressMap
-
syncContext
-
childHelper
-
switchLb
-
timeProvider
-
timeService
-
detectionTimerHandle
-
detectionTimerStartNanos
-
logger
-
ENDPOINT_TRACKER_KEY
private static final Attributes.Key<OutlierDetectionLoadBalancer.EndpointTracker> ENDPOINT_TRACKER_KEY
-
-
Constructor Details
-
OutlierDetectionLoadBalancer
Creates a new instance ofOutlierDetectionLoadBalancer.
-
-
Method Details
-
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.
-
handleNameResolutionError
Description copied from class:LoadBalancerHandles an error from the name resolution system.- Specified by:
handleNameResolutionErrorin classLoadBalancer- Parameters:
error- a non-OK status
-
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
-
trackersWithVolume
private static List<OutlierDetectionLoadBalancer.EndpointTracker> trackersWithVolume(OutlierDetectionLoadBalancer.EndpointTrackerMap trackerMap, int volume) Returns only the trackers that have the minimum configured volume to be considered. -
hasSingleAddress
Counts how many addresses are in a given address group.
-