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:
@@ -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]
|
||||
|
||||
@@ -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]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user