mirror of https://github.com/grpc/grpc-java.git
xds: Avoid switchTo in ClusterImplLb and ClusterResolverLb
This commit is contained in:
parent
749b2e0abc
commit
dfb22ba97c
|
|
@ -23,15 +23,12 @@ import static io.grpc.xds.XdsLbPolicies.CLUSTER_RESOLVER_POLICY_NAME;
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import io.grpc.InternalLogId;
|
import io.grpc.InternalLogId;
|
||||||
import io.grpc.LoadBalancer;
|
import io.grpc.LoadBalancer;
|
||||||
import io.grpc.LoadBalancerProvider;
|
|
||||||
import io.grpc.LoadBalancerRegistry;
|
import io.grpc.LoadBalancerRegistry;
|
||||||
import io.grpc.NameResolver;
|
import io.grpc.NameResolver;
|
||||||
import io.grpc.Status;
|
import io.grpc.Status;
|
||||||
import io.grpc.SynchronizationContext;
|
import io.grpc.SynchronizationContext;
|
||||||
import io.grpc.internal.ObjectPool;
|
import io.grpc.internal.ObjectPool;
|
||||||
import io.grpc.internal.ServiceConfigUtil;
|
import io.grpc.util.GracefulSwitchLoadBalancer;
|
||||||
import io.grpc.internal.ServiceConfigUtil.LbConfig;
|
|
||||||
import io.grpc.internal.ServiceConfigUtil.PolicySelection;
|
|
||||||
import io.grpc.xds.CdsLoadBalancerProvider.CdsConfig;
|
import io.grpc.xds.CdsLoadBalancerProvider.CdsConfig;
|
||||||
import io.grpc.xds.ClusterResolverLoadBalancerProvider.ClusterResolverConfig;
|
import io.grpc.xds.ClusterResolverLoadBalancerProvider.ClusterResolverConfig;
|
||||||
import io.grpc.xds.ClusterResolverLoadBalancerProvider.ClusterResolverConfig.DiscoveryMechanism;
|
import io.grpc.xds.ClusterResolverLoadBalancerProvider.ClusterResolverConfig.DiscoveryMechanism;
|
||||||
|
|
@ -43,6 +40,7 @@ import io.grpc.xds.client.XdsLogger;
|
||||||
import io.grpc.xds.client.XdsLogger.XdsLogLevel;
|
import io.grpc.xds.client.XdsLogger.XdsLogLevel;
|
||||||
import java.util.ArrayDeque;
|
import java.util.ArrayDeque;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|
@ -234,26 +232,17 @@ final class CdsLoadBalancer2 extends LoadBalancer {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The LB policy config is provided in service_config.proto/JSON format. It is unwrapped
|
// The LB policy config is provided in service_config.proto/JSON format.
|
||||||
// to determine the name of the policy in the load balancer registry.
|
NameResolver.ConfigOrError configOrError =
|
||||||
LbConfig unwrappedLbConfig = ServiceConfigUtil.unwrapLoadBalancingConfig(
|
GracefulSwitchLoadBalancer.parseLoadBalancingPolicyConfig(
|
||||||
root.result.lbPolicyConfig());
|
Arrays.asList(root.result.lbPolicyConfig()), lbRegistry);
|
||||||
LoadBalancerProvider lbProvider = lbRegistry.getProvider(unwrappedLbConfig.getPolicyName());
|
|
||||||
if (lbProvider == null) {
|
|
||||||
throw NameResolver.ConfigOrError.fromError(Status.UNAVAILABLE.withDescription(
|
|
||||||
"No provider available for LB: " + unwrappedLbConfig.getPolicyName())).getError()
|
|
||||||
.asRuntimeException();
|
|
||||||
}
|
|
||||||
NameResolver.ConfigOrError configOrError = lbProvider.parseLoadBalancingPolicyConfig(
|
|
||||||
unwrappedLbConfig.getRawConfigValue());
|
|
||||||
if (configOrError.getError() != null) {
|
if (configOrError.getError() != null) {
|
||||||
throw configOrError.getError().augmentDescription("Unable to parse the LB config")
|
throw configOrError.getError().augmentDescription("Unable to parse the LB config")
|
||||||
.asRuntimeException();
|
.asRuntimeException();
|
||||||
}
|
}
|
||||||
|
|
||||||
ClusterResolverConfig config = new ClusterResolverConfig(
|
ClusterResolverConfig config = new ClusterResolverConfig(
|
||||||
Collections.unmodifiableList(instances),
|
Collections.unmodifiableList(instances), configOrError.getConfig());
|
||||||
new PolicySelection(lbProvider, configOrError.getConfig()));
|
|
||||||
if (childLb == null) {
|
if (childLb == null) {
|
||||||
childLb = lbRegistry.getProvider(CLUSTER_RESOLVER_POLICY_NAME).newLoadBalancer(helper);
|
childLb = lbRegistry.getProvider(CLUSTER_RESOLVER_POLICY_NAME).newLoadBalancer(helper);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -145,11 +145,10 @@ final class ClusterImplLoadBalancer extends LoadBalancer {
|
||||||
childLbHelper.updateSslContextProviderSupplier(config.tlsContext);
|
childLbHelper.updateSslContextProviderSupplier(config.tlsContext);
|
||||||
childLbHelper.updateFilterMetadata(config.filterMetadata);
|
childLbHelper.updateFilterMetadata(config.filterMetadata);
|
||||||
|
|
||||||
childSwitchLb.switchTo(config.childPolicy.getProvider());
|
|
||||||
childSwitchLb.handleResolvedAddresses(
|
childSwitchLb.handleResolvedAddresses(
|
||||||
resolvedAddresses.toBuilder()
|
resolvedAddresses.toBuilder()
|
||||||
.setAttributes(attributes)
|
.setAttributes(attributes)
|
||||||
.setLoadBalancingPolicyConfig(config.childPolicy.getConfig())
|
.setLoadBalancingPolicyConfig(config.childConfig)
|
||||||
.build());
|
.build());
|
||||||
return Status.OK;
|
return Status.OK;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ import io.grpc.LoadBalancerProvider;
|
||||||
import io.grpc.LoadBalancerRegistry;
|
import io.grpc.LoadBalancerRegistry;
|
||||||
import io.grpc.NameResolver.ConfigOrError;
|
import io.grpc.NameResolver.ConfigOrError;
|
||||||
import io.grpc.Status;
|
import io.grpc.Status;
|
||||||
import io.grpc.internal.ServiceConfigUtil.PolicySelection;
|
|
||||||
import io.grpc.xds.Endpoints.DropOverload;
|
import io.grpc.xds.Endpoints.DropOverload;
|
||||||
import io.grpc.xds.EnvoyServerProtoData.UpstreamTlsContext;
|
import io.grpc.xds.EnvoyServerProtoData.UpstreamTlsContext;
|
||||||
import io.grpc.xds.client.Bootstrapper.ServerInfo;
|
import io.grpc.xds.client.Bootstrapper.ServerInfo;
|
||||||
|
|
@ -97,12 +96,12 @@ public final class ClusterImplLoadBalancerProvider extends LoadBalancerProvider
|
||||||
// Drop configurations.
|
// Drop configurations.
|
||||||
final List<DropOverload> dropCategories;
|
final List<DropOverload> dropCategories;
|
||||||
// Provides the direct child policy and its config.
|
// Provides the direct child policy and its config.
|
||||||
final PolicySelection childPolicy;
|
final Object childConfig;
|
||||||
final Map<String, Struct> filterMetadata;
|
final Map<String, Struct> filterMetadata;
|
||||||
|
|
||||||
ClusterImplConfig(String cluster, @Nullable String edsServiceName,
|
ClusterImplConfig(String cluster, @Nullable String edsServiceName,
|
||||||
@Nullable ServerInfo lrsServerInfo, @Nullable Long maxConcurrentRequests,
|
@Nullable ServerInfo lrsServerInfo, @Nullable Long maxConcurrentRequests,
|
||||||
List<DropOverload> dropCategories, PolicySelection childPolicy,
|
List<DropOverload> dropCategories, Object childConfig,
|
||||||
@Nullable UpstreamTlsContext tlsContext, Map<String, Struct> filterMetadata) {
|
@Nullable UpstreamTlsContext tlsContext, Map<String, Struct> filterMetadata) {
|
||||||
this.cluster = checkNotNull(cluster, "cluster");
|
this.cluster = checkNotNull(cluster, "cluster");
|
||||||
this.edsServiceName = edsServiceName;
|
this.edsServiceName = edsServiceName;
|
||||||
|
|
@ -112,7 +111,7 @@ public final class ClusterImplLoadBalancerProvider extends LoadBalancerProvider
|
||||||
this.filterMetadata = ImmutableMap.copyOf(filterMetadata);
|
this.filterMetadata = ImmutableMap.copyOf(filterMetadata);
|
||||||
this.dropCategories = Collections.unmodifiableList(
|
this.dropCategories = Collections.unmodifiableList(
|
||||||
new ArrayList<>(checkNotNull(dropCategories, "dropCategories")));
|
new ArrayList<>(checkNotNull(dropCategories, "dropCategories")));
|
||||||
this.childPolicy = checkNotNull(childPolicy, "childPolicy");
|
this.childConfig = checkNotNull(childConfig, "childConfig");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -124,7 +123,7 @@ public final class ClusterImplLoadBalancerProvider extends LoadBalancerProvider
|
||||||
.add("maxConcurrentRequests", maxConcurrentRequests)
|
.add("maxConcurrentRequests", maxConcurrentRequests)
|
||||||
// Exclude tlsContext as its string representation is cumbersome.
|
// Exclude tlsContext as its string representation is cumbersome.
|
||||||
.add("dropCategories", dropCategories)
|
.add("dropCategories", dropCategories)
|
||||||
.add("childPolicy", childPolicy)
|
.add("childConfig", childConfig)
|
||||||
.toString();
|
.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -127,9 +127,11 @@ final class ClusterResolverLoadBalancer extends LoadBalancer {
|
||||||
(ClusterResolverConfig) resolvedAddresses.getLoadBalancingPolicyConfig();
|
(ClusterResolverConfig) resolvedAddresses.getLoadBalancingPolicyConfig();
|
||||||
if (!Objects.equals(this.config, config)) {
|
if (!Objects.equals(this.config, config)) {
|
||||||
logger.log(XdsLogLevel.DEBUG, "Config: {0}", config);
|
logger.log(XdsLogLevel.DEBUG, "Config: {0}", config);
|
||||||
delegate.switchTo(new ClusterResolverLbStateFactory());
|
|
||||||
this.config = config;
|
this.config = config;
|
||||||
delegate.handleResolvedAddresses(resolvedAddresses);
|
Object gracefulConfig = GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
|
new ClusterResolverLbStateFactory(), config);
|
||||||
|
delegate.handleResolvedAddresses(
|
||||||
|
resolvedAddresses.toBuilder().setLoadBalancingPolicyConfig(gracefulConfig).build());
|
||||||
}
|
}
|
||||||
return Status.OK;
|
return Status.OK;
|
||||||
}
|
}
|
||||||
|
|
@ -165,7 +167,7 @@ final class ClusterResolverLoadBalancer extends LoadBalancer {
|
||||||
private final Helper helper;
|
private final Helper helper;
|
||||||
private final List<String> clusters = new ArrayList<>();
|
private final List<String> clusters = new ArrayList<>();
|
||||||
private final Map<String, ClusterState> clusterStates = new HashMap<>();
|
private final Map<String, ClusterState> clusterStates = new HashMap<>();
|
||||||
private PolicySelection endpointLbPolicy;
|
private Object endpointLbConfig;
|
||||||
private ResolvedAddresses resolvedAddresses;
|
private ResolvedAddresses resolvedAddresses;
|
||||||
private LoadBalancer childLb;
|
private LoadBalancer childLb;
|
||||||
|
|
||||||
|
|
@ -179,7 +181,7 @@ final class ClusterResolverLoadBalancer extends LoadBalancer {
|
||||||
this.resolvedAddresses = resolvedAddresses;
|
this.resolvedAddresses = resolvedAddresses;
|
||||||
ClusterResolverConfig config =
|
ClusterResolverConfig config =
|
||||||
(ClusterResolverConfig) resolvedAddresses.getLoadBalancingPolicyConfig();
|
(ClusterResolverConfig) resolvedAddresses.getLoadBalancingPolicyConfig();
|
||||||
endpointLbPolicy = config.lbPolicy;
|
endpointLbConfig = config.lbConfig;
|
||||||
for (DiscoveryMechanism instance : config.discoveryMechanisms) {
|
for (DiscoveryMechanism instance : config.discoveryMechanisms) {
|
||||||
clusters.add(instance.cluster);
|
clusters.add(instance.cluster);
|
||||||
ClusterState state;
|
ClusterState state;
|
||||||
|
|
@ -454,7 +456,7 @@ final class ClusterResolverLoadBalancer extends LoadBalancer {
|
||||||
Map<String, PriorityChildConfig> priorityChildConfigs =
|
Map<String, PriorityChildConfig> priorityChildConfigs =
|
||||||
generateEdsBasedPriorityChildConfigs(
|
generateEdsBasedPriorityChildConfigs(
|
||||||
name, edsServiceName, lrsServerInfo, maxConcurrentRequests, tlsContext,
|
name, edsServiceName, lrsServerInfo, maxConcurrentRequests, tlsContext,
|
||||||
filterMetadata, outlierDetection, endpointLbPolicy, lbRegistry,
|
filterMetadata, outlierDetection, endpointLbConfig, lbRegistry,
|
||||||
prioritizedLocalityWeights, dropOverloads);
|
prioritizedLocalityWeights, dropOverloads);
|
||||||
status = Status.OK;
|
status = Status.OK;
|
||||||
resolved = true;
|
resolved = true;
|
||||||
|
|
@ -717,11 +719,11 @@ final class ClusterResolverLoadBalancer extends LoadBalancer {
|
||||||
@Nullable UpstreamTlsContext tlsContext, Map<String, Struct> filterMetadata,
|
@Nullable UpstreamTlsContext tlsContext, Map<String, Struct> filterMetadata,
|
||||||
LoadBalancerRegistry lbRegistry, List<DropOverload> dropOverloads) {
|
LoadBalancerRegistry lbRegistry, List<DropOverload> dropOverloads) {
|
||||||
// Override endpoint-level LB policy with pick_first for logical DNS cluster.
|
// Override endpoint-level LB policy with pick_first for logical DNS cluster.
|
||||||
PolicySelection endpointLbPolicy =
|
Object endpointLbConfig = GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
new PolicySelection(lbRegistry.getProvider("pick_first"), null);
|
lbRegistry.getProvider("pick_first"), null);
|
||||||
ClusterImplConfig clusterImplConfig =
|
ClusterImplConfig clusterImplConfig =
|
||||||
new ClusterImplConfig(cluster, null, lrsServerInfo, maxConcurrentRequests,
|
new ClusterImplConfig(cluster, null, lrsServerInfo, maxConcurrentRequests,
|
||||||
dropOverloads, endpointLbPolicy, tlsContext, filterMetadata);
|
dropOverloads, endpointLbConfig, tlsContext, filterMetadata);
|
||||||
LoadBalancerProvider clusterImplLbProvider =
|
LoadBalancerProvider clusterImplLbProvider =
|
||||||
lbRegistry.getProvider(XdsLbPolicies.CLUSTER_IMPL_POLICY_NAME);
|
lbRegistry.getProvider(XdsLbPolicies.CLUSTER_IMPL_POLICY_NAME);
|
||||||
PolicySelection clusterImplPolicy =
|
PolicySelection clusterImplPolicy =
|
||||||
|
|
@ -739,14 +741,14 @@ final class ClusterResolverLoadBalancer extends LoadBalancer {
|
||||||
String cluster, @Nullable String edsServiceName, @Nullable ServerInfo lrsServerInfo,
|
String cluster, @Nullable String edsServiceName, @Nullable ServerInfo lrsServerInfo,
|
||||||
@Nullable Long maxConcurrentRequests, @Nullable UpstreamTlsContext tlsContext,
|
@Nullable Long maxConcurrentRequests, @Nullable UpstreamTlsContext tlsContext,
|
||||||
Map<String, Struct> filterMetadata,
|
Map<String, Struct> filterMetadata,
|
||||||
@Nullable OutlierDetection outlierDetection, PolicySelection endpointLbPolicy,
|
@Nullable OutlierDetection outlierDetection, Object endpointLbConfig,
|
||||||
LoadBalancerRegistry lbRegistry, Map<String,
|
LoadBalancerRegistry lbRegistry, Map<String,
|
||||||
Map<Locality, Integer>> prioritizedLocalityWeights, List<DropOverload> dropOverloads) {
|
Map<Locality, Integer>> prioritizedLocalityWeights, List<DropOverload> dropOverloads) {
|
||||||
Map<String, PriorityChildConfig> configs = new HashMap<>();
|
Map<String, PriorityChildConfig> configs = new HashMap<>();
|
||||||
for (String priority : prioritizedLocalityWeights.keySet()) {
|
for (String priority : prioritizedLocalityWeights.keySet()) {
|
||||||
ClusterImplConfig clusterImplConfig =
|
ClusterImplConfig clusterImplConfig =
|
||||||
new ClusterImplConfig(cluster, edsServiceName, lrsServerInfo, maxConcurrentRequests,
|
new ClusterImplConfig(cluster, edsServiceName, lrsServerInfo, maxConcurrentRequests,
|
||||||
dropOverloads, endpointLbPolicy, tlsContext, filterMetadata);
|
dropOverloads, endpointLbConfig, tlsContext, filterMetadata);
|
||||||
LoadBalancerProvider clusterImplLbProvider =
|
LoadBalancerProvider clusterImplLbProvider =
|
||||||
lbRegistry.getProvider(XdsLbPolicies.CLUSTER_IMPL_POLICY_NAME);
|
lbRegistry.getProvider(XdsLbPolicies.CLUSTER_IMPL_POLICY_NAME);
|
||||||
PolicySelection priorityChildPolicy =
|
PolicySelection priorityChildPolicy =
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,6 @@ import io.grpc.LoadBalancer.Helper;
|
||||||
import io.grpc.LoadBalancerProvider;
|
import io.grpc.LoadBalancerProvider;
|
||||||
import io.grpc.NameResolver.ConfigOrError;
|
import io.grpc.NameResolver.ConfigOrError;
|
||||||
import io.grpc.Status;
|
import io.grpc.Status;
|
||||||
import io.grpc.internal.ServiceConfigUtil.PolicySelection;
|
|
||||||
import io.grpc.xds.EnvoyServerProtoData.OutlierDetection;
|
import io.grpc.xds.EnvoyServerProtoData.OutlierDetection;
|
||||||
import io.grpc.xds.EnvoyServerProtoData.UpstreamTlsContext;
|
import io.grpc.xds.EnvoyServerProtoData.UpstreamTlsContext;
|
||||||
import io.grpc.xds.client.Bootstrapper.ServerInfo;
|
import io.grpc.xds.client.Bootstrapper.ServerInfo;
|
||||||
|
|
@ -73,18 +72,17 @@ public final class ClusterResolverLoadBalancerProvider extends LoadBalancerProvi
|
||||||
static final class ClusterResolverConfig {
|
static final class ClusterResolverConfig {
|
||||||
// Ordered list of clusters to be resolved.
|
// Ordered list of clusters to be resolved.
|
||||||
final List<DiscoveryMechanism> discoveryMechanisms;
|
final List<DiscoveryMechanism> discoveryMechanisms;
|
||||||
// Endpoint-level load balancing policy with config
|
// GracefulSwitch configuration
|
||||||
// (round_robin, least_request_experimental or ring_hash_experimental).
|
final Object lbConfig;
|
||||||
final PolicySelection lbPolicy;
|
|
||||||
|
|
||||||
ClusterResolverConfig(List<DiscoveryMechanism> discoveryMechanisms, PolicySelection lbPolicy) {
|
ClusterResolverConfig(List<DiscoveryMechanism> discoveryMechanisms, Object lbConfig) {
|
||||||
this.discoveryMechanisms = checkNotNull(discoveryMechanisms, "discoveryMechanisms");
|
this.discoveryMechanisms = checkNotNull(discoveryMechanisms, "discoveryMechanisms");
|
||||||
this.lbPolicy = checkNotNull(lbPolicy, "lbPolicy");
|
this.lbConfig = checkNotNull(lbConfig, "lbConfig");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(discoveryMechanisms, lbPolicy);
|
return Objects.hash(discoveryMechanisms, lbConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -97,14 +95,14 @@ public final class ClusterResolverLoadBalancerProvider extends LoadBalancerProvi
|
||||||
}
|
}
|
||||||
ClusterResolverConfig that = (ClusterResolverConfig) o;
|
ClusterResolverConfig that = (ClusterResolverConfig) o;
|
||||||
return discoveryMechanisms.equals(that.discoveryMechanisms)
|
return discoveryMechanisms.equals(that.discoveryMechanisms)
|
||||||
&& lbPolicy.equals(that.lbPolicy);
|
&& lbConfig.equals(that.lbConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return MoreObjects.toStringHelper(this)
|
return MoreObjects.toStringHelper(this)
|
||||||
.add("discoveryMechanisms", discoveryMechanisms)
|
.add("discoveryMechanisms", discoveryMechanisms)
|
||||||
.add("lbPolicy", lbPolicy)
|
.add("lbConfig", lbConfig)
|
||||||
.toString();
|
.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ import io.grpc.Status;
|
||||||
import io.grpc.Status.Code;
|
import io.grpc.Status.Code;
|
||||||
import io.grpc.SynchronizationContext;
|
import io.grpc.SynchronizationContext;
|
||||||
import io.grpc.internal.ObjectPool;
|
import io.grpc.internal.ObjectPool;
|
||||||
|
import io.grpc.util.GracefulSwitchLoadBalancerAccessor;
|
||||||
import io.grpc.xds.CdsLoadBalancerProvider.CdsConfig;
|
import io.grpc.xds.CdsLoadBalancerProvider.CdsConfig;
|
||||||
import io.grpc.xds.ClusterResolverLoadBalancerProvider.ClusterResolverConfig;
|
import io.grpc.xds.ClusterResolverLoadBalancerProvider.ClusterResolverConfig;
|
||||||
import io.grpc.xds.ClusterResolverLoadBalancerProvider.ClusterResolverConfig.DiscoveryMechanism;
|
import io.grpc.xds.ClusterResolverLoadBalancerProvider.ClusterResolverConfig.DiscoveryMechanism;
|
||||||
|
|
@ -177,7 +178,9 @@ public class CdsLoadBalancer2Test {
|
||||||
DiscoveryMechanism instance = Iterables.getOnlyElement(childLbConfig.discoveryMechanisms);
|
DiscoveryMechanism instance = Iterables.getOnlyElement(childLbConfig.discoveryMechanisms);
|
||||||
assertDiscoveryMechanism(instance, CLUSTER, DiscoveryMechanism.Type.EDS, EDS_SERVICE_NAME,
|
assertDiscoveryMechanism(instance, CLUSTER, DiscoveryMechanism.Type.EDS, EDS_SERVICE_NAME,
|
||||||
null, LRS_SERVER_INFO, 100L, upstreamTlsContext, outlierDetection);
|
null, LRS_SERVER_INFO, 100L, upstreamTlsContext, outlierDetection);
|
||||||
assertThat(childLbConfig.lbPolicy.getProvider().getPolicyName()).isEqualTo("round_robin");
|
assertThat(
|
||||||
|
GracefulSwitchLoadBalancerAccessor.getChildProvider(childLbConfig.lbConfig).getPolicyName())
|
||||||
|
.isEqualTo("round_robin");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -194,9 +197,12 @@ public class CdsLoadBalancer2Test {
|
||||||
DiscoveryMechanism instance = Iterables.getOnlyElement(childLbConfig.discoveryMechanisms);
|
DiscoveryMechanism instance = Iterables.getOnlyElement(childLbConfig.discoveryMechanisms);
|
||||||
assertDiscoveryMechanism(instance, CLUSTER, DiscoveryMechanism.Type.LOGICAL_DNS, null,
|
assertDiscoveryMechanism(instance, CLUSTER, DiscoveryMechanism.Type.LOGICAL_DNS, null,
|
||||||
DNS_HOST_NAME, LRS_SERVER_INFO, 100L, upstreamTlsContext, null);
|
DNS_HOST_NAME, LRS_SERVER_INFO, 100L, upstreamTlsContext, null);
|
||||||
assertThat(childLbConfig.lbPolicy.getProvider().getPolicyName())
|
assertThat(
|
||||||
|
GracefulSwitchLoadBalancerAccessor.getChildProvider(childLbConfig.lbConfig).getPolicyName())
|
||||||
.isEqualTo("least_request_experimental");
|
.isEqualTo("least_request_experimental");
|
||||||
assertThat(((LeastRequestConfig) childLbConfig.lbPolicy.getConfig()).choiceCount).isEqualTo(3);
|
LeastRequestConfig lrConfig = (LeastRequestConfig)
|
||||||
|
GracefulSwitchLoadBalancerAccessor.getChildConfig(childLbConfig.lbConfig);
|
||||||
|
assertThat(lrConfig.choiceCount).isEqualTo(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -303,10 +309,13 @@ public class CdsLoadBalancer2Test {
|
||||||
upstreamTlsContext, outlierDetection);
|
upstreamTlsContext, outlierDetection);
|
||||||
assertDiscoveryMechanism(childLbConfig.discoveryMechanisms.get(2), cluster4,
|
assertDiscoveryMechanism(childLbConfig.discoveryMechanisms.get(2), cluster4,
|
||||||
DiscoveryMechanism.Type.EDS, null, null, LRS_SERVER_INFO, 300L, null, outlierDetection);
|
DiscoveryMechanism.Type.EDS, null, null, LRS_SERVER_INFO, 300L, null, outlierDetection);
|
||||||
assertThat(childLbConfig.lbPolicy.getProvider().getPolicyName())
|
assertThat(
|
||||||
|
GracefulSwitchLoadBalancerAccessor.getChildProvider(childLbConfig.lbConfig).getPolicyName())
|
||||||
.isEqualTo("ring_hash_experimental"); // dominated by top-level cluster's config
|
.isEqualTo("ring_hash_experimental"); // dominated by top-level cluster's config
|
||||||
assertThat(((RingHashConfig) childLbConfig.lbPolicy.getConfig()).minRingSize).isEqualTo(100L);
|
RingHashConfig ringHashConfig = (RingHashConfig)
|
||||||
assertThat(((RingHashConfig) childLbConfig.lbPolicy.getConfig()).maxRingSize).isEqualTo(1000L);
|
GracefulSwitchLoadBalancerAccessor.getChildConfig(childLbConfig.lbConfig);
|
||||||
|
assertThat(ringHashConfig.minRingSize).isEqualTo(100L);
|
||||||
|
assertThat(ringHashConfig.maxRingSize).isEqualTo(1000L);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -665,9 +674,9 @@ public class CdsLoadBalancer2Test {
|
||||||
xdsClient.deliverCdsUpdate(CLUSTER,
|
xdsClient.deliverCdsUpdate(CLUSTER,
|
||||||
CdsUpdate.forEds(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO, 100L, upstreamTlsContext,
|
CdsUpdate.forEds(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO, 100L, upstreamTlsContext,
|
||||||
outlierDetection)
|
outlierDetection)
|
||||||
.lbPolicyConfig(ImmutableMap.of("unknown", ImmutableMap.of("foo", "bar"))).build());
|
.lbPolicyConfig(ImmutableMap.of("unknownLb", ImmutableMap.of("foo", "bar"))).build());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
assertThat(e).hasMessageThat().contains("No provider available");
|
assertThat(e).hasMessageThat().contains("unknownLb");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
fail("Expected the unknown LB to cause an exception");
|
fail("Expected the unknown LB to cause an exception");
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,6 @@ import io.grpc.SynchronizationContext;
|
||||||
import io.grpc.internal.FakeClock;
|
import io.grpc.internal.FakeClock;
|
||||||
import io.grpc.internal.ObjectPool;
|
import io.grpc.internal.ObjectPool;
|
||||||
import io.grpc.internal.PickSubchannelArgsImpl;
|
import io.grpc.internal.PickSubchannelArgsImpl;
|
||||||
import io.grpc.internal.ServiceConfigUtil.PolicySelection;
|
|
||||||
import io.grpc.protobuf.ProtoUtils;
|
import io.grpc.protobuf.ProtoUtils;
|
||||||
import io.grpc.testing.TestMethodDescriptors;
|
import io.grpc.testing.TestMethodDescriptors;
|
||||||
import io.grpc.util.GracefulSwitchLoadBalancer;
|
import io.grpc.util.GracefulSwitchLoadBalancer;
|
||||||
|
|
@ -178,8 +177,9 @@ public class ClusterImplLoadBalancerTest {
|
||||||
Object weightedTargetConfig = new Object();
|
Object weightedTargetConfig = new Object();
|
||||||
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
||||||
null, Collections.<DropOverload>emptyList(),
|
null, Collections.<DropOverload>emptyList(),
|
||||||
new PolicySelection(weightedTargetProvider, weightedTargetConfig), null,
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
Collections.emptyMap());
|
weightedTargetProvider, weightedTargetConfig),
|
||||||
|
null, Collections.emptyMap());
|
||||||
EquivalentAddressGroup endpoint = makeAddress("endpoint-addr", locality);
|
EquivalentAddressGroup endpoint = makeAddress("endpoint-addr", locality);
|
||||||
deliverAddressesAndConfig(Collections.singletonList(endpoint), config);
|
deliverAddressesAndConfig(Collections.singletonList(endpoint), config);
|
||||||
FakeLoadBalancer childBalancer = Iterables.getOnlyElement(downstreamBalancers);
|
FakeLoadBalancer childBalancer = Iterables.getOnlyElement(downstreamBalancers);
|
||||||
|
|
@ -204,8 +204,9 @@ public class ClusterImplLoadBalancerTest {
|
||||||
ClusterImplConfig configWithWeightedTarget = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME,
|
ClusterImplConfig configWithWeightedTarget = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME,
|
||||||
LRS_SERVER_INFO,
|
LRS_SERVER_INFO,
|
||||||
null, Collections.<DropOverload>emptyList(),
|
null, Collections.<DropOverload>emptyList(),
|
||||||
new PolicySelection(weightedTargetProvider, weightedTargetConfig), null,
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
Collections.emptyMap());
|
weightedTargetProvider, weightedTargetConfig),
|
||||||
|
null, Collections.emptyMap());
|
||||||
EquivalentAddressGroup endpoint = makeAddress("endpoint-addr", locality);
|
EquivalentAddressGroup endpoint = makeAddress("endpoint-addr", locality);
|
||||||
deliverAddressesAndConfig(Collections.singletonList(endpoint), configWithWeightedTarget);
|
deliverAddressesAndConfig(Collections.singletonList(endpoint), configWithWeightedTarget);
|
||||||
FakeLoadBalancer childBalancer = Iterables.getOnlyElement(downstreamBalancers);
|
FakeLoadBalancer childBalancer = Iterables.getOnlyElement(downstreamBalancers);
|
||||||
|
|
@ -218,8 +219,9 @@ public class ClusterImplLoadBalancerTest {
|
||||||
ClusterImplConfig configWithWrrLocality = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME,
|
ClusterImplConfig configWithWrrLocality = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME,
|
||||||
LRS_SERVER_INFO,
|
LRS_SERVER_INFO,
|
||||||
null, Collections.<DropOverload>emptyList(),
|
null, Collections.<DropOverload>emptyList(),
|
||||||
new PolicySelection(wrrLocalityProvider, wrrLocalityConfig), null,
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
Collections.emptyMap());
|
wrrLocalityProvider, wrrLocalityConfig),
|
||||||
|
null, Collections.emptyMap());
|
||||||
deliverAddressesAndConfig(Collections.singletonList(endpoint), configWithWrrLocality);
|
deliverAddressesAndConfig(Collections.singletonList(endpoint), configWithWrrLocality);
|
||||||
childBalancer = Iterables.getOnlyElement(downstreamBalancers);
|
childBalancer = Iterables.getOnlyElement(downstreamBalancers);
|
||||||
assertThat(childBalancer.name).isEqualTo(XdsLbPolicies.WRR_LOCALITY_POLICY_NAME);
|
assertThat(childBalancer.name).isEqualTo(XdsLbPolicies.WRR_LOCALITY_POLICY_NAME);
|
||||||
|
|
@ -243,8 +245,9 @@ public class ClusterImplLoadBalancerTest {
|
||||||
Object weightedTargetConfig = new Object();
|
Object weightedTargetConfig = new Object();
|
||||||
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
||||||
null, Collections.<DropOverload>emptyList(),
|
null, Collections.<DropOverload>emptyList(),
|
||||||
new PolicySelection(weightedTargetProvider, weightedTargetConfig), null,
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
Collections.emptyMap());
|
weightedTargetProvider, weightedTargetConfig),
|
||||||
|
null, Collections.emptyMap());
|
||||||
EquivalentAddressGroup endpoint = makeAddress("endpoint-addr", locality);
|
EquivalentAddressGroup endpoint = makeAddress("endpoint-addr", locality);
|
||||||
deliverAddressesAndConfig(Collections.singletonList(endpoint), config);
|
deliverAddressesAndConfig(Collections.singletonList(endpoint), config);
|
||||||
FakeLoadBalancer childBalancer = Iterables.getOnlyElement(downstreamBalancers);
|
FakeLoadBalancer childBalancer = Iterables.getOnlyElement(downstreamBalancers);
|
||||||
|
|
@ -263,8 +266,9 @@ public class ClusterImplLoadBalancerTest {
|
||||||
buildWeightedTargetConfig(ImmutableMap.of(locality, 10));
|
buildWeightedTargetConfig(ImmutableMap.of(locality, 10));
|
||||||
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
||||||
null, Collections.<DropOverload>emptyList(),
|
null, Collections.<DropOverload>emptyList(),
|
||||||
new PolicySelection(weightedTargetProvider, weightedTargetConfig), null,
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
Collections.emptyMap());
|
weightedTargetProvider, weightedTargetConfig),
|
||||||
|
null, Collections.emptyMap());
|
||||||
EquivalentAddressGroup endpoint = makeAddress("endpoint-addr", locality);
|
EquivalentAddressGroup endpoint = makeAddress("endpoint-addr", locality);
|
||||||
deliverAddressesAndConfig(Collections.singletonList(endpoint), config);
|
deliverAddressesAndConfig(Collections.singletonList(endpoint), config);
|
||||||
FakeLoadBalancer leafBalancer = Iterables.getOnlyElement(downstreamBalancers);
|
FakeLoadBalancer leafBalancer = Iterables.getOnlyElement(downstreamBalancers);
|
||||||
|
|
@ -290,8 +294,9 @@ public class ClusterImplLoadBalancerTest {
|
||||||
buildWeightedTargetConfig(ImmutableMap.of(locality, 10));
|
buildWeightedTargetConfig(ImmutableMap.of(locality, 10));
|
||||||
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
||||||
null, Collections.<DropOverload>emptyList(),
|
null, Collections.<DropOverload>emptyList(),
|
||||||
new PolicySelection(weightedTargetProvider, weightedTargetConfig), null,
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
Collections.emptyMap());
|
weightedTargetProvider, weightedTargetConfig),
|
||||||
|
null, Collections.emptyMap());
|
||||||
EquivalentAddressGroup endpoint = makeAddress("endpoint-addr", locality);
|
EquivalentAddressGroup endpoint = makeAddress("endpoint-addr", locality);
|
||||||
deliverAddressesAndConfig(Collections.singletonList(endpoint), config);
|
deliverAddressesAndConfig(Collections.singletonList(endpoint), config);
|
||||||
FakeLoadBalancer leafBalancer = Iterables.getOnlyElement(downstreamBalancers);
|
FakeLoadBalancer leafBalancer = Iterables.getOnlyElement(downstreamBalancers);
|
||||||
|
|
@ -375,8 +380,9 @@ public class ClusterImplLoadBalancerTest {
|
||||||
buildWeightedTargetConfig(ImmutableMap.of(locality, 10));
|
buildWeightedTargetConfig(ImmutableMap.of(locality, 10));
|
||||||
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
||||||
null, Collections.singletonList(DropOverload.create("throttle", 500_000)),
|
null, Collections.singletonList(DropOverload.create("throttle", 500_000)),
|
||||||
new PolicySelection(weightedTargetProvider, weightedTargetConfig), null,
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
Collections.emptyMap());
|
weightedTargetProvider, weightedTargetConfig),
|
||||||
|
null, Collections.emptyMap());
|
||||||
EquivalentAddressGroup endpoint = makeAddress("endpoint-addr", locality);
|
EquivalentAddressGroup endpoint = makeAddress("endpoint-addr", locality);
|
||||||
deliverAddressesAndConfig(Collections.singletonList(endpoint), config);
|
deliverAddressesAndConfig(Collections.singletonList(endpoint), config);
|
||||||
when(mockRandom.nextInt(anyInt())).thenReturn(499_999, 999_999, 1_000_000);
|
when(mockRandom.nextInt(anyInt())).thenReturn(499_999, 999_999, 1_000_000);
|
||||||
|
|
@ -405,8 +411,9 @@ public class ClusterImplLoadBalancerTest {
|
||||||
// Config update updates drop policies.
|
// Config update updates drop policies.
|
||||||
config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO, null,
|
config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO, null,
|
||||||
Collections.singletonList(DropOverload.create("lb", 1_000_000)),
|
Collections.singletonList(DropOverload.create("lb", 1_000_000)),
|
||||||
new PolicySelection(weightedTargetProvider, weightedTargetConfig), null,
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
Collections.emptyMap());
|
weightedTargetProvider, weightedTargetConfig),
|
||||||
|
null, Collections.emptyMap());
|
||||||
loadBalancer.acceptResolvedAddresses(
|
loadBalancer.acceptResolvedAddresses(
|
||||||
ResolvedAddresses.newBuilder()
|
ResolvedAddresses.newBuilder()
|
||||||
.setAddresses(Collections.singletonList(endpoint))
|
.setAddresses(Collections.singletonList(endpoint))
|
||||||
|
|
@ -453,8 +460,9 @@ public class ClusterImplLoadBalancerTest {
|
||||||
buildWeightedTargetConfig(ImmutableMap.of(locality, 10));
|
buildWeightedTargetConfig(ImmutableMap.of(locality, 10));
|
||||||
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
||||||
maxConcurrentRequests, Collections.<DropOverload>emptyList(),
|
maxConcurrentRequests, Collections.<DropOverload>emptyList(),
|
||||||
new PolicySelection(weightedTargetProvider, weightedTargetConfig), null,
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
Collections.emptyMap());
|
weightedTargetProvider, weightedTargetConfig),
|
||||||
|
null, Collections.emptyMap());
|
||||||
EquivalentAddressGroup endpoint = makeAddress("endpoint-addr", locality);
|
EquivalentAddressGroup endpoint = makeAddress("endpoint-addr", locality);
|
||||||
deliverAddressesAndConfig(Collections.singletonList(endpoint), config);
|
deliverAddressesAndConfig(Collections.singletonList(endpoint), config);
|
||||||
assertThat(downstreamBalancers).hasSize(1); // one leaf balancer
|
assertThat(downstreamBalancers).hasSize(1); // one leaf balancer
|
||||||
|
|
@ -496,8 +504,9 @@ public class ClusterImplLoadBalancerTest {
|
||||||
maxConcurrentRequests = 101L;
|
maxConcurrentRequests = 101L;
|
||||||
config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
||||||
maxConcurrentRequests, Collections.<DropOverload>emptyList(),
|
maxConcurrentRequests, Collections.<DropOverload>emptyList(),
|
||||||
new PolicySelection(weightedTargetProvider, weightedTargetConfig), null,
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
Collections.emptyMap());
|
weightedTargetProvider, weightedTargetConfig),
|
||||||
|
null, Collections.emptyMap());
|
||||||
deliverAddressesAndConfig(Collections.singletonList(endpoint), config);
|
deliverAddressesAndConfig(Collections.singletonList(endpoint), config);
|
||||||
|
|
||||||
result = currentPicker.pickSubchannel(pickSubchannelArgs);
|
result = currentPicker.pickSubchannel(pickSubchannelArgs);
|
||||||
|
|
@ -543,8 +552,9 @@ public class ClusterImplLoadBalancerTest {
|
||||||
buildWeightedTargetConfig(ImmutableMap.of(locality, 10));
|
buildWeightedTargetConfig(ImmutableMap.of(locality, 10));
|
||||||
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
||||||
null, Collections.<DropOverload>emptyList(),
|
null, Collections.<DropOverload>emptyList(),
|
||||||
new PolicySelection(weightedTargetProvider, weightedTargetConfig), null,
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
Collections.emptyMap());
|
weightedTargetProvider, weightedTargetConfig),
|
||||||
|
null, Collections.emptyMap());
|
||||||
EquivalentAddressGroup endpoint = makeAddress("endpoint-addr", locality);
|
EquivalentAddressGroup endpoint = makeAddress("endpoint-addr", locality);
|
||||||
deliverAddressesAndConfig(Collections.singletonList(endpoint), config);
|
deliverAddressesAndConfig(Collections.singletonList(endpoint), config);
|
||||||
assertThat(downstreamBalancers).hasSize(1); // one leaf balancer
|
assertThat(downstreamBalancers).hasSize(1); // one leaf balancer
|
||||||
|
|
@ -590,8 +600,9 @@ public class ClusterImplLoadBalancerTest {
|
||||||
buildWeightedTargetConfig(ImmutableMap.of(locality, 10));
|
buildWeightedTargetConfig(ImmutableMap.of(locality, 10));
|
||||||
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
||||||
null, Collections.<DropOverload>emptyList(),
|
null, Collections.<DropOverload>emptyList(),
|
||||||
new PolicySelection(weightedTargetProvider, weightedTargetConfig), null,
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
Collections.emptyMap());
|
weightedTargetProvider, weightedTargetConfig),
|
||||||
|
null, Collections.emptyMap());
|
||||||
// One locality with two endpoints.
|
// One locality with two endpoints.
|
||||||
EquivalentAddressGroup endpoint1 = makeAddress("endpoint-addr1", locality);
|
EquivalentAddressGroup endpoint1 = makeAddress("endpoint-addr1", locality);
|
||||||
EquivalentAddressGroup endpoint2 = makeAddress("endpoint-addr2", locality);
|
EquivalentAddressGroup endpoint2 = makeAddress("endpoint-addr2", locality);
|
||||||
|
|
@ -628,8 +639,9 @@ public class ClusterImplLoadBalancerTest {
|
||||||
buildWeightedTargetConfig(ImmutableMap.of(locality, 10));
|
buildWeightedTargetConfig(ImmutableMap.of(locality, 10));
|
||||||
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
ClusterImplConfig config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
||||||
null, Collections.<DropOverload>emptyList(),
|
null, Collections.<DropOverload>emptyList(),
|
||||||
new PolicySelection(weightedTargetProvider, weightedTargetConfig), upstreamTlsContext,
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
Collections.emptyMap());
|
weightedTargetProvider, weightedTargetConfig),
|
||||||
|
upstreamTlsContext, Collections.emptyMap());
|
||||||
// One locality with two endpoints.
|
// One locality with two endpoints.
|
||||||
EquivalentAddressGroup endpoint1 = makeAddress("endpoint-addr1", locality);
|
EquivalentAddressGroup endpoint1 = makeAddress("endpoint-addr1", locality);
|
||||||
EquivalentAddressGroup endpoint2 = makeAddress("endpoint-addr2", locality);
|
EquivalentAddressGroup endpoint2 = makeAddress("endpoint-addr2", locality);
|
||||||
|
|
@ -652,8 +664,9 @@ public class ClusterImplLoadBalancerTest {
|
||||||
// Removes UpstreamTlsContext from the config.
|
// Removes UpstreamTlsContext from the config.
|
||||||
config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
||||||
null, Collections.<DropOverload>emptyList(),
|
null, Collections.<DropOverload>emptyList(),
|
||||||
new PolicySelection(weightedTargetProvider, weightedTargetConfig), null,
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
Collections.emptyMap());
|
weightedTargetProvider, weightedTargetConfig),
|
||||||
|
null, Collections.emptyMap());
|
||||||
deliverAddressesAndConfig(Arrays.asList(endpoint1, endpoint2), config);
|
deliverAddressesAndConfig(Arrays.asList(endpoint1, endpoint2), config);
|
||||||
assertThat(Iterables.getOnlyElement(downstreamBalancers)).isSameInstanceAs(leafBalancer);
|
assertThat(Iterables.getOnlyElement(downstreamBalancers)).isSameInstanceAs(leafBalancer);
|
||||||
subchannel = leafBalancer.helper.createSubchannel(args); // creates new connections
|
subchannel = leafBalancer.helper.createSubchannel(args); // creates new connections
|
||||||
|
|
@ -667,8 +680,9 @@ public class ClusterImplLoadBalancerTest {
|
||||||
CommonTlsContextTestsUtil.buildUpstreamTlsContext("google_cloud_private_spiffe1", true);
|
CommonTlsContextTestsUtil.buildUpstreamTlsContext("google_cloud_private_spiffe1", true);
|
||||||
config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
config = new ClusterImplConfig(CLUSTER, EDS_SERVICE_NAME, LRS_SERVER_INFO,
|
||||||
null, Collections.<DropOverload>emptyList(),
|
null, Collections.<DropOverload>emptyList(),
|
||||||
new PolicySelection(weightedTargetProvider, weightedTargetConfig), upstreamTlsContext,
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
Collections.emptyMap());
|
weightedTargetProvider, weightedTargetConfig),
|
||||||
|
upstreamTlsContext, Collections.emptyMap());
|
||||||
deliverAddressesAndConfig(Arrays.asList(endpoint1, endpoint2), config);
|
deliverAddressesAndConfig(Arrays.asList(endpoint1, endpoint2), config);
|
||||||
assertThat(Iterables.getOnlyElement(downstreamBalancers)).isSameInstanceAs(leafBalancer);
|
assertThat(Iterables.getOnlyElement(downstreamBalancers)).isSameInstanceAs(leafBalancer);
|
||||||
subchannel = leafBalancer.helper.createSubchannel(args); // creates new connections
|
subchannel = leafBalancer.helper.createSubchannel(args); // creates new connections
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,6 @@ import io.grpc.internal.FakeClock;
|
||||||
import io.grpc.internal.FakeClock.ScheduledTask;
|
import io.grpc.internal.FakeClock.ScheduledTask;
|
||||||
import io.grpc.internal.GrpcUtil;
|
import io.grpc.internal.GrpcUtil;
|
||||||
import io.grpc.internal.ObjectPool;
|
import io.grpc.internal.ObjectPool;
|
||||||
import io.grpc.internal.ServiceConfigUtil.PolicySelection;
|
|
||||||
import io.grpc.util.GracefulSwitchLoadBalancer;
|
import io.grpc.util.GracefulSwitchLoadBalancer;
|
||||||
import io.grpc.util.GracefulSwitchLoadBalancerAccessor;
|
import io.grpc.util.GracefulSwitchLoadBalancerAccessor;
|
||||||
import io.grpc.util.OutlierDetectionLoadBalancer.OutlierDetectionLoadBalancerConfig;
|
import io.grpc.util.OutlierDetectionLoadBalancer.OutlierDetectionLoadBalancerConfig;
|
||||||
|
|
@ -159,13 +158,13 @@ public class ClusterResolverLoadBalancerTest {
|
||||||
private final FakeClock fakeClock = new FakeClock();
|
private final FakeClock fakeClock = new FakeClock();
|
||||||
private final LoadBalancerRegistry lbRegistry = new LoadBalancerRegistry();
|
private final LoadBalancerRegistry lbRegistry = new LoadBalancerRegistry();
|
||||||
private final NameResolverRegistry nsRegistry = new NameResolverRegistry();
|
private final NameResolverRegistry nsRegistry = new NameResolverRegistry();
|
||||||
private final PolicySelection roundRobin = new PolicySelection(
|
private final Object roundRobin = GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
new FakeLoadBalancerProvider("wrr_locality_experimental"), new WrrLocalityConfig(
|
new FakeLoadBalancerProvider("wrr_locality_experimental"), new WrrLocalityConfig(
|
||||||
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
new FakeLoadBalancerProvider("round_robin"), null)));
|
new FakeLoadBalancerProvider("round_robin"), null)));
|
||||||
private final PolicySelection ringHash = new PolicySelection(
|
private final Object ringHash = GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
new FakeLoadBalancerProvider("ring_hash_experimental"), new RingHashConfig(10L, 100L));
|
new FakeLoadBalancerProvider("ring_hash_experimental"), new RingHashConfig(10L, 100L));
|
||||||
private final PolicySelection leastRequest = new PolicySelection(
|
private final Object leastRequest = GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
new FakeLoadBalancerProvider("wrr_locality_experimental"), new WrrLocalityConfig(
|
new FakeLoadBalancerProvider("wrr_locality_experimental"), new WrrLocalityConfig(
|
||||||
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
|
||||||
new FakeLoadBalancerProvider("least_request_experimental"),
|
new FakeLoadBalancerProvider("least_request_experimental"),
|
||||||
|
|
@ -293,8 +292,8 @@ public class ClusterResolverLoadBalancerTest {
|
||||||
(ClusterImplConfig) priorityChildConfig.policySelection.getConfig();
|
(ClusterImplConfig) priorityChildConfig.policySelection.getConfig();
|
||||||
assertClusterImplConfig(clusterImplConfig, CLUSTER1, EDS_SERVICE_NAME1, LRS_SERVER_INFO, 100L,
|
assertClusterImplConfig(clusterImplConfig, CLUSTER1, EDS_SERVICE_NAME1, LRS_SERVER_INFO, 100L,
|
||||||
tlsContext, Collections.<DropOverload>emptyList(), "ring_hash_experimental");
|
tlsContext, Collections.<DropOverload>emptyList(), "ring_hash_experimental");
|
||||||
RingHashConfig ringHashConfig =
|
RingHashConfig ringHashConfig = (RingHashConfig)
|
||||||
(RingHashConfig) clusterImplConfig.childPolicy.getConfig();
|
GracefulSwitchLoadBalancerAccessor.getChildConfig(clusterImplConfig.childConfig);
|
||||||
assertThat(ringHashConfig.minRingSize).isEqualTo(10L);
|
assertThat(ringHashConfig.minRingSize).isEqualTo(10L);
|
||||||
assertThat(ringHashConfig.maxRingSize).isEqualTo(100L);
|
assertThat(ringHashConfig.maxRingSize).isEqualTo(100L);
|
||||||
}
|
}
|
||||||
|
|
@ -333,8 +332,8 @@ public class ClusterResolverLoadBalancerTest {
|
||||||
(ClusterImplConfig) priorityChildConfig.policySelection.getConfig();
|
(ClusterImplConfig) priorityChildConfig.policySelection.getConfig();
|
||||||
assertClusterImplConfig(clusterImplConfig, CLUSTER1, EDS_SERVICE_NAME1, LRS_SERVER_INFO, 100L,
|
assertClusterImplConfig(clusterImplConfig, CLUSTER1, EDS_SERVICE_NAME1, LRS_SERVER_INFO, 100L,
|
||||||
tlsContext, Collections.<DropOverload>emptyList(), WRR_LOCALITY_POLICY_NAME);
|
tlsContext, Collections.<DropOverload>emptyList(), WRR_LOCALITY_POLICY_NAME);
|
||||||
WrrLocalityConfig wrrLocalityConfig =
|
WrrLocalityConfig wrrLocalityConfig = (WrrLocalityConfig)
|
||||||
(WrrLocalityConfig) clusterImplConfig.childPolicy.getConfig();
|
GracefulSwitchLoadBalancerAccessor.getChildConfig(clusterImplConfig.childConfig);
|
||||||
LoadBalancerProvider childProvider =
|
LoadBalancerProvider childProvider =
|
||||||
GracefulSwitchLoadBalancerAccessor.getChildProvider(wrrLocalityConfig.childConfig);
|
GracefulSwitchLoadBalancerAccessor.getChildProvider(wrrLocalityConfig.childConfig);
|
||||||
assertThat(childProvider.getPolicyName()).isEqualTo("least_request_experimental");
|
assertThat(childProvider.getPolicyName()).isEqualTo("least_request_experimental");
|
||||||
|
|
@ -417,8 +416,8 @@ public class ClusterResolverLoadBalancerTest {
|
||||||
GracefulSwitchLoadBalancerAccessor.getChildConfig(outlierDetectionConfig.childConfig);
|
GracefulSwitchLoadBalancerAccessor.getChildConfig(outlierDetectionConfig.childConfig);
|
||||||
assertClusterImplConfig(clusterImplConfig, CLUSTER1, EDS_SERVICE_NAME1, LRS_SERVER_INFO, 100L,
|
assertClusterImplConfig(clusterImplConfig, CLUSTER1, EDS_SERVICE_NAME1, LRS_SERVER_INFO, 100L,
|
||||||
tlsContext, Collections.<DropOverload>emptyList(), WRR_LOCALITY_POLICY_NAME);
|
tlsContext, Collections.<DropOverload>emptyList(), WRR_LOCALITY_POLICY_NAME);
|
||||||
WrrLocalityConfig wrrLocalityConfig =
|
WrrLocalityConfig wrrLocalityConfig = (WrrLocalityConfig)
|
||||||
(WrrLocalityConfig) clusterImplConfig.childPolicy.getConfig();
|
GracefulSwitchLoadBalancerAccessor.getChildConfig(clusterImplConfig.childConfig);
|
||||||
LoadBalancerProvider childProvider =
|
LoadBalancerProvider childProvider =
|
||||||
GracefulSwitchLoadBalancerAccessor.getChildProvider(wrrLocalityConfig.childConfig);
|
GracefulSwitchLoadBalancerAccessor.getChildProvider(wrrLocalityConfig.childConfig);
|
||||||
assertThat(childProvider.getPolicyName()).isEqualTo("least_request_experimental");
|
assertThat(childProvider.getPolicyName()).isEqualTo("least_request_experimental");
|
||||||
|
|
@ -487,9 +486,8 @@ public class ClusterResolverLoadBalancerTest {
|
||||||
(ClusterImplConfig) priorityChildConfig1.policySelection.getConfig();
|
(ClusterImplConfig) priorityChildConfig1.policySelection.getConfig();
|
||||||
assertClusterImplConfig(clusterImplConfig1, CLUSTER2, EDS_SERVICE_NAME2, LRS_SERVER_INFO, 200L,
|
assertClusterImplConfig(clusterImplConfig1, CLUSTER2, EDS_SERVICE_NAME2, LRS_SERVER_INFO, 200L,
|
||||||
tlsContext, Collections.<DropOverload>emptyList(), WRR_LOCALITY_POLICY_NAME);
|
tlsContext, Collections.<DropOverload>emptyList(), WRR_LOCALITY_POLICY_NAME);
|
||||||
assertThat(clusterImplConfig1.childPolicy.getConfig()).isInstanceOf(WrrLocalityConfig.class);
|
WrrLocalityConfig wrrLocalityConfig1 = (WrrLocalityConfig)
|
||||||
WrrLocalityConfig wrrLocalityConfig1 =
|
GracefulSwitchLoadBalancerAccessor.getChildConfig(clusterImplConfig1.childConfig);
|
||||||
(WrrLocalityConfig) clusterImplConfig1.childPolicy.getConfig();
|
|
||||||
LoadBalancerProvider childProvider1 =
|
LoadBalancerProvider childProvider1 =
|
||||||
GracefulSwitchLoadBalancerAccessor.getChildProvider(wrrLocalityConfig1.childConfig);
|
GracefulSwitchLoadBalancerAccessor.getChildProvider(wrrLocalityConfig1.childConfig);
|
||||||
assertThat(childProvider1.getPolicyName()).isEqualTo("round_robin");
|
assertThat(childProvider1.getPolicyName()).isEqualTo("round_robin");
|
||||||
|
|
@ -502,9 +500,8 @@ public class ClusterResolverLoadBalancerTest {
|
||||||
(ClusterImplConfig) priorityChildConfig2.policySelection.getConfig();
|
(ClusterImplConfig) priorityChildConfig2.policySelection.getConfig();
|
||||||
assertClusterImplConfig(clusterImplConfig2, CLUSTER2, EDS_SERVICE_NAME2, LRS_SERVER_INFO, 200L,
|
assertClusterImplConfig(clusterImplConfig2, CLUSTER2, EDS_SERVICE_NAME2, LRS_SERVER_INFO, 200L,
|
||||||
tlsContext, Collections.<DropOverload>emptyList(), WRR_LOCALITY_POLICY_NAME);
|
tlsContext, Collections.<DropOverload>emptyList(), WRR_LOCALITY_POLICY_NAME);
|
||||||
assertThat(clusterImplConfig2.childPolicy.getConfig()).isInstanceOf(WrrLocalityConfig.class);
|
WrrLocalityConfig wrrLocalityConfig2 = (WrrLocalityConfig)
|
||||||
WrrLocalityConfig wrrLocalityConfig2 =
|
GracefulSwitchLoadBalancerAccessor.getChildConfig(clusterImplConfig1.childConfig);
|
||||||
(WrrLocalityConfig) clusterImplConfig1.childPolicy.getConfig();
|
|
||||||
LoadBalancerProvider childProvider2 =
|
LoadBalancerProvider childProvider2 =
|
||||||
GracefulSwitchLoadBalancerAccessor.getChildProvider(wrrLocalityConfig2.childConfig);
|
GracefulSwitchLoadBalancerAccessor.getChildProvider(wrrLocalityConfig2.childConfig);
|
||||||
assertThat(childProvider2.getPolicyName()).isEqualTo("round_robin");
|
assertThat(childProvider2.getPolicyName()).isEqualTo("round_robin");
|
||||||
|
|
@ -517,9 +514,8 @@ public class ClusterResolverLoadBalancerTest {
|
||||||
(ClusterImplConfig) priorityChildConfig3.policySelection.getConfig();
|
(ClusterImplConfig) priorityChildConfig3.policySelection.getConfig();
|
||||||
assertClusterImplConfig(clusterImplConfig3, CLUSTER1, EDS_SERVICE_NAME1, LRS_SERVER_INFO, 100L,
|
assertClusterImplConfig(clusterImplConfig3, CLUSTER1, EDS_SERVICE_NAME1, LRS_SERVER_INFO, 100L,
|
||||||
tlsContext, Collections.<DropOverload>emptyList(), WRR_LOCALITY_POLICY_NAME);
|
tlsContext, Collections.<DropOverload>emptyList(), WRR_LOCALITY_POLICY_NAME);
|
||||||
assertThat(clusterImplConfig3.childPolicy.getConfig()).isInstanceOf(WrrLocalityConfig.class);
|
WrrLocalityConfig wrrLocalityConfig3 = (WrrLocalityConfig)
|
||||||
WrrLocalityConfig wrrLocalityConfig3 =
|
GracefulSwitchLoadBalancerAccessor.getChildConfig(clusterImplConfig1.childConfig);
|
||||||
(WrrLocalityConfig) clusterImplConfig1.childPolicy.getConfig();
|
|
||||||
LoadBalancerProvider childProvider3 =
|
LoadBalancerProvider childProvider3 =
|
||||||
GracefulSwitchLoadBalancerAccessor.getChildProvider(wrrLocalityConfig3.childConfig);
|
GracefulSwitchLoadBalancerAccessor.getChildProvider(wrrLocalityConfig3.childConfig);
|
||||||
assertThat(childProvider3.getPolicyName()).isEqualTo("round_robin");
|
assertThat(childProvider3.getPolicyName()).isEqualTo("round_robin");
|
||||||
|
|
@ -1148,7 +1144,9 @@ public class ClusterResolverLoadBalancerTest {
|
||||||
assertThat(config.maxConcurrentRequests).isEqualTo(maxConcurrentRequests);
|
assertThat(config.maxConcurrentRequests).isEqualTo(maxConcurrentRequests);
|
||||||
assertThat(config.tlsContext).isEqualTo(tlsContext);
|
assertThat(config.tlsContext).isEqualTo(tlsContext);
|
||||||
assertThat(config.dropCategories).isEqualTo(dropCategories);
|
assertThat(config.dropCategories).isEqualTo(dropCategories);
|
||||||
assertThat(config.childPolicy.getProvider().getPolicyName()).isEqualTo(childPolicy);
|
assertThat(
|
||||||
|
GracefulSwitchLoadBalancerAccessor.getChildProvider(config.childConfig).getPolicyName())
|
||||||
|
.isEqualTo(childPolicy);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Asserts two list of EAGs contains same addresses, regardless of attributes. */
|
/** Asserts two list of EAGs contains same addresses, regardless of attributes. */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue