
## Set replica-lazy-flush and lazyfree-lazy-user-flush to yes by default. There are many problems with running flush synchronously. Even in single CPU environments, the thread managers should balance between the freeing and serving incoming requests. ## Set lazy eviction, expire, server-del, user-del to yes by default We now have a del and a lazyfree del, we also have these configuration items to control: lazyfree-lazy-eviction, lazyfree-lazy-expire, lazyfree-lazy-server-del, lazyfree-lazy-user-del. In most cases lazyfree is better since it reduces the risk of blocking the main thread, and because we have lazyfreeGetFreeEffort, on those with high effor (currently 64) will use lazyfree. Part of #653. --------- Signed-off-by: Binbin <binloveplay1314@qq.com>
220 lines
6.8 KiB
Tcl
220 lines
6.8 KiB
Tcl
set testmodule [file normalize tests/modules/postnotifications.so]
|
|
|
|
tags "modules" {
|
|
start_server {} {
|
|
r module load $testmodule with_key_events
|
|
|
|
test {Test write on post notification callback} {
|
|
set repl [attach_to_replication_stream]
|
|
|
|
r set string_x 1
|
|
assert_equal {1} [r get string_changed{string_x}]
|
|
assert_equal {1} [r get string_total]
|
|
|
|
r set string_x 2
|
|
assert_equal {2} [r get string_changed{string_x}]
|
|
assert_equal {2} [r get string_total]
|
|
|
|
# the {lpush before_overwritten string_x} is a post notification job registered when 'string_x' was overwritten
|
|
assert_replication_stream $repl {
|
|
{multi}
|
|
{select *}
|
|
{set string_x 1}
|
|
{incr string_changed{string_x}}
|
|
{incr string_total}
|
|
{exec}
|
|
{multi}
|
|
{set string_x 2}
|
|
{lpush before_overwritten string_x}
|
|
{incr string_changed{string_x}}
|
|
{incr string_total}
|
|
{exec}
|
|
}
|
|
close_replication_stream $repl
|
|
}
|
|
|
|
test {Test write on post notification callback from module thread} {
|
|
r flushall
|
|
set repl [attach_to_replication_stream]
|
|
|
|
assert_equal {OK} [r postnotification.async_set]
|
|
assert_equal {1} [r get string_changed{string_x}]
|
|
assert_equal {1} [r get string_total]
|
|
|
|
assert_replication_stream $repl {
|
|
{multi}
|
|
{select *}
|
|
{set string_x 1}
|
|
{incr string_changed{string_x}}
|
|
{incr string_total}
|
|
{exec}
|
|
}
|
|
close_replication_stream $repl
|
|
}
|
|
|
|
test {Test active expire} {
|
|
r flushall
|
|
set repl [attach_to_replication_stream]
|
|
|
|
r set x 1
|
|
r pexpire x 10
|
|
|
|
wait_for_condition 100 50 {
|
|
[r keys expired] == {expired}
|
|
} else {
|
|
puts [r keys *]
|
|
fail "Failed waiting for x to expired"
|
|
}
|
|
|
|
# the {lpush before_expired x} is a post notification job registered before 'x' got expired
|
|
assert_replication_stream $repl {
|
|
{select *}
|
|
{set x 1}
|
|
{pexpireat x *}
|
|
{multi}
|
|
{unlink x}
|
|
{lpush before_expired x}
|
|
{incr expired}
|
|
{exec}
|
|
}
|
|
close_replication_stream $repl
|
|
}
|
|
|
|
test {Test lazy expire} {
|
|
r flushall
|
|
r DEBUG SET-ACTIVE-EXPIRE 0
|
|
set repl [attach_to_replication_stream]
|
|
|
|
r set x 1
|
|
r pexpire x 1
|
|
after 10
|
|
assert_equal {} [r get x]
|
|
|
|
# the {lpush before_expired x} is a post notification job registered before 'x' got expired
|
|
assert_replication_stream $repl {
|
|
{select *}
|
|
{set x 1}
|
|
{pexpireat x *}
|
|
{multi}
|
|
{unlink x}
|
|
{lpush before_expired x}
|
|
{incr expired}
|
|
{exec}
|
|
}
|
|
close_replication_stream $repl
|
|
r DEBUG SET-ACTIVE-EXPIRE 1
|
|
} {OK} {needs:debug}
|
|
|
|
test {Test lazy expire inside post job notification} {
|
|
r flushall
|
|
r DEBUG SET-ACTIVE-EXPIRE 0
|
|
set repl [attach_to_replication_stream]
|
|
|
|
r set x 1
|
|
r pexpire x 1
|
|
after 10
|
|
assert_equal {OK} [r set read_x 1]
|
|
|
|
# the {lpush before_expired x} is a post notification job registered before 'x' got expired
|
|
assert_replication_stream $repl {
|
|
{select *}
|
|
{set x 1}
|
|
{pexpireat x *}
|
|
{multi}
|
|
{set read_x 1}
|
|
{unlink x}
|
|
{lpush before_expired x}
|
|
{incr expired}
|
|
{exec}
|
|
}
|
|
close_replication_stream $repl
|
|
r DEBUG SET-ACTIVE-EXPIRE 1
|
|
} {OK} {needs:debug}
|
|
|
|
test {Test nested keyspace notification} {
|
|
r flushall
|
|
set repl [attach_to_replication_stream]
|
|
|
|
assert_equal {OK} [r set write_sync_write_sync_x 1]
|
|
|
|
assert_replication_stream $repl {
|
|
{multi}
|
|
{select *}
|
|
{set x 1}
|
|
{set write_sync_x 1}
|
|
{set write_sync_write_sync_x 1}
|
|
{exec}
|
|
}
|
|
close_replication_stream $repl
|
|
}
|
|
|
|
test {Test eviction} {
|
|
r flushall
|
|
set repl [attach_to_replication_stream]
|
|
r set x 1
|
|
r config set maxmemory-policy allkeys-random
|
|
r config set maxmemory 1
|
|
|
|
assert_error {OOM *} {r set y 1}
|
|
|
|
# the {lpush before_evicted x} is a post notification job registered before 'x' got evicted
|
|
assert_replication_stream $repl {
|
|
{select *}
|
|
{set x 1}
|
|
{multi}
|
|
{unlink x}
|
|
{lpush before_evicted x}
|
|
{incr evicted}
|
|
{exec}
|
|
}
|
|
close_replication_stream $repl
|
|
} {} {needs:config-maxmemory}
|
|
}
|
|
}
|
|
|
|
set testmodule2 [file normalize tests/modules/keyspace_events.so]
|
|
|
|
tags "modules" {
|
|
start_server {} {
|
|
r module load $testmodule with_key_events
|
|
r module load $testmodule2
|
|
test {Test write on post notification callback} {
|
|
set repl [attach_to_replication_stream]
|
|
|
|
r set string_x 1
|
|
assert_equal {1} [r get string_changed{string_x}]
|
|
assert_equal {1} [r get string_total]
|
|
|
|
r set string_x 2
|
|
assert_equal {2} [r get string_changed{string_x}]
|
|
assert_equal {2} [r get string_total]
|
|
|
|
r set string1_x 1
|
|
assert_equal {1} [r get string_changed{string1_x}]
|
|
assert_equal {3} [r get string_total]
|
|
|
|
# the {lpush before_overwritten string_x} is a post notification job registered before 'string_x' got overwritten
|
|
assert_replication_stream $repl {
|
|
{multi}
|
|
{select *}
|
|
{set string_x 1}
|
|
{incr string_changed{string_x}}
|
|
{incr string_total}
|
|
{exec}
|
|
{multi}
|
|
{set string_x 2}
|
|
{lpush before_overwritten string_x}
|
|
{incr string_changed{string_x}}
|
|
{incr string_total}
|
|
{exec}
|
|
{multi}
|
|
{set string1_x 1}
|
|
{incr string_changed{string1_x}}
|
|
{incr string_total}
|
|
{exec}
|
|
}
|
|
close_replication_stream $repl
|
|
}
|
|
}
|
|
}
|