Skip to content

Commit c63bdae

Browse files
authored
Merge pull request #2808 from murgatroid99/grpc-js_transport_error_reporting
grpc-js: Report session error events instead of waiting for close
2 parents f5ea6ce + d409311 commit c63bdae

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

packages/grpc-js/src/transport.ts

+13-3
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,8 @@ class Http2Transport implements Transport {
223223
);
224224

225225
session.once('error', error => {
226-
/* Do nothing here. Any error should also trigger a close event, which is
227-
* where we want to handle that. */
228226
this.trace('connection closed with error ' + (error as Error).message);
227+
this.handleDisconnect();
229228
});
230229

231230
if (logging.isTracerEnabled(TRACER_NAME)) {
@@ -383,6 +382,9 @@ class Http2Transport implements Transport {
383382
* Handle connection drops, but not GOAWAYs.
384383
*/
385384
private handleDisconnect() {
385+
if (this.disconnectHandled) {
386+
return;
387+
}
386388
this.clearKeepaliveTimeout();
387389
this.reportDisconnectToOwner(false);
388390
/* Give calls an event loop cycle to finish naturally before reporting the
@@ -768,6 +770,7 @@ export class Http2SubchannelConnector implements SubchannelConnector {
768770
);
769771
this.session = session;
770772
let errorMessage = 'Failed to connect';
773+
let reportedError = false;
771774
session.unref();
772775
session.once('connect', () => {
773776
session.removeAllListeners();
@@ -778,12 +781,19 @@ export class Http2SubchannelConnector implements SubchannelConnector {
778781
this.session = null;
779782
// Leave time for error event to happen before rejecting
780783
setImmediate(() => {
781-
reject(`${errorMessage} (${new Date().toISOString()})`);
784+
if (!reportedError) {
785+
reportedError = true;
786+
reject(`${errorMessage} (${new Date().toISOString()})`);
787+
}
782788
});
783789
});
784790
session.once('error', error => {
785791
errorMessage = (error as Error).message;
786792
this.trace('connection failed with error ' + errorMessage);
793+
if (!reportedError) {
794+
reportedError = true;
795+
reject(`${errorMessage} (${new Date().toISOString()})`);
796+
}
787797
});
788798
});
789799
}

0 commit comments

Comments
 (0)