diff --git a/xds/src/main/java/io/grpc/xds/XdsDependencyManager.java b/xds/src/main/java/io/grpc/xds/XdsDependencyManager.java index 78d4dbb198a..d60bd0fac10 100644 --- a/xds/src/main/java/io/grpc/xds/XdsDependencyManager.java +++ b/xds/src/main/java/io/grpc/xds/XdsDependencyManager.java @@ -566,7 +566,6 @@ private interface RdsUpdateSupplier { private class LdsWatcher extends XdsWatcherBase implements RdsUpdateSupplier { - String rdsName; private LdsWatcher(String resourceName) { super(XdsListenerResource.getInstance(), resourceName); @@ -581,22 +580,18 @@ public void onChanged(XdsListenerResource.LdsUpdate update) { HttpConnectionManager httpConnectionManager = update.httpConnectionManager(); List virtualHosts; - String rdsName; if (httpConnectionManager == null) { // TCP listener. Unsupported config virtualHosts = Collections.emptyList(); // Not null, to not delegate to RDS - rdsName = null; } else { virtualHosts = httpConnectionManager.virtualHosts(); - rdsName = httpConnectionManager.rdsName(); } - if (virtualHosts != null) { - // No RDS watcher since we are getting RDS updates via LDS updateRoutes(virtualHosts); - this.rdsName = null; - } else { - this.rdsName = rdsName; + } + + String rdsName = getRdsName(update); + if (rdsName != null) { addRdsWatcher(rdsName); } @@ -604,20 +599,17 @@ public void onChanged(XdsListenerResource.LdsUpdate update) { maybePublishConfig(); } - @Override - public void onResourceDoesNotExist(String resourceName) { - if (cancelled) { - return; + private String getRdsName(XdsListenerResource.LdsUpdate update) { + HttpConnectionManager httpConnectionManager = update.httpConnectionManager(); + if (httpConnectionManager == null) { + // TCP listener. Unsupported config + return null; } - - checkArgument(resourceName().equals(resourceName), "Resource name does not match"); - setDataAsStatus(Status.UNAVAILABLE.withDescription( - toContextString() + " does not exist" + nodeInfo())); - rdsName = null; - maybePublishConfig(); + return httpConnectionManager.rdsName(); } - private RdsWatcher getRdsWatcher(WatcherTracer tracer) { + private RdsWatcher getRdsWatcher(XdsListenerResource.LdsUpdate update, WatcherTracer tracer) { + String rdsName = getRdsName(update); if (rdsName == null) { return null; } @@ -636,7 +628,7 @@ public RdsUpdateSupplier getRouteSource(WatcherTracer tracer) { if (virtualHosts != null) { return this; } - RdsWatcher rdsWatcher = getRdsWatcher(tracer); + RdsWatcher rdsWatcher = getRdsWatcher(getData().getValue(), tracer); assert rdsWatcher != null; return rdsWatcher; }