Merge pull request #1917 from murgatroid99/grpc-js-xds_test_fixes

grpc-js-xds: A few fixes for xDS tests
This commit is contained in:
Michael Lumish 2021-09-28 15:48:36 -07:00 committed by GitHub
commit 6cea491a3c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 24 additions and 9 deletions

View File

@ -59,7 +59,7 @@ GRPC_NODE_TRACE=xds_client,xds_resolver,cds_balancer,eds_balancer,priority,weigh
--gcp_suffix=$(date '+%s') \
--verbose \
${XDS_V3_OPT-} \
--client_cmd="$(which node) grpc-node/packages/grpc-js-xds/build/interop/xds-interop-client \
--client_cmd="$(which node) --enable-source-maps grpc-node/packages/grpc-js-xds/build/interop/xds-interop-client \
--server=xds:///{server_uri} \
--stats_port={stats_port} \
--qps={qps} \

View File

@ -109,7 +109,7 @@ function validateXdsServerConfig(obj: any): XdsServerConfig {
return {
serverUri: obj.server_uri,
channelCreds: obj.channel_creds.map(validateChannelCredsConfig),
serverFeatures: obj.server_features
serverFeatures: obj.server_features ?? []
};
}

View File

@ -341,6 +341,16 @@ export class XdsClient {
return;
}
trace('Loaded bootstrap info: ' + JSON.stringify(bootstrapInfo, undefined, 2));
if (bootstrapInfo.xdsServers.length < 1) {
trace('Failed to initialize xDS Client. No servers provided in bootstrap info.');
// Bubble this error up to any listeners
this.reportStreamError({
code: status.INTERNAL,
details: 'Failed to initialize xDS Client. No servers provided in bootstrap info.',
metadata: new Metadata(),
});
return;
}
if (bootstrapInfo.xdsServers[0].serverFeatures.indexOf('xds_v3') >= 0) {
this.apiVersion = XdsApiVersion.V3;
} else {
@ -425,8 +435,7 @@ export class XdsClient {
{channelOverride: channel}
);
this.maybeStartLrsStream();
},
(error) => {
}).catch((error) => {
trace('Failed to initialize xDS Client. ' + error.message);
// Bubble this error up to any listeners
this.reportStreamError({

View File

@ -268,6 +268,10 @@ export class Server {
};
}
const deferredCallback = (error: Error | null, port: number) => {
process.nextTick(() => callback(error, port));
}
const setupServer = (): http2.Http2Server | http2.Http2SecureServer => {
let http2Server: http2.Http2Server | http2.Http2SecureServer;
if (creds._isSecure()) {
@ -309,6 +313,7 @@ export class Server {
const http2Server = setupServer();
return new Promise<number | Error>((resolve, reject) => {
function onError(err: Error): void {
trace('Failed to bind ' + subchannelAddressToString(address) + ' with error ' + err.message);
resolve(err);
}
@ -356,6 +361,7 @@ export class Server {
const http2Server = setupServer();
return new Promise<BindResult>((resolve, reject) => {
function onError(err: Error): void {
trace('Failed to bind ' + subchannelAddressToString(address) + ' with error ' + err.message);
resolve(bindWildcardPort(addressList.slice(1)));
}
@ -384,7 +390,7 @@ export class Server {
// We only want one resolution result. Discard all future results
resolverListener.onSuccessfulResolution = () => {};
if (addressList.length === 0) {
callback(new Error(`No addresses resolved for port ${port}`), 0);
deferredCallback(new Error(`No addresses resolved for port ${port}`), 0);
return;
}
let bindResultPromise: Promise<BindResult>;
@ -407,7 +413,7 @@ export class Server {
if (bindResult.count === 0) {
const errorString = `No address added out of total ${addressList.length} resolved`;
logging.log(LogVerbosity.ERROR, errorString);
callback(new Error(errorString), 0);
deferredCallback(new Error(errorString), 0);
} else {
if (bindResult.count < addressList.length) {
logging.log(
@ -415,18 +421,18 @@ export class Server {
`WARNING Only ${bindResult.count} addresses added out of total ${addressList.length} resolved`
);
}
callback(null, bindResult.port);
deferredCallback(null, bindResult.port);
}
},
(error) => {
const errorString = `No address added out of total ${addressList.length} resolved`;
logging.log(LogVerbosity.ERROR, errorString);
callback(new Error(errorString), 0);
deferredCallback(new Error(errorString), 0);
}
);
},
onError: (error) => {
callback(new Error(error.details), 0);
deferredCallback(new Error(error.details), 0);
},
};