mirror of https://github.com/grpc/grpc-java.git
xds: Avoid switchTo in WrrLocalityLb and WeightedTargetLb
This commit is contained in:
parent
ebed04798c
commit
2c49cc4197
|
|
@ -79,17 +79,11 @@ final class WeightedTargetLoadBalancer extends LoadBalancer {
|
|||
WeightedTargetConfig weightedTargetConfig = (WeightedTargetConfig) lbConfig;
|
||||
Map<String, WeightedPolicySelection> newTargets = weightedTargetConfig.targets;
|
||||
for (String targetName : newTargets.keySet()) {
|
||||
WeightedPolicySelection weightedChildLbConfig = newTargets.get(targetName);
|
||||
if (!targets.containsKey(targetName)) {
|
||||
ChildHelper childHelper = new ChildHelper(targetName);
|
||||
GracefulSwitchLoadBalancer childBalancer = new GracefulSwitchLoadBalancer(childHelper);
|
||||
childBalancer.switchTo(weightedChildLbConfig.policySelection.getProvider());
|
||||
childHelpers.put(targetName, childHelper);
|
||||
childBalancers.put(targetName, childBalancer);
|
||||
} else if (!weightedChildLbConfig.policySelection.getProvider().equals(
|
||||
targets.get(targetName).policySelection.getProvider())) {
|
||||
childBalancers.get(targetName)
|
||||
.switchTo(weightedChildLbConfig.policySelection.getProvider());
|
||||
}
|
||||
}
|
||||
targets = newTargets;
|
||||
|
|
@ -97,7 +91,7 @@ final class WeightedTargetLoadBalancer extends LoadBalancer {
|
|||
childBalancers.get(targetName).handleResolvedAddresses(
|
||||
resolvedAddresses.toBuilder()
|
||||
.setAddresses(AddressFilter.filter(resolvedAddresses.getAddresses(), targetName))
|
||||
.setLoadBalancingPolicyConfig(targets.get(targetName).policySelection.getConfig())
|
||||
.setLoadBalancingPolicyConfig(targets.get(targetName).childConfig)
|
||||
.setAttributes(resolvedAddresses.getAttributes().toBuilder()
|
||||
.set(CHILD_NAME, targetName)
|
||||
.build())
|
||||
|
|
|
|||
|
|
@ -26,11 +26,8 @@ import io.grpc.LoadBalancerRegistry;
|
|||
import io.grpc.NameResolver.ConfigOrError;
|
||||
import io.grpc.Status;
|
||||
import io.grpc.internal.JsonUtil;
|
||||
import io.grpc.internal.ServiceConfigUtil;
|
||||
import io.grpc.internal.ServiceConfigUtil.LbConfig;
|
||||
import io.grpc.internal.ServiceConfigUtil.PolicySelection;
|
||||
import io.grpc.util.GracefulSwitchLoadBalancer;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import javax.annotation.Nullable;
|
||||
|
|
@ -97,22 +94,16 @@ public final class WeightedTargetLoadBalancerProvider extends LoadBalancerProvid
|
|||
return ConfigOrError.fromError(Status.INTERNAL.withDescription(
|
||||
"Wrong weight for target " + name + " in weighted_target LB policy:\n " + rawConfig));
|
||||
}
|
||||
List<LbConfig> childConfigCandidates = ServiceConfigUtil.unwrapLoadBalancingConfigList(
|
||||
JsonUtil.getListOfObjects(rawWeightedTarget, "childPolicy"));
|
||||
if (childConfigCandidates == null || childConfigCandidates.isEmpty()) {
|
||||
return ConfigOrError.fromError(Status.INTERNAL.withDescription(
|
||||
"No child policy for target " + name + " in weighted_target LB policy:\n "
|
||||
+ rawConfig));
|
||||
}
|
||||
LoadBalancerRegistry lbRegistry =
|
||||
this.lbRegistry == null ? LoadBalancerRegistry.getDefaultRegistry() : this.lbRegistry;
|
||||
ConfigOrError selectedConfig =
|
||||
ServiceConfigUtil.selectLbPolicyFromList(childConfigCandidates, lbRegistry);
|
||||
if (selectedConfig.getError() != null) {
|
||||
return selectedConfig;
|
||||
ConfigOrError childConfig = GracefulSwitchLoadBalancer.parseLoadBalancingPolicyConfig(
|
||||
JsonUtil.getListOfObjects(rawWeightedTarget, "childPolicy"), lbRegistry);
|
||||
if (childConfig.getError() != null) {
|
||||
return ConfigOrError.fromError(Status.INTERNAL
|
||||
.withDescription("Could not parse weighted_target's child policy:" + name)
|
||||
.withCause(childConfig.getError().asRuntimeException()));
|
||||
}
|
||||
PolicySelection policySelection = (PolicySelection) selectedConfig.getConfig();
|
||||
parsedChildConfigs.put(name, new WeightedPolicySelection(weight, policySelection));
|
||||
parsedChildConfigs.put(name, new WeightedPolicySelection(weight, childConfig.getConfig()));
|
||||
}
|
||||
return ConfigOrError.fromConfig(new WeightedTargetConfig(parsedChildConfigs));
|
||||
} catch (RuntimeException e) {
|
||||
|
|
@ -125,11 +116,11 @@ public final class WeightedTargetLoadBalancerProvider extends LoadBalancerProvid
|
|||
static final class WeightedPolicySelection {
|
||||
|
||||
final int weight;
|
||||
final PolicySelection policySelection;
|
||||
final Object childConfig;
|
||||
|
||||
WeightedPolicySelection(int weight, PolicySelection policySelection) {
|
||||
WeightedPolicySelection(int weight, Object childConfig) {
|
||||
this.weight = weight;
|
||||
this.policySelection = policySelection;
|
||||
this.childConfig = childConfig;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -141,19 +132,19 @@ public final class WeightedTargetLoadBalancerProvider extends LoadBalancerProvid
|
|||
return false;
|
||||
}
|
||||
WeightedPolicySelection that = (WeightedPolicySelection) o;
|
||||
return weight == that.weight && Objects.equals(policySelection, that.policySelection);
|
||||
return weight == that.weight && Objects.equals(childConfig, that.childConfig);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(weight, policySelection);
|
||||
return Objects.hash(weight, childConfig);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return MoreObjects.toStringHelper(this)
|
||||
.add("weight", weight)
|
||||
.add("policySelection", policySelection)
|
||||
.add("childConfig", childConfig)
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ import io.grpc.InternalLogId;
|
|||
import io.grpc.LoadBalancer;
|
||||
import io.grpc.LoadBalancerRegistry;
|
||||
import io.grpc.Status;
|
||||
import io.grpc.internal.ServiceConfigUtil.PolicySelection;
|
||||
import io.grpc.util.GracefulSwitchLoadBalancer;
|
||||
import io.grpc.xds.WeightedTargetLoadBalancerProvider.WeightedPolicySelection;
|
||||
import io.grpc.xds.WeightedTargetLoadBalancerProvider.WeightedTargetConfig;
|
||||
|
|
@ -108,13 +107,15 @@ final class WrrLocalityLoadBalancer extends LoadBalancer {
|
|||
for (String locality : localityWeights.keySet()) {
|
||||
weightedPolicySelections.put(locality,
|
||||
new WeightedPolicySelection(localityWeights.get(locality),
|
||||
wrrLocalityConfig.childPolicy));
|
||||
wrrLocalityConfig.childConfig));
|
||||
}
|
||||
|
||||
switchLb.switchTo(lbRegistry.getProvider(WEIGHTED_TARGET_POLICY_NAME));
|
||||
Object switchConfig = GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||
lbRegistry.getProvider(WEIGHTED_TARGET_POLICY_NAME),
|
||||
new WeightedTargetConfig(weightedPolicySelections));
|
||||
switchLb.handleResolvedAddresses(
|
||||
resolvedAddresses.toBuilder()
|
||||
.setLoadBalancingPolicyConfig(new WeightedTargetConfig(weightedPolicySelections))
|
||||
.setLoadBalancingPolicyConfig(switchConfig)
|
||||
.build());
|
||||
|
||||
return Status.OK;
|
||||
|
|
@ -136,10 +137,10 @@ final class WrrLocalityLoadBalancer extends LoadBalancer {
|
|||
*/
|
||||
static final class WrrLocalityConfig {
|
||||
|
||||
final PolicySelection childPolicy;
|
||||
final Object childConfig;
|
||||
|
||||
WrrLocalityConfig(PolicySelection childPolicy) {
|
||||
this.childPolicy = childPolicy;
|
||||
WrrLocalityConfig(Object childConfig) {
|
||||
this.childConfig = childConfig;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -151,17 +152,17 @@ final class WrrLocalityLoadBalancer extends LoadBalancer {
|
|||
return false;
|
||||
}
|
||||
WrrLocalityConfig that = (WrrLocalityConfig) o;
|
||||
return Objects.equals(childPolicy, that.childPolicy);
|
||||
return Objects.equals(childConfig, that.childConfig);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hashCode(childPolicy);
|
||||
return Objects.hashCode(childConfig);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return MoreObjects.toStringHelper(this).add("childPolicy", childPolicy).toString();
|
||||
return MoreObjects.toStringHelper(this).add("childConfig", childConfig).toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,11 +24,8 @@ import io.grpc.LoadBalancerRegistry;
|
|||
import io.grpc.NameResolver.ConfigOrError;
|
||||
import io.grpc.Status;
|
||||
import io.grpc.internal.JsonUtil;
|
||||
import io.grpc.internal.ServiceConfigUtil;
|
||||
import io.grpc.internal.ServiceConfigUtil.LbConfig;
|
||||
import io.grpc.internal.ServiceConfigUtil.PolicySelection;
|
||||
import io.grpc.util.GracefulSwitchLoadBalancer;
|
||||
import io.grpc.xds.WrrLocalityLoadBalancer.WrrLocalityConfig;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
|
|
@ -62,21 +59,14 @@ public final class WrrLocalityLoadBalancerProvider extends LoadBalancerProvider
|
|||
@Override
|
||||
public ConfigOrError parseLoadBalancingPolicyConfig(Map<String, ?> rawConfig) {
|
||||
try {
|
||||
List<LbConfig> childConfigCandidates = ServiceConfigUtil.unwrapLoadBalancingConfigList(
|
||||
ConfigOrError childConfig = GracefulSwitchLoadBalancer.parseLoadBalancingPolicyConfig(
|
||||
JsonUtil.getListOfObjects(rawConfig, "childPolicy"));
|
||||
if (childConfigCandidates == null || childConfigCandidates.isEmpty()) {
|
||||
return ConfigOrError.fromError(Status.INTERNAL.withDescription(
|
||||
"No child policy in wrr_locality LB policy: "
|
||||
+ rawConfig));
|
||||
if (childConfig.getError() != null) {
|
||||
return ConfigOrError.fromError(Status.INTERNAL
|
||||
.withDescription("Failed to parse child policy in wrr_locality LB policy: " + rawConfig)
|
||||
.withCause(childConfig.getError().asRuntimeException()));
|
||||
}
|
||||
ConfigOrError selectedConfig =
|
||||
ServiceConfigUtil.selectLbPolicyFromList(childConfigCandidates,
|
||||
LoadBalancerRegistry.getDefaultRegistry());
|
||||
if (selectedConfig.getError() != null) {
|
||||
return selectedConfig;
|
||||
}
|
||||
PolicySelection policySelection = (PolicySelection) selectedConfig.getConfig();
|
||||
return ConfigOrError.fromConfig(new WrrLocalityConfig(policySelection));
|
||||
return ConfigOrError.fromConfig(new WrrLocalityConfig(childConfig.getConfig()));
|
||||
} catch (RuntimeException e) {
|
||||
return ConfigOrError.fromError(Status.INTERNAL.withCause(e)
|
||||
.withDescription("Failed to parse wrr_locality LB config: " + rawConfig));
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ import io.grpc.internal.PickSubchannelArgsImpl;
|
|||
import io.grpc.internal.ServiceConfigUtil.PolicySelection;
|
||||
import io.grpc.protobuf.ProtoUtils;
|
||||
import io.grpc.testing.TestMethodDescriptors;
|
||||
import io.grpc.util.GracefulSwitchLoadBalancer;
|
||||
import io.grpc.xds.ClusterImplLoadBalancerProvider.ClusterImplConfig;
|
||||
import io.grpc.xds.Endpoints.DropOverload;
|
||||
import io.grpc.xds.EnvoyServerProtoData.DownstreamTlsContext;
|
||||
|
|
@ -119,8 +120,8 @@ public class ClusterImplLoadBalancerTest {
|
|||
private final FakeClock fakeClock = new FakeClock();
|
||||
private final Locality locality =
|
||||
Locality.create("test-region", "test-zone", "test-subzone");
|
||||
private final PolicySelection roundRobin =
|
||||
new PolicySelection(new FakeLoadBalancerProvider("round_robin"), null);
|
||||
private final Object roundRobin = GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||
new FakeLoadBalancerProvider("round_robin"), null);
|
||||
private final List<FakeLoadBalancer> downstreamBalancers = new ArrayList<>();
|
||||
private final FakeTlsContextManager tlsContextManager = new FakeTlsContextManager();
|
||||
private final LoadStatsManager2 loadStatsManager =
|
||||
|
|
|
|||
|
|
@ -59,6 +59,8 @@ import io.grpc.internal.FakeClock.ScheduledTask;
|
|||
import io.grpc.internal.GrpcUtil;
|
||||
import io.grpc.internal.ObjectPool;
|
||||
import io.grpc.internal.ServiceConfigUtil.PolicySelection;
|
||||
import io.grpc.util.GracefulSwitchLoadBalancer;
|
||||
import io.grpc.util.GracefulSwitchLoadBalancerAccessor;
|
||||
import io.grpc.util.OutlierDetectionLoadBalancer.OutlierDetectionLoadBalancerConfig;
|
||||
import io.grpc.util.OutlierDetectionLoadBalancerProvider;
|
||||
import io.grpc.xds.ClusterImplLoadBalancerProvider.ClusterImplConfig;
|
||||
|
|
@ -159,12 +161,14 @@ public class ClusterResolverLoadBalancerTest {
|
|||
private final NameResolverRegistry nsRegistry = new NameResolverRegistry();
|
||||
private final PolicySelection roundRobin = new PolicySelection(
|
||||
new FakeLoadBalancerProvider("wrr_locality_experimental"), new WrrLocalityConfig(
|
||||
new PolicySelection(new FakeLoadBalancerProvider("round_robin"), null)));
|
||||
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||
new FakeLoadBalancerProvider("round_robin"), null)));
|
||||
private final PolicySelection ringHash = new PolicySelection(
|
||||
new FakeLoadBalancerProvider("ring_hash_experimental"), new RingHashConfig(10L, 100L));
|
||||
private final PolicySelection leastRequest = new PolicySelection(
|
||||
new FakeLoadBalancerProvider("wrr_locality_experimental"), new WrrLocalityConfig(
|
||||
new PolicySelection(new FakeLoadBalancerProvider("least_request_experimental"),
|
||||
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||
new FakeLoadBalancerProvider("least_request_experimental"),
|
||||
new LeastRequestConfig(3))));
|
||||
private final List<FakeLoadBalancer> childBalancers = new ArrayList<>();
|
||||
private final List<FakeNameResolver> resolvers = new ArrayList<>();
|
||||
|
|
@ -331,8 +335,9 @@ public class ClusterResolverLoadBalancerTest {
|
|||
tlsContext, Collections.<DropOverload>emptyList(), WRR_LOCALITY_POLICY_NAME);
|
||||
WrrLocalityConfig wrrLocalityConfig =
|
||||
(WrrLocalityConfig) clusterImplConfig.childPolicy.getConfig();
|
||||
assertThat(wrrLocalityConfig.childPolicy.getProvider().getPolicyName()).isEqualTo(
|
||||
"least_request_experimental");
|
||||
LoadBalancerProvider childProvider =
|
||||
GracefulSwitchLoadBalancerAccessor.getChildProvider(wrrLocalityConfig.childConfig);
|
||||
assertThat(childProvider.getPolicyName()).isEqualTo("least_request_experimental");
|
||||
|
||||
assertThat(
|
||||
childBalancer.addresses.get(0).getAttributes()
|
||||
|
|
@ -414,8 +419,9 @@ public class ClusterResolverLoadBalancerTest {
|
|||
tlsContext, Collections.<DropOverload>emptyList(), WRR_LOCALITY_POLICY_NAME);
|
||||
WrrLocalityConfig wrrLocalityConfig =
|
||||
(WrrLocalityConfig) clusterImplConfig.childPolicy.getConfig();
|
||||
assertThat(wrrLocalityConfig.childPolicy.getProvider().getPolicyName()).isEqualTo(
|
||||
"least_request_experimental");
|
||||
LoadBalancerProvider childProvider =
|
||||
GracefulSwitchLoadBalancerAccessor.getChildProvider(wrrLocalityConfig.childConfig);
|
||||
assertThat(childProvider.getPolicyName()).isEqualTo("least_request_experimental");
|
||||
|
||||
assertThat(
|
||||
childBalancer.addresses.get(0).getAttributes()
|
||||
|
|
@ -484,8 +490,9 @@ public class ClusterResolverLoadBalancerTest {
|
|||
assertThat(clusterImplConfig1.childPolicy.getConfig()).isInstanceOf(WrrLocalityConfig.class);
|
||||
WrrLocalityConfig wrrLocalityConfig1 =
|
||||
(WrrLocalityConfig) clusterImplConfig1.childPolicy.getConfig();
|
||||
assertThat(wrrLocalityConfig1.childPolicy.getProvider().getPolicyName()).isEqualTo(
|
||||
"round_robin");
|
||||
LoadBalancerProvider childProvider1 =
|
||||
GracefulSwitchLoadBalancerAccessor.getChildProvider(wrrLocalityConfig1.childConfig);
|
||||
assertThat(childProvider1.getPolicyName()).isEqualTo("round_robin");
|
||||
|
||||
PriorityChildConfig priorityChildConfig2 = priorityLbConfig.childConfigs.get(priority2);
|
||||
assertThat(priorityChildConfig2.ignoreReresolution).isTrue();
|
||||
|
|
@ -498,8 +505,9 @@ public class ClusterResolverLoadBalancerTest {
|
|||
assertThat(clusterImplConfig2.childPolicy.getConfig()).isInstanceOf(WrrLocalityConfig.class);
|
||||
WrrLocalityConfig wrrLocalityConfig2 =
|
||||
(WrrLocalityConfig) clusterImplConfig1.childPolicy.getConfig();
|
||||
assertThat(wrrLocalityConfig2.childPolicy.getProvider().getPolicyName()).isEqualTo(
|
||||
"round_robin");
|
||||
LoadBalancerProvider childProvider2 =
|
||||
GracefulSwitchLoadBalancerAccessor.getChildProvider(wrrLocalityConfig2.childConfig);
|
||||
assertThat(childProvider2.getPolicyName()).isEqualTo("round_robin");
|
||||
|
||||
PriorityChildConfig priorityChildConfig3 = priorityLbConfig.childConfigs.get(priority3);
|
||||
assertThat(priorityChildConfig3.ignoreReresolution).isTrue();
|
||||
|
|
@ -512,8 +520,9 @@ public class ClusterResolverLoadBalancerTest {
|
|||
assertThat(clusterImplConfig3.childPolicy.getConfig()).isInstanceOf(WrrLocalityConfig.class);
|
||||
WrrLocalityConfig wrrLocalityConfig3 =
|
||||
(WrrLocalityConfig) clusterImplConfig1.childPolicy.getConfig();
|
||||
assertThat(wrrLocalityConfig3.childPolicy.getProvider().getPolicyName()).isEqualTo(
|
||||
"round_robin");
|
||||
LoadBalancerProvider childProvider3 =
|
||||
GracefulSwitchLoadBalancerAccessor.getChildProvider(wrrLocalityConfig3.childConfig);
|
||||
assertThat(childProvider3.getPolicyName()).isEqualTo("round_robin");
|
||||
|
||||
for (EquivalentAddressGroup eag : childBalancer.addresses) {
|
||||
if (eag.getAttributes().get(InternalXdsAttributes.ATTR_LOCALITY) == locality1) {
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ import io.grpc.LoadBalancerProvider;
|
|||
import io.grpc.LoadBalancerRegistry;
|
||||
import io.grpc.NameResolver.ConfigOrError;
|
||||
import io.grpc.internal.JsonParser;
|
||||
import io.grpc.internal.ServiceConfigUtil.PolicySelection;
|
||||
import io.grpc.util.GracefulSwitchLoadBalancer;
|
||||
import io.grpc.xds.WeightedTargetLoadBalancerProvider.WeightedPolicySelection;
|
||||
import io.grpc.xds.WeightedTargetLoadBalancerProvider.WeightedTargetConfig;
|
||||
import java.util.Map;
|
||||
|
|
@ -128,11 +128,13 @@ public class WeightedTargetLoadBalancerProviderTest {
|
|||
"target_1",
|
||||
new WeightedPolicySelection(
|
||||
10,
|
||||
new PolicySelection(lbProviderFoo, fooConfig)),
|
||||
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||
lbProviderFoo, fooConfig)),
|
||||
"target_2",
|
||||
new WeightedPolicySelection(
|
||||
20,
|
||||
new PolicySelection(lbProviderBar, barConfig)))));
|
||||
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||
lbProviderBar, barConfig)))));
|
||||
assertThat(parsedConfig).isEqualTo(expectedConfig);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ import io.grpc.LoadBalancerProvider;
|
|||
import io.grpc.LoadBalancerRegistry;
|
||||
import io.grpc.Status;
|
||||
import io.grpc.SynchronizationContext;
|
||||
import io.grpc.internal.ServiceConfigUtil.PolicySelection;
|
||||
import io.grpc.util.GracefulSwitchLoadBalancer;
|
||||
import io.grpc.xds.WeightedRandomPicker.WeightedChildPicker;
|
||||
import io.grpc.xds.WeightedTargetLoadBalancerProvider.WeightedPolicySelection;
|
||||
import io.grpc.xds.WeightedTargetLoadBalancerProvider.WeightedTargetConfig;
|
||||
|
|
@ -146,13 +146,13 @@ public class WeightedTargetLoadBalancerTest {
|
|||
};
|
||||
|
||||
private final WeightedPolicySelection weightedLbConfig0 = new WeightedPolicySelection(
|
||||
weights[0], new PolicySelection(fooLbProvider, configs[0]));
|
||||
weights[0], newChildConfig(fooLbProvider, configs[0]));
|
||||
private final WeightedPolicySelection weightedLbConfig1 = new WeightedPolicySelection(
|
||||
weights[1], new PolicySelection(barLbProvider, configs[1]));
|
||||
weights[1], newChildConfig(barLbProvider, configs[1]));
|
||||
private final WeightedPolicySelection weightedLbConfig2 = new WeightedPolicySelection(
|
||||
weights[2], new PolicySelection(barLbProvider, configs[2]));
|
||||
weights[2], newChildConfig(barLbProvider, configs[2]));
|
||||
private final WeightedPolicySelection weightedLbConfig3 = new WeightedPolicySelection(
|
||||
weights[3], new PolicySelection(fooLbProvider, configs[3]));
|
||||
weights[3], newChildConfig(fooLbProvider, configs[3]));
|
||||
|
||||
@Mock
|
||||
private Helper helper;
|
||||
|
|
@ -233,16 +233,16 @@ public class WeightedTargetLoadBalancerTest {
|
|||
Map<String, WeightedPolicySelection> newTargets = ImmutableMap.of(
|
||||
"target1",
|
||||
new WeightedPolicySelection(
|
||||
newWeights[0], new PolicySelection(barLbProvider, newConfigs[0])),
|
||||
newWeights[0], newChildConfig(barLbProvider, newConfigs[0])),
|
||||
"target2",
|
||||
new WeightedPolicySelection(
|
||||
newWeights[1], new PolicySelection(barLbProvider, newConfigs[1])),
|
||||
newWeights[1], newChildConfig(barLbProvider, newConfigs[1])),
|
||||
"target3",
|
||||
new WeightedPolicySelection(
|
||||
newWeights[2], new PolicySelection(fooLbProvider, newConfigs[2])),
|
||||
newWeights[2], newChildConfig(fooLbProvider, newConfigs[2])),
|
||||
"target4",
|
||||
new WeightedPolicySelection(
|
||||
newWeights[3], new PolicySelection(fooLbProvider, newConfigs[3])));
|
||||
newWeights[3], newChildConfig(fooLbProvider, newConfigs[3])));
|
||||
weightedTargetLb.handleResolvedAddresses(
|
||||
ResolvedAddresses.newBuilder()
|
||||
.setAddresses(ImmutableList.<EquivalentAddressGroup>of())
|
||||
|
|
@ -418,9 +418,9 @@ public class WeightedTargetLoadBalancerTest {
|
|||
|
||||
Map<String, WeightedPolicySelection> targets = ImmutableMap.of(
|
||||
"target0", new WeightedPolicySelection(
|
||||
weights[0], new PolicySelection(fakeLbProvider, configs[0])),
|
||||
weights[0], newChildConfig(fakeLbProvider, configs[0])),
|
||||
"target3", new WeightedPolicySelection(
|
||||
weights[3], new PolicySelection(fakeLbProvider, configs[3])));
|
||||
weights[3], newChildConfig(fakeLbProvider, configs[3])));
|
||||
weightedTargetLb.handleResolvedAddresses(
|
||||
ResolvedAddresses.newBuilder()
|
||||
.setAddresses(ImmutableList.<EquivalentAddressGroup>of())
|
||||
|
|
@ -434,6 +434,10 @@ public class WeightedTargetLoadBalancerTest {
|
|||
|
||||
}
|
||||
|
||||
private Object newChildConfig(LoadBalancerProvider provider, Object config) {
|
||||
return GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(provider, config);
|
||||
}
|
||||
|
||||
private static class FakeLoadBalancerProvider extends LoadBalancerProvider {
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import io.grpc.LoadBalancer.Helper;
|
|||
import io.grpc.LoadBalancerProvider;
|
||||
import io.grpc.LoadBalancerRegistry;
|
||||
import io.grpc.NameResolver;
|
||||
import io.grpc.util.GracefulSwitchLoadBalancerAccessor;
|
||||
import io.grpc.xds.WrrLocalityLoadBalancer.WrrLocalityConfig;
|
||||
import java.util.Map;
|
||||
import org.junit.Test;
|
||||
|
|
@ -64,6 +65,8 @@ public class WrrLocalityLoadBalancerProviderTest {
|
|||
WrrLocalityLoadBalancerProvider provider = new WrrLocalityLoadBalancerProvider();
|
||||
NameResolver.ConfigOrError configOrError = provider.parseLoadBalancingPolicyConfig(rawConfig);
|
||||
WrrLocalityConfig config = (WrrLocalityConfig) configOrError.getConfig();
|
||||
assertThat(config.childPolicy.getProvider().getPolicyName()).isEqualTo("round_robin");
|
||||
LoadBalancerProvider childProvider =
|
||||
GracefulSwitchLoadBalancerAccessor.getChildProvider(config.childConfig);
|
||||
assertThat(childProvider.getPolicyName()).isEqualTo("round_robin");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ import io.grpc.LoadBalancerProvider;
|
|||
import io.grpc.LoadBalancerRegistry;
|
||||
import io.grpc.Status;
|
||||
import io.grpc.SynchronizationContext;
|
||||
import io.grpc.internal.ServiceConfigUtil.PolicySelection;
|
||||
import io.grpc.util.GracefulSwitchLoadBalancer;
|
||||
import io.grpc.xds.WeightedTargetLoadBalancerProvider.WeightedPolicySelection;
|
||||
import io.grpc.xds.WeightedTargetLoadBalancerProvider.WeightedTargetConfig;
|
||||
import io.grpc.xds.WrrLocalityLoadBalancer.WrrLocalityConfig;
|
||||
|
|
@ -112,7 +112,7 @@ public class WrrLocalityLoadBalancerTest {
|
|||
// A two locality cluster with a mock child LB policy.
|
||||
String localityOne = "localityOne";
|
||||
String localityTwo = "localityTwo";
|
||||
PolicySelection childPolicy = new PolicySelection(mockChildProvider, null);
|
||||
Object childPolicy = newChildConfig(mockChildProvider, null);
|
||||
|
||||
// The child config is delivered wrapped in the wrr_locality config and the locality weights
|
||||
// in a ResolvedAddresses attribute.
|
||||
|
|
@ -138,7 +138,7 @@ public class WrrLocalityLoadBalancerTest {
|
|||
@Test
|
||||
public void handleResolvedAddresses_noLocalityWeights() {
|
||||
// A two locality cluster with a mock child LB policy.
|
||||
PolicySelection childPolicy = new PolicySelection(mockChildProvider, null);
|
||||
Object childPolicy = newChildConfig(mockChildProvider, null);
|
||||
|
||||
// The child config is delivered wrapped in the wrr_locality config and the locality weights
|
||||
// in a ResolvedAddresses attribute.
|
||||
|
|
@ -163,7 +163,7 @@ public class WrrLocalityLoadBalancerTest {
|
|||
|
||||
@Test
|
||||
public void handleNameResolutionError_withChildLb() {
|
||||
deliverAddresses(new WrrLocalityConfig(new PolicySelection(mockChildProvider, null)),
|
||||
deliverAddresses(new WrrLocalityConfig(newChildConfig(mockChildProvider, null)),
|
||||
ImmutableList.of(makeAddress("addr1", "test-locality", 1)));
|
||||
Status status = Status.DEADLINE_EXCEEDED.withDescription("too slow");
|
||||
loadBalancer.handleNameResolutionError(status);
|
||||
|
|
@ -175,7 +175,7 @@ public class WrrLocalityLoadBalancerTest {
|
|||
|
||||
@Test
|
||||
public void localityWeightAttributeNotPropagated() {
|
||||
PolicySelection childPolicy = new PolicySelection(mockChildProvider, null);
|
||||
Object childPolicy = newChildConfig(mockChildProvider, null);
|
||||
|
||||
WrrLocalityConfig wlConfig = new WrrLocalityConfig(childPolicy);
|
||||
deliverAddresses(wlConfig, ImmutableList.of(makeAddress("addr1", "test-locality", 1)));
|
||||
|
|
@ -190,7 +190,7 @@ public class WrrLocalityLoadBalancerTest {
|
|||
|
||||
@Test
|
||||
public void shutdown() {
|
||||
deliverAddresses(new WrrLocalityConfig(new PolicySelection(mockChildProvider, null)),
|
||||
deliverAddresses(new WrrLocalityConfig(newChildConfig(mockChildProvider, null)),
|
||||
ImmutableList.of(makeAddress("addr", "test-locality", 1)));
|
||||
loadBalancer.shutdown();
|
||||
|
||||
|
|
@ -199,17 +199,19 @@ public class WrrLocalityLoadBalancerTest {
|
|||
|
||||
@Test
|
||||
public void configEquality() {
|
||||
WrrLocalityConfig configOne = new WrrLocalityConfig(
|
||||
new PolicySelection(mockChildProvider, null));
|
||||
WrrLocalityConfig configTwo = new WrrLocalityConfig(
|
||||
new PolicySelection(mockChildProvider, null));
|
||||
WrrLocalityConfig configOne = new WrrLocalityConfig(newChildConfig(mockChildProvider, null));
|
||||
WrrLocalityConfig configTwo = new WrrLocalityConfig(newChildConfig(mockChildProvider, null));
|
||||
WrrLocalityConfig differentConfig = new WrrLocalityConfig(
|
||||
new PolicySelection(mockChildProvider, "config"));
|
||||
newChildConfig(mockChildProvider, "config"));
|
||||
|
||||
new EqualsTester().addEqualityGroup(configOne, configTwo).addEqualityGroup(differentConfig)
|
||||
.testEquals();
|
||||
}
|
||||
|
||||
private Object newChildConfig(LoadBalancerProvider provider, Object config) {
|
||||
return GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(provider, config);
|
||||
}
|
||||
|
||||
private void deliverAddresses(WrrLocalityConfig config, List<EquivalentAddressGroup> addresses) {
|
||||
loadBalancer.handleResolvedAddresses(
|
||||
ResolvedAddresses.newBuilder().setAddresses(addresses).setLoadBalancingPolicyConfig(config)
|
||||
|
|
|
|||
Loading…
Reference in New Issue