Skip to content

Commit 0c179e3

Browse files
authored
xds: Convert ClusterResolverLb to XdsDepManager
No longer need to hard-code pick_first because of gRFC A61. grpc/proposal#477
1 parent 4b5ce99 commit 0c179e3

File tree

7 files changed

+896
-1437
lines changed

7 files changed

+896
-1437
lines changed

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

Lines changed: 193 additions & 641 deletions
Large diffs are not rendered by default.

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.grpc.LoadBalancer;
2626
import io.grpc.LoadBalancer.Helper;
2727
import io.grpc.LoadBalancerProvider;
28+
import io.grpc.LoadBalancerRegistry;
2829
import io.grpc.NameResolver.ConfigOrError;
2930
import io.grpc.Status;
3031
import io.grpc.xds.EnvoyServerProtoData.OutlierDetection;
@@ -41,6 +42,15 @@
4142
*/
4243
@Internal
4344
public final class ClusterResolverLoadBalancerProvider extends LoadBalancerProvider {
45+
private final LoadBalancerRegistry lbRegistry;
46+
47+
public ClusterResolverLoadBalancerProvider() {
48+
this.lbRegistry = null;
49+
}
50+
51+
ClusterResolverLoadBalancerProvider(LoadBalancerRegistry lbRegistry) {
52+
this.lbRegistry = checkNotNull(lbRegistry, "lbRegistry");
53+
}
4454

4555
@Override
4656
public boolean isAvailable() {
@@ -65,7 +75,11 @@ public ConfigOrError parseLoadBalancingPolicyConfig(Map<String, ?> rawLoadBalanc
6575

6676
@Override
6777
public LoadBalancer newLoadBalancer(Helper helper) {
68-
return new ClusterResolverLoadBalancer(helper);
78+
LoadBalancerRegistry lbRegistry = this.lbRegistry;
79+
if (lbRegistry == null) {
80+
lbRegistry = LoadBalancerRegistry.getDefaultRegistry();
81+
}
82+
return new ClusterResolverLoadBalancer(helper, lbRegistry);
6983
}
7084

7185
static final class ClusterResolverConfig {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ static OutlierDetection fromEnvoyOutlierDetection(
328328
Integer minimumHosts = envoyOutlierDetection.hasSuccessRateMinimumHosts()
329329
? envoyOutlierDetection.getSuccessRateMinimumHosts().getValue() : null;
330330
Integer requestVolume = envoyOutlierDetection.hasSuccessRateRequestVolume()
331-
? envoyOutlierDetection.getSuccessRateMinimumHosts().getValue() : null;
331+
? envoyOutlierDetection.getSuccessRateRequestVolume().getValue() : null;
332332

333333
successRateEjection = SuccessRateEjection.create(stdevFactor, enforcementPercentage,
334334
minimumHosts, requestVolume);

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import io.grpc.xds.client.XdsClient;
4242
import io.grpc.xds.client.XdsClient.ResourceWatcher;
4343
import io.grpc.xds.client.XdsResourceType;
44+
import java.net.SocketAddress;
4445
import java.net.URI;
4546
import java.net.URISyntaxException;
4647
import java.util.ArrayList;
@@ -83,7 +84,7 @@ private enum TrackedWatcherTypeEnum {
8384

8485
private static final int MAX_CLUSTER_RECURSION_DEPTH = 16; // Specified by gRFC A37
8586

86-
static boolean enableLogicalDns = false;
87+
static boolean enableLogicalDns = true;
8788

8889
private final String listenerName;
8990
private final XdsClient xdsClient;
@@ -394,10 +395,13 @@ private static StatusOr<XdsEndpointResource.EdsUpdate> dnsToEdsUpdate(
394395
return StatusOr.fromStatus(dnsData.getStatus());
395396
}
396397

397-
List<Endpoints.LbEndpoint> endpoints = new ArrayList<>();
398+
List<SocketAddress> addresses = new ArrayList<>();
398399
for (EquivalentAddressGroup eag : dnsData.getValue()) {
399-
endpoints.add(Endpoints.LbEndpoint.create(eag, 1, true, dnsHostName, ImmutableMap.of()));
400+
addresses.addAll(eag.getAddresses());
400401
}
402+
EquivalentAddressGroup eag = new EquivalentAddressGroup(addresses);
403+
List<Endpoints.LbEndpoint> endpoints = ImmutableList.of(
404+
Endpoints.LbEndpoint.create(eag, 1, true, dnsHostName, ImmutableMap.of()));
401405
LocalityLbEndpoints lbEndpoints =
402406
LocalityLbEndpoints.create(endpoints, 1, 0, ImmutableMap.of());
403407
return StatusOr.fromValue(new XdsEndpointResource.EdsUpdate(

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,13 @@ public void start(Listener2 listener) {
234234
resolveState.start();
235235
}
236236

237+
@Override
238+
public void refresh() {
239+
if (resolveState != null) {
240+
resolveState.refresh();
241+
}
242+
}
243+
237244
private static String expandPercentS(String template, String replacement) {
238245
return template.replace("%s", replacement);
239246
}
@@ -323,7 +330,10 @@ private void updateResolutionResult(XdsConfig xdsConfig) {
323330
.setAttributes(attrs)
324331
.setServiceConfig(parsedServiceConfig)
325332
.build();
326-
listener.onResult2(result);
333+
if (!listener.onResult2(result).isOk()) {
334+
// TODO: check if this is right
335+
resolveState.xdsDependencyManager.requestReresolution();
336+
}
327337
}
328338

329339
/**
@@ -662,6 +672,10 @@ void start() {
662672
xdsDependencyManager.start(this);
663673
}
664674

675+
void refresh() {
676+
xdsDependencyManager.requestReresolution();
677+
}
678+
665679
private void shutdown() {
666680
if (stopped) {
667681
return;

0 commit comments

Comments
 (0)