Skip to content

Commit 8255add

Browse files
authored
Reject multi.exec() promise with ClientClosedError after client disconnect (redis#2293)
* Add reject multi chain on client disconnect assertion to client test suite * Reject multi chain exec with client closed error after client disconnect
1 parent 4ccefa9 commit 8255add

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

packages/client/lib/client/index.spec.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,19 @@ describe('Client', () => {
425425
);
426426
}, GLOBAL.SERVERS.OPEN);
427427

428+
testUtils.testWithClient('should reject the whole chain upon client disconnect', async client => {
429+
await client.disconnect();
430+
431+
return assert.rejects(
432+
client.multi()
433+
.ping()
434+
.set('key', 'value')
435+
.get('key')
436+
.exec(),
437+
ClientClosedError
438+
);
439+
}, GLOBAL.SERVERS.OPEN);
440+
428441
testUtils.testWithClient('with script', async client => {
429442
assert.deepEqual(
430443
await client.multi()

packages/client/lib/client/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,10 @@ export default class RedisClient<
611611
selectedDB?: number,
612612
chainId?: symbol
613613
): Promise<Array<RedisCommandRawReply>> {
614+
if (!this.#socket.isOpen) {
615+
return Promise.reject(new ClientClosedError());
616+
}
617+
614618
const promise = Promise.all(
615619
commands.map(({ args }) => {
616620
return this.#queue.addCommand(args, { chainId });

0 commit comments

Comments
 (0)