diff options
Diffstat (limited to 'tests/integration')
-rw-r--r-- | tests/integration/replication.tcl | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/tests/integration/replication.tcl b/tests/integration/replication.tcl index 153aa8620..617b9f78e 100644 --- a/tests/integration/replication.tcl +++ b/tests/integration/replication.tcl @@ -992,7 +992,7 @@ test "diskless replication child being killed is collected" { # wait for the replicas to start reading the rdb wait_for_log_messages 0 {"*Loading DB in memory*"} $loglines 800 10 - # wait to be sure the eplica is hung and the master is blocked on write + # wait to be sure the replica is hung and the master is blocked on write after 500 # simulate the OOM killer or anyone else kills the child @@ -1012,6 +1012,45 @@ test "diskless replication child being killed is collected" { } } {} {external:skip} +foreach mdl {yes no} { + test "replication dies when parent is killed - diskless: $mdl" { + # when master is killed, make sure the fork child can detect that and exit + start_server {tags {"repl"}} { + set master [srv 0 client] + set master_host [srv 0 host] + set master_port [srv 0 port] + set master_pid [srv 0 pid] + $master config set repl-diskless-sync $mdl + $master config set repl-diskless-sync-delay 0 + # create keys that will take 10 seconds to save + $master config set rdb-key-save-delay 1000 + $master debug populate 10000 + start_server {} { + set replica [srv 0 client] + $replica replicaof $master_host $master_port + + # wait for rdb child to start + wait_for_condition 5000 10 { + [s -1 rdb_bgsave_in_progress] == 1 + } else { + fail "rdb child didn't start" + } + set fork_child_pid [get_child_pid -1] + + # simulate the OOM killer or anyone else kills the parent + exec kill -9 $master_pid + + # wait for the child to notice the parent died have exited + wait_for_condition 500 10 { + [process_is_alive $fork_child_pid] == 0 + } else { + fail "rdb child didn't terminate" + } + } + } + } {} {external:skip} +} + test "diskless replication read pipe cleanup" { # In diskless replication, we create a read pipe for the RDB, between the child and the parent. # When we close this pipe (fd), the read handler also needs to be removed from the event loop (if it still registered). |