From 2334ca9dfa24915e50304c7c8a472d8e9f34c1ea Mon Sep 17 00:00:00 2001 From: Yuri Golobokov Date: Mon, 7 Feb 2022 16:47:56 -0800 Subject: [PATCH 1/2] Add isTracerEnabled to logging --- packages/grpc-js/src/logging.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/grpc-js/src/logging.ts b/packages/grpc-js/src/logging.ts index 549cd860e..ec845c1a5 100644 --- a/packages/grpc-js/src/logging.ts +++ b/packages/grpc-js/src/logging.ts @@ -108,10 +108,12 @@ export function trace( tracer: string, text: string ): void { - if ( - !disabledTracers.has(tracer) && - (allEnabled || enabledTracers.has(tracer)) - ) { + if (isTracerEnabled(tracer)) { log(severity, new Date().toISOString() + ' | ' + tracer + ' | ' + text); } } + +export function isTracerEnabled(tracer: string): boolean { + return !disabledTracers.has(tracer) && + (allEnabled || enabledTracers.has(tracer)); +} From ae2a2ac7d0880433b6b8fc584885a14e2ec4fd97 Mon Sep 17 00:00:00 2001 From: Yuri Golobokov Date: Mon, 7 Feb 2022 17:21:14 -0800 Subject: [PATCH 2/2] Add HTTP/2 settings frame tracing. This adds HTTP/2 settings frame information to debug logs. HTTP/2 settings frame contains important information like max_concurrent_streams and initial_window_size useful for debugging concurrency, latency, and throughput issues. --- packages/grpc-js/src/subchannel.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/grpc-js/src/subchannel.ts b/packages/grpc-js/src/subchannel.ts index 6f9471bb9..9945b9881 100644 --- a/packages/grpc-js/src/subchannel.ts +++ b/packages/grpc-js/src/subchannel.ts @@ -555,6 +555,24 @@ export class Subchannel { (error as Error).message ); }); + if (logging.isTracerEnabled(TRACER_NAME)) { + session.on('remoteSettings', (settings: http2.Settings) => { + this.trace( + 'new settings received' + + (this.session !== session ? ' on the old connection' : '') + + ': ' + + JSON.stringify(settings) + ); + }); + session.on('localSettings', (settings: http2.Settings) => { + this.trace( + 'local settings acknowledged by remote' + + (this.session !== session ? ' on the old connection' : '') + + ': ' + + JSON.stringify(settings) + ); + }); + } } private startConnectingInternal() {