Delete empty key if fails after moduleCreateEmptyKey() in module (#12129)

When `RM_ZsetAdd()`/`RM_ZsetIncrby()`/`RM_StreamAdd()` fails, if a new key happens to 
be created using `moduleCreateEmptyKey()`, we should clean up the empty key.

## Test
1) Add new module commands(`zset.add` and `zset.incrby`) to cover  `RM_ZsetAdd()`/`RM_ZsetIncrby()`.
2) Add a large-memory test to cover `RM_StreamAdd()`.
This commit is contained in:
sundb
2023-05-07 10:13:19 +03:00
committed by GitHub
parent b0dd7b3245
commit ce5f4ea3a9
4 changed files with 107 additions and 6 deletions
+17
View File
@@ -61,6 +61,23 @@ start_server {tags {"modules"}} {
assert_equal $result $n
}
test {Module stream XADD big fields doesn't create empty key} {
set original_proto [config_get_set proto-max-bulk-len 2147483647] ;#2gb
set original_query [config_get_set client-query-buffer-limit 2147483647] ;#2gb
r del mystream
r write "*4\r\n\$10\r\nstream.add\r\n\$8\r\nmystream\r\n\$5\r\nfield\r\n"
catch {
write_big_bulk 1073741824 ;#1gb
} err
assert {$err eq "ERR StreamAdd failed"}
assert_equal 0 [r exists mystream]
# restore defaults
r config set proto-max-bulk-len $original_proto
r config set client-query-buffer-limit $original_query
} {OK} {large-memory}
test {Module stream iterator} {
r del mystream
set streamid1 [r xadd mystream * item 1 value a]
+20
View File
@@ -14,6 +14,26 @@ start_server {tags {"modules"}} {
assert_equal 0 [r exists k]
}
test {Module zset add} {
r del k
# Check that failure does not create empty key
assert_error "ERR ZsetAdd failed" {r zset.add k nan hello}
assert_equal 0 [r exists k]
r zset.add k 100 hello
assert_equal {hello 100} [r zrange k 0 -1 withscores]
}
test {Module zset incrby} {
r del k
# Check that failure does not create empty key
assert_error "ERR ZsetIncrby failed" {r zset.incrby k hello nan}
assert_equal 0 [r exists k]
r zset.incrby k hello 100
assert_equal {hello 100} [r zrange k 0 -1 withscores]
}
test "Unload the module - zset" {
assert_equal {OK} [r module unload zset]
}