diff --git a/packages/grpc-js-xds/src/xds-stream-state/eds-state.ts b/packages/grpc-js-xds/src/xds-stream-state/eds-state.ts index dbf18ef8..3861f4d2 100644 --- a/packages/grpc-js-xds/src/xds-stream-state/eds-state.ts +++ b/packages/grpc-js-xds/src/xds-stream-state/eds-state.ts @@ -163,7 +163,6 @@ export class EdsState implements XdsStreamState { } } trace('Received EDS updates for cluster names ' + Array.from(allClusterNames)); - this.handleMissingNames(allClusterNames); return null; } diff --git a/packages/grpc-js-xds/src/xds-stream-state/lds-state.ts b/packages/grpc-js-xds/src/xds-stream-state/lds-state.ts index 7e8ec045..10e71bab 100644 --- a/packages/grpc-js-xds/src/xds-stream-state/lds-state.ts +++ b/packages/grpc-js-xds/src/xds-stream-state/lds-state.ts @@ -163,8 +163,13 @@ export class LdsState implements XdsStreamState { this.latestResponses = responses; this.latestIsV2 = isV2; const allTargetNames = new Set(); + const allRouteConfigNames = new Set(); for (const message of responses) { allTargetNames.add(message.name); + const httpConnectionManager = decodeSingleResource(HTTP_CONNECTION_MANGER_TYPE_URL_V3, message.api_listener!.api_listener!.value); + if (httpConnectionManager.rds) { + allRouteConfigNames.add(httpConnectionManager.rds.route_config_name); + } const watchers = this.watchers.get(message.name) ?? []; for (const watcher of watchers) { watcher.onValidUpdate(message, isV2); @@ -172,6 +177,7 @@ export class LdsState implements XdsStreamState { } trace('Received RDS response with route config names ' + Array.from(allTargetNames)); this.handleMissingNames(allTargetNames); + this.rdsState.handleMissingNames(allRouteConfigNames); return null; } diff --git a/packages/grpc-js-xds/src/xds-stream-state/rds-state.ts b/packages/grpc-js-xds/src/xds-stream-state/rds-state.ts index 9194529d..ec7abe55 100644 --- a/packages/grpc-js-xds/src/xds-stream-state/rds-state.ts +++ b/packages/grpc-js-xds/src/xds-stream-state/rds-state.ts @@ -172,7 +172,7 @@ export class RdsState implements XdsStreamState { return true; } - private handleMissingNames(allRouteConfigNames: Set) { + handleMissingNames(allRouteConfigNames: Set) { for (const [routeConfigName, watcherList] of this.watchers.entries()) { if (!allRouteConfigNames.has(routeConfigName)) { for (const watcher of watcherList) { @@ -200,7 +200,6 @@ export class RdsState implements XdsStreamState { } } trace('Received RDS response with route config names ' + Array.from(allRouteConfigNames)); - this.handleMissingNames(allRouteConfigNames); return null; }