diff options
Diffstat (limited to 'tests/integration/replication-4.tcl')
-rw-r--r-- | tests/integration/replication-4.tcl | 93 |
1 files changed, 84 insertions, 9 deletions
diff --git a/tests/integration/replication-4.tcl b/tests/integration/replication-4.tcl index 1c559b706..348b1cae5 100644 --- a/tests/integration/replication-4.tcl +++ b/tests/integration/replication-4.tcl @@ -1,12 +1,3 @@ -proc start_bg_complex_data {host port db ops} { - set tclsh [info nameofexecutable] - exec $tclsh tests/helpers/bg_complex_data.tcl $host $port $db $ops & -} - -proc stop_bg_complex_data {handle} { - catch {exec /bin/kill -9 $handle} -} - start_server {tags {"repl"}} { start_server {} { @@ -153,3 +144,87 @@ start_server {tags {"repl"}} { } } } + +# test that restart of a slave that is not in sync, doens't override an existing rdb +start_server {tags {"repl"}} { + start_server {} { + set master [srv -1 client] + set master_host [srv -1 host] + set master_port [srv -1 port] + set slave [srv 0 client] + + $master select 0 + $slave select 0 + + # Populate master + for {set j 0} {$j < 100} {incr j} { + $master set key$j $j + } + + # Connect slave to master + test {First server should have role slave after SLAVEOF} { + $slave slaveof $master_host $master_port + wait_for_condition 50 100 { + [s 0 master_link_status] eq {up} + } else { + fail "Replication not started." + } + } + + test {Slave should sync with master} { + wait_for_condition 50 100 { + [$slave dbsize] == 100 + } else { + fail "Replication not completed." + } + } + + # Disconnect slave + $slave slaveof no one + $slave save + + # Make sure no RDB saving is in progress + test {Make sure no RDB saving is in progress} { + wait_for_condition 50 100 { + [s -1 rdb_bgsave_in_progress] eq {0} + } else { + fail "RDB saving never finished." + } + } + + # Setup delay to simulate a long RDB transfer time + # 50000 microseconds * 100 keys = 5 seconds + $master config set rdb-key-save-delay 50000 + + # Connect slave to master + $slave slaveof $master_host $master_port + + # Make sure master started sending the file + test {Make sure master started sending RDB} { + wait_for_condition 50 100 { + [s -1 rdb_bgsave_in_progress] eq {1} + } else { + fail "RDB saving never started." + } + } + + test {Kill master and restart slave} { + # Kill the master mid-RDB sending + catch {$master shutdown} + + # Restart slave + catch {$slave debug restart} + } + + after 100 + + # Make sure it has all 100 keys + test {Slave should load old RDB} { + wait_for_condition 50 100 { + [$slave dbsize] == 100 + } else { + fail "RDB not loaded." + } + } + } +} |