From 24e7443522a6af9409e77ddd22b6c7e293a8d9a1 Mon Sep 17 00:00:00 2001 From: John Hiesey Date: Mon, 28 Feb 2022 23:47:54 -0800 Subject: [PATCH 1/2] Fix #1870: TypeError in PubSub --- packages/client/lib/client/commands-queue.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/client/lib/client/commands-queue.ts b/packages/client/lib/client/commands-queue.ts index df2c25dbc2c..8af200314b8 100644 --- a/packages/client/lib/client/commands-queue.ts +++ b/packages/client/lib/client/commands-queue.ts @@ -369,7 +369,8 @@ export default class RedisCommandsQueue { #setReturnBuffers() { this.#parser.setReturnBuffers( !!this.#waitingForReply.head?.value.returnBuffers || - !!this.#pubSubState?.subscribed + !!this.#pubSubState?.subscribed || + !!this.#pubSubState?.subscribing ); } From e9f9f9f02e7bfb68b60a4a98e4fa38ccd3e912af Mon Sep 17 00:00:00 2001 From: John Hiesey Date: Tue, 1 Mar 2022 01:11:00 -0800 Subject: [PATCH 2/2] Add test This test is for a race condition; it should reliably pass now, but is not guaranteed to fail with the previous version. --- packages/client/lib/client/index.spec.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/client/lib/client/index.spec.ts b/packages/client/lib/client/index.spec.ts index 1d627756c6d..d52086da412 100644 --- a/packages/client/lib/client/index.spec.ts +++ b/packages/client/lib/client/index.spec.ts @@ -683,6 +683,21 @@ describe('Client', () => { } }, GLOBAL.SERVERS.OPEN); + testUtils.testWithClient('should not fail when message arrives right after subscribe', async publisher => { + const subscriber = publisher.duplicate(); + + await subscriber.connect(); + + try { + await assert.doesNotReject(Promise.all([ + subscriber.subscribe('channel', () => {}), + publisher.publish('channel', 'message') + ])); + } finally { + await subscriber.disconnect(); + } + }, GLOBAL.SERVERS.OPEN); + testUtils.testWithClient('should be able to quit in PubSub mode', async client => { await client.subscribe('channel', () => { // noop