Skip to content

Commit d92902d

Browse files
committed
in-progress changes.
1 parent ad9b1b3 commit d92902d

File tree

3 files changed

+25
-61
lines changed

3 files changed

+25
-61
lines changed

xds/src/main/java/io/grpc/xds/CdsLoadBalancer2.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import static com.google.common.base.Preconditions.checkNotNull;
2020
import static io.grpc.ConnectivityState.TRANSIENT_FAILURE;
21+
import static io.grpc.xds.XdsLbPolicies.CDS_POLICY_NAME;
2122
import static io.grpc.xds.XdsLbPolicies.CLUSTER_RESOLVER_POLICY_NAME;
2223
import static io.grpc.xds.XdsLbPolicies.PRIORITY_POLICY_NAME;
2324
import static java.util.Objects.requireNonNull;
@@ -155,9 +156,12 @@ public Status acceptResolvedAddresses(ResolvedAddresses resolvedAddresses) {
155156
}
156157
Map<String, PriorityChildConfig> priorityChildConfigs = new HashMap<>();
157158
for (String childCluster: requireNonNull(clusterConfig.getClusterResource().prioritizedClusterNames())) {
158-
priorityChildConfigs.put(childCluster, new PriorityChildConfig(
159-
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
160-
priorityLbProvider, getCdsPolicyConfig(childCluster)), false));
159+
priorityChildConfigs.put(childCluster,
160+
new PriorityChildConfig(
161+
GracefulSwitchLoadBalancer.createLoadBalancingPolicyConfig(
162+
lbRegistry.getProvider(CDS_POLICY_NAME),
163+
new CdsConfig(childCluster)),
164+
false));
161165
}
162166
childConfig = new PriorityLoadBalancerProvider.PriorityLbConfig(
163167
Collections.unmodifiableMap(priorityChildConfigs),
@@ -173,14 +177,6 @@ public Status acceptResolvedAddresses(ResolvedAddresses resolvedAddresses) {
173177
resolvedAddresses.toBuilder().setLoadBalancingPolicyConfig(childConfig).build());
174178
}
175179

176-
private String getCdsPolicyConfig(String cluster) {
177-
return String.format("{\n" +
178-
" \"cds_experimental\": {\n" +
179-
" \"cluster\": \"%s\"\n" +
180-
" }\n" +
181-
" }\n", cluster);
182-
}
183-
184180
@Override
185181
public void handleNameResolutionError(Status error) {
186182
logger.log(XdsLogLevel.WARNING, "Received name resolution error: {0}", error);

xds/src/main/java/io/grpc/xds/PriorityLoadBalancer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public Status acceptResolvedAddresses(ResolvedAddresses resolvedAddresses) {
8888
logger.log(XdsLogLevel.DEBUG, "Received resolution result: {0}", resolvedAddresses);
8989
this.resolvedAddresses = resolvedAddresses;
9090
PriorityLbConfig config = (PriorityLbConfig) resolvedAddresses.getLoadBalancingPolicyConfig();
91-
checkNotNull(config, "missing priority lb config");
91+
checkNotNull(config, "missing priority lb config");
9292
priorityNames = config.priorities;
9393
priorityConfigs = config.childConfigs;
9494
Status status = Status.OK;

xds/src/test/java/io/grpc/xds/CdsLoadBalancer2Test.java

Lines changed: 17 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import static com.google.common.truth.Truth.assertThat;
2020
import static io.grpc.xds.XdsLbPolicies.CLUSTER_RESOLVER_POLICY_NAME;
21+
import static io.grpc.xds.XdsLbPolicies.PRIORITY_POLICY_NAME;
2122
import static io.grpc.xds.XdsTestControlPlaneService.ADS_TYPE_URL_CDS;
2223
import static io.grpc.xds.XdsTestControlPlaneService.ADS_TYPE_URL_EDS;
2324
import static io.grpc.xds.XdsTestControlPlaneService.ADS_TYPE_URL_LDS;
@@ -27,6 +28,7 @@
2728
import static org.mockito.Mockito.mock;
2829
import static org.mockito.Mockito.never;
2930
import static org.mockito.Mockito.verify;
31+
import static org.mockito.Mockito.when;
3032

3133
import com.github.xds.type.v3.TypedStruct;
3234
import com.google.common.collect.ImmutableMap;
@@ -150,6 +152,8 @@ public class CdsLoadBalancer2Test {
150152
@Before
151153
public void setUp() throws Exception {
152154
lbRegistry.register(new FakeLoadBalancerProvider(CLUSTER_RESOLVER_POLICY_NAME));
155+
lbRegistry.register(new PriorityLoadBalancerProvider());
156+
lbRegistry.register(new CdsLoadBalancerProvider());
153157
lbRegistry.register(new FakeLoadBalancerProvider("round_robin"));
154158
lbRegistry.register(
155159
new FakeLoadBalancerProvider("ring_hash_experimental", new RingHashLoadBalancerProvider()));
@@ -169,6 +173,8 @@ public void setUp() throws Exception {
169173
SynchronizationContext syncContext = new SynchronizationContext((t, e) -> {
170174
throw new AssertionError(e);
171175
});
176+
when(helper.getSynchronizationContext()).thenReturn(syncContext);
177+
when(helper.getScheduledExecutorService()).thenReturn(fakeClock.getScheduledExecutorService());
172178

173179
NameResolver.Args nameResolverArgs = NameResolver.Args.newBuilder()
174180
.setDefaultPort(8080)
@@ -403,70 +409,32 @@ public void dynamicCluster() {
403409
public void discoverAggregateCluster() {
404410
String cluster1 = "cluster-01.googleapis.com";
405411
String cluster2 = "cluster-02.googleapis.com";
406-
String cluster3 = "cluster-03.googleapis.com";
407-
String cluster4 = "cluster-04.googleapis.com";
408412
controlPlaneService.setXdsConfig(ADS_TYPE_URL_CDS, ImmutableMap.of(
409-
// CLUSTER (aggr.) -> [cluster1 (aggr.), cluster2 (logical DNS), cluster3 (EDS)]
413+
// cluster1 (aggr.) -> [cluster2 (EDS), cluster3 (EDS)]
410414
CLUSTER, Cluster.newBuilder()
411415
.setName(CLUSTER)
412416
.setClusterType(Cluster.CustomClusterType.newBuilder()
413417
.setName("envoy.clusters.aggregate")
414418
.setTypedConfig(Any.pack(ClusterConfig.newBuilder()
415419
.addClusters(cluster1)
416420
.addClusters(cluster2)
417-
.addClusters(cluster3)
418421
.build())))
419-
.setLbPolicy(Cluster.LbPolicy.RING_HASH)
420-
.build(),
421-
// cluster1 (aggr.) -> [cluster3 (EDS), cluster4 (EDS)]
422-
cluster1, Cluster.newBuilder()
423-
.setName(cluster1)
424-
.setClusterType(Cluster.CustomClusterType.newBuilder()
425-
.setName("envoy.clusters.aggregate")
426-
.setTypedConfig(Any.pack(ClusterConfig.newBuilder()
427-
.addClusters(cluster3)
428-
.addClusters(cluster4)
429-
.build())))
430-
.build(),
431-
cluster2, Cluster.newBuilder()
432-
.setName(cluster2)
433-
.setType(Cluster.DiscoveryType.LOGICAL_DNS)
434-
.setLoadAssignment(ClusterLoadAssignment.newBuilder()
435-
.addEndpoints(LocalityLbEndpoints.newBuilder()
436-
.addLbEndpoints(LbEndpoint.newBuilder()
437-
.setEndpoint(Endpoint.newBuilder()
438-
.setAddress(Address.newBuilder()
439-
.setSocketAddress(SocketAddress.newBuilder()
440-
.setAddress("dns.example.com")
441-
.setPortValue(1111)))))))
442422
.build(),
443-
cluster3, EDS_CLUSTER.toBuilder()
444-
.setName(cluster3)
445-
.setCircuitBreakers(CircuitBreakers.newBuilder()
446-
.addThresholds(CircuitBreakers.Thresholds.newBuilder()
447-
.setPriority(RoutingPriority.DEFAULT)
448-
.setMaxRequests(UInt32Value.newBuilder().setValue(100))))
449-
.build(),
450-
cluster4, EDS_CLUSTER.toBuilder().setName(cluster4).build()));
423+
cluster1, EDS_CLUSTER.toBuilder().setName(cluster1).build(),
424+
cluster2, EDS_CLUSTER.toBuilder().setName(cluster2).build()));
451425
startXdsDepManager();
452426

453427
verify(helper, never()).updateBalancingState(eq(ConnectivityState.TRANSIENT_FAILURE), any());
454428
assertThat(childBalancers).hasSize(1);
455429
FakeLoadBalancer childBalancer = Iterables.getOnlyElement(childBalancers);
456-
assertThat(childBalancer.name).isEqualTo(CLUSTER_RESOLVER_POLICY_NAME);
457-
ClusterResolverConfig childLbConfig = (ClusterResolverConfig) childBalancer.config;
458-
// Clusters are resolved recursively, later duplicates removed: [cluster3, cluster4, cluster2]
459-
assertThat(childLbConfig.discoveryMechanism).isEqualTo(
460-
Arrays.asList(
461-
DiscoveryMechanism.forEds(
462-
cluster3, EDS_SERVICE_NAME, null, 100L, null, Collections.emptyMap(), null),
463-
DiscoveryMechanism.forEds(
464-
cluster4, EDS_SERVICE_NAME, null, null, null, Collections.emptyMap(), null),
465-
DiscoveryMechanism.forLogicalDns(
466-
cluster2, "dns.example.com:1111", null, null, null, Collections.emptyMap())));
467-
assertThat(
468-
GracefulSwitchLoadBalancerAccessor.getChildProvider(childLbConfig.lbConfig).getPolicyName())
469-
.isEqualTo("ring_hash_experimental"); // dominated by top-level cluster's config
430+
assertThat(childBalancer.name).isEqualTo(PRIORITY_POLICY_NAME);
431+
PriorityLoadBalancerProvider.PriorityLbConfig childLbConfig = (PriorityLoadBalancerProvider.PriorityLbConfig) childBalancer.config;
432+
assertThat(childLbConfig.priorities).hasSize(2);
433+
assertThat(childLbConfig.priorities.get(0)).isEqualTo(cluster1);
434+
assertThat(childLbConfig.priorities.get(1)).isEqualTo(cluster2);
435+
assertThat(childLbConfig.childConfigs).hasSize(2);
436+
PriorityLoadBalancerProvider.PriorityLbConfig.PriorityChildConfig childConfig1 = childLbConfig.childConfigs.get(cluster2);
437+
System.out.println(childConfig1);
470438
}
471439

472440
@Test

0 commit comments

Comments
 (0)