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()));
|
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
|
// Do adds and identify reused children
|
||||||
for (Map.Entry<Object, ChildLbState> entry : newChildren.entrySet()) {
|
for (Map.Entry<Object, ChildLbState> entry : newChildren.entrySet()) {
|
||||||
final Object key = entry.getKey();
|
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) {
|
Map<Object, ChildLbState> newChildren) {
|
||||||
for (Map.Entry<Object, ChildLbState> entry : newChildren.entrySet()) {
|
for (Map.Entry<Object, ChildLbState> entry : newChildren.entrySet()) {
|
||||||
Object childConfig = entry.getValue().getConfig();
|
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).
|
* 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<>();
|
List<ChildLbState> removedChildren = new ArrayList<>();
|
||||||
// Do removals
|
// Do removals
|
||||||
for (Object key : ImmutableList.copyOf(childLbStates.keySet())) {
|
for (Object key : ImmutableList.copyOf(childLbStates.keySet())) {
|
||||||
|
|
|
||||||
|
|
@ -89,19 +89,11 @@ final class RingHashLoadBalancer extends MultiChildLoadBalancer {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
resolvingAddresses = true;
|
resolvingAddresses = true;
|
||||||
// Subclass handles any special manipulation to create appropriate types of ChildLbStates
|
AcceptResolvedAddrRetVal acceptRetVal = acceptResolvedAddressesInternal(resolvedAddresses);
|
||||||
Map<Object, ChildLbState> newChildren = createChildLbMap(resolvedAddresses);
|
if (!acceptRetVal.status.isOk()) {
|
||||||
|
return acceptRetVal.status;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
addMissingChildren(newChildren);
|
|
||||||
updateChildrenWithResolvedAddresses(resolvedAddresses, newChildren);
|
|
||||||
|
|
||||||
// Now do the ringhash specific logic with weights and building the ring
|
// Now do the ringhash specific logic with weights and building the ring
|
||||||
RingHashConfig config = (RingHashConfig) resolvedAddresses.getLoadBalancingPolicyConfig();
|
RingHashConfig config = (RingHashConfig) resolvedAddresses.getLoadBalancingPolicyConfig();
|
||||||
if (config == null) {
|
if (config == null) {
|
||||||
|
|
@ -145,7 +137,7 @@ final class RingHashLoadBalancer extends MultiChildLoadBalancer {
|
||||||
// clusters and resolver can remove them in service config.
|
// clusters and resolver can remove them in service config.
|
||||||
updateOverallBalancingState();
|
updateOverallBalancingState();
|
||||||
|
|
||||||
shutdownRemoved(getRemovedChildren(newChildren.keySet()));
|
shutdownRemoved(acceptRetVal.removedChildren);
|
||||||
} finally {
|
} finally {
|
||||||
this.resolvingAddresses = false;
|
this.resolvingAddresses = false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue