1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-04 15:02:09 +03:00

Execute empty MULTI (#2423)

* Fix multi.exec with empty queue and previous watch

When calling exec on a multi instance which you did not use, no command is sent currently.

This is a problem for watched keys, because no EXEC means no unwatch, which might cause hard-to-debug problems.

Proposed Fix: Sending UNWATCH

* execute empty multi command (instead of skipping)

* Update index.ts

* Update index.ts

* Update multi-command.ts

* Update multi-command.ts

* Update multi-command.ts

* Update multi-command.ts

* short circuit empty pipelines

* Update index.ts

---------

Co-authored-by: Leibale <me@leibale.com>
This commit is contained in:
Mik13
2023-02-24 23:33:16 +01:00
committed by GitHub
parent 1be84228b5
commit 0f28dad2a2
6 changed files with 46 additions and 45 deletions

View File

@@ -46,24 +46,23 @@ describe('Multi Command', () => {
});
describe('exec', () => {
it('undefined', () => {
assert.equal(
new RedisMultiCommand().exec(),
undefined
it('without commands', () => {
assert.deepEqual(
new RedisMultiCommand().queue,
[]
);
});
it('Array', () => {
it('with commands', () => {
const multi = new RedisMultiCommand();
multi.addCommand(['PING']);
assert.deepEqual(
multi.exec(),
[
{ args: ['MULTI'] },
{ args: ['PING'], transformReply: undefined },
{ args: ['EXEC'] }
]
multi.queue,
[{
args: ['PING'],
transformReply: undefined
}]
);
});
});