Skip to content

Commit

Permalink
don't publish if any logical dns clusters are still unresolved.
Browse files Browse the repository at this point in the history
  • Loading branch information
larry-safran committed Feb 27, 2025
1 parent d72d674 commit 5f4813d
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
9 changes: 9 additions & 0 deletions xds/src/main/java/io/grpc/xds/XdsDependencyManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,15 @@ private void maybePublishConfig() {
return;
}

// Check for unresolved logical clusters
if (resourceWatchers.get(XdsClusterResource.getInstance()).watchers.values().stream()
.filter(watcher -> watcher.hasDataValue())
.map(watcher -> (CdsWatcher) watcher)
.filter(watcher -> watcher.getData().getValue().clusterType() == ClusterType.LOGICAL_DNS)
.anyMatch(watcher -> !watcher.clusterState.resolved)) {
return;
}

XdsConfig newConfig = buildConfig();
if (Objects.equals(newConfig, lastXdsConfig)) {
return;
Expand Down
10 changes: 8 additions & 2 deletions xds/src/test/java/io/grpc/xds/CdsLoadBalancer2Test.java
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,6 @@
import io.grpc.xds.client.Bootstrapper.BootstrapInfo;
import io.grpc.xds.client.Bootstrapper.ServerInfo;
import io.grpc.xds.client.EnvoyProtoData;
import io.grpc.xds.client.Locality;
import io.grpc.xds.client.XdsClient;
import io.grpc.xds.client.XdsLogger;
import io.grpc.xds.client.XdsLogger.XdsLogLevel;
Expand Down Expand Up @@ -1183,7 +1182,14 @@ private void deliverError(Status error) {
private class TestXdsConfigWatcher implements XdsDependencyManager.XdsConfigWatcher {
XdsDependencyManager dependencyManager;
List<java.io.Closeable> clusterWatchers = new ArrayList<>();
NameResolver.Args nameResolverArgs = NameResolver.Args.newBuilder().build();
NameResolver.Args nameResolverArgs = NameResolver.Args.newBuilder()
.setDefaultPort(8080)
.setProxyDetector(GrpcUtil.DEFAULT_PROXY_DETECTOR)
.setSynchronizationContext(syncContext)
.setServiceConfigParser(mock(NameResolver.ServiceConfigParser.class))
.setChannelLogger(mock(ChannelLogger.class))
.setScheduledExecutorService(fakeClock.getScheduledExecutorService())
.build();

public TestXdsConfigWatcher() {
dependencyManager = new XdsDependencyManager(xdsClient, this, syncContext, EDS_SERVICE_NAME,
Expand Down

0 comments on commit 5f4813d

Please sign in to comment.