mirror of https://github.com/grpc/grpc-java.git
xds: Delegate more RingHashLB address updates to MultiChildLB
Since04474970RingHashLB has not used acceptResolvedAddressesInternal(). At the time that was needed because deactivated children were part of MultiChildLB. But in9de8e443, the logic of RingHashLB and MultiChildLB.acceptResolvedAddressesInternal() converged, so it can now swap back to using the base class for more logic.
This commit is contained in:
parent
b5989a5401
commit
fd8734f341
|
|
@ -231,7 +231,7 @@ public abstract class MultiChildLoadBalancer extends LoadBalancer {
|
|||
return new AcceptResolvedAddrRetVal(Status.OK, getRemovedChildren(newChildren.keySet()));
|
||||
}
|
||||
|
||||
protected final void addMissingChildren(Map<Object, ChildLbState> newChildren) {
|
||||
private void addMissingChildren(Map<Object, ChildLbState> newChildren) {
|
||||
// Do adds and identify reused children
|
||||
for (Map.Entry<Object, ChildLbState> entry : newChildren.entrySet()) {
|
||||
final Object key = entry.getKey();
|
||||
|
|
@ -241,7 +241,7 @@ public abstract class MultiChildLoadBalancer extends LoadBalancer {
|
|||
}
|
||||
}
|
||||
|
||||
protected final void updateChildrenWithResolvedAddresses(ResolvedAddresses resolvedAddresses,
|
||||
private void updateChildrenWithResolvedAddresses(ResolvedAddresses resolvedAddresses,
|
||||
Map<Object, ChildLbState> newChildren) {
|
||||
for (Map.Entry<Object, ChildLbState> entry : newChildren.entrySet()) {
|
||||
Object childConfig = entry.getValue().getConfig();
|
||||
|
|
@ -256,7 +256,7 @@ public abstract class MultiChildLoadBalancer extends LoadBalancer {
|
|||
/**
|
||||
* Identifies which children have been removed (are not part of the newChildKeys).
|
||||
*/
|
||||
protected final List<ChildLbState> getRemovedChildren(Set<Object> newChildKeys) {
|
||||
private List<ChildLbState> getRemovedChildren(Set<Object> newChildKeys) {
|
||||
List<ChildLbState> removedChildren = new ArrayList<>();
|
||||
// Do removals
|
||||
for (Object key : ImmutableList.copyOf(childLbStates.keySet())) {
|
||||
|
|
|
|||
|
|
@ -89,19 +89,11 @@ final class RingHashLoadBalancer extends MultiChildLoadBalancer {
|
|||
|
||||
try {
|
||||
resolvingAddresses = true;
|
||||
// Subclass handles any special manipulation to create appropriate types of ChildLbStates
|
||||
Map<Object, ChildLbState> newChildren = createChildLbMap(resolvedAddresses);
|
||||
|
||||
if (newChildren.isEmpty()) {
|
||||
addressValidityStatus = Status.UNAVAILABLE.withDescription(
|
||||
"Ring hash lb error: EDS resolution was successful, but there were no valid addresses");
|
||||
handleNameResolutionError(addressValidityStatus);
|
||||
return addressValidityStatus;
|
||||
AcceptResolvedAddrRetVal acceptRetVal = acceptResolvedAddressesInternal(resolvedAddresses);
|
||||
if (!acceptRetVal.status.isOk()) {
|
||||
return acceptRetVal.status;
|
||||
}
|
||||
|
||||
addMissingChildren(newChildren);
|
||||
updateChildrenWithResolvedAddresses(resolvedAddresses, newChildren);
|
||||
|
||||
// Now do the ringhash specific logic with weights and building the ring
|
||||
RingHashConfig config = (RingHashConfig) resolvedAddresses.getLoadBalancingPolicyConfig();
|
||||
if (config == null) {
|
||||
|
|
@ -145,7 +137,7 @@ final class RingHashLoadBalancer extends MultiChildLoadBalancer {
|
|||
// clusters and resolver can remove them in service config.
|
||||
updateOverallBalancingState();
|
||||
|
||||
shutdownRemoved(getRemovedChildren(newChildren.keySet()));
|
||||
shutdownRemoved(acceptRetVal.removedChildren);
|
||||
} finally {
|
||||
this.resolvingAddresses = false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue