From 745a451e4c1d2d8583e92cbc86cc9e5eee0b3c95 Mon Sep 17 00:00:00 2001 From: Michael Lumish Date: Tue, 9 Jul 2024 11:03:15 -0700 Subject: [PATCH 1/2] grpc-js: Increase state change deadline in server idle tests --- packages/grpc-js/test/test-idle-timer.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/grpc-js/test/test-idle-timer.ts b/packages/grpc-js/test/test-idle-timer.ts index 3f2a8ed2..ed6af2cf 100644 --- a/packages/grpc-js/test/test-idle-timer.ts +++ b/packages/grpc-js/test/test-idle-timer.ts @@ -199,7 +199,7 @@ describe('Server idle timer', () => { grpc.connectivityState.READY ); client?.waitForClientState( - Date.now() + 600, + Date.now() + 1500, grpc.connectivityState.IDLE, done ); @@ -217,7 +217,7 @@ describe('Server idle timer', () => { ); client!.waitForClientState( - Date.now() + 600, + Date.now() + 1500, grpc.connectivityState.IDLE, err => { if (err) return done(err); @@ -248,7 +248,7 @@ describe('Server idle timer', () => { ); client!.waitForClientState( - Date.now() + 600, + Date.now() + 1500, grpc.connectivityState.IDLE, done ); From 395de4b333840fa28c7b54e726a017fee5c89c0d Mon Sep 17 00:00:00 2001 From: Michael Lumish Date: Tue, 9 Jul 2024 11:23:19 -0700 Subject: [PATCH 2/2] grpc-js: Refresh server idle timer if not enough time has passed --- packages/grpc-js/src/server.ts | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/grpc-js/src/server.ts b/packages/grpc-js/src/server.ts index 33db4100..4683d44a 100644 --- a/packages/grpc-js/src/server.ts +++ b/packages/grpc-js/src/server.ts @@ -1790,19 +1790,22 @@ export class Server { // for future refreshes if ( sessionInfo !== undefined && - sessionInfo.activeStreams === 0 && - Date.now() - sessionInfo.lastIdle >= ctx.sessionIdleTimeout + sessionInfo.activeStreams === 0 ) { - ctx.trace( - 'Session idle timeout triggered for ' + - socket?.remoteAddress + - ':' + - socket?.remotePort + - ' last idle at ' + - sessionInfo.lastIdle - ); + if (Date.now() - sessionInfo.lastIdle >= ctx.sessionIdleTimeout) { + ctx.trace( + 'Session idle timeout triggered for ' + + socket?.remoteAddress + + ':' + + socket?.remotePort + + ' last idle at ' + + sessionInfo.lastIdle + ); - ctx.closeSession(session); + ctx.closeSession(session); + } else { + sessionInfo.timeout.refresh(); + } } }