X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/0934a4df93e6e62e65094142cd01294d9de3087e..5513397de7526f0e5e01c1d29a37813008703d6d:/tests/integration/replication.tcl diff --git a/tests/integration/replication.tcl b/tests/integration/replication.tcl index 7c1edb55..da94b088 100644 --- a/tests/integration/replication.tcl +++ b/tests/integration/replication.tcl @@ -2,16 +2,23 @@ start_server {tags {"repl"}} { start_server {} { test {First server should have role slave after SLAVEOF} { r -1 slaveof [srv 0 host] [srv 0 port] - after 1000 - s -1 role - } {slave} + wait_for_condition 50 100 { + [s -1 role] eq {slave} && + [string match {*master_link_status:up*} [r -1 info replication]] + } else { + fail "Can't turn the instance into a slave" + } + } test {BRPOPLPUSH replication, when blocking against empty list} { set rd [redis_deferring_client] $rd brpoplpush a b 5 r lpush a foo - after 1000 - assert_equal [r debug digest] [r -1 debug digest] + wait_for_condition 50 100 { + [r debug digest] eq [r -1 debug digest] + } else { + fail "Master and slave have different digest: [r debug digest] VS [r -1 debug digest]" + } } test {BRPOPLPUSH replication, list exists} { @@ -54,9 +61,13 @@ start_server {tags {"repl"}} { test {SET on the master should immediately propagate} { r -1 set mykey bar - if {$::valgrind} {after 2000} - r 0 get mykey - } {bar} + + wait_for_condition 500 100 { + [r 0 get mykey] eq {bar} + } else { + fail "SET on master did not propagated on slave" + } + } test {FLUSHALL should replicate} { r -1 flushall @@ -79,12 +90,11 @@ start_server {tags {"repl"}} { set master_host [srv 0 host] set master_port [srv 0 port] set slaves {} - set load_handle0 [start_write_load $master_host $master_port 20] - set load_handle1 [start_write_load $master_host $master_port 20] + set load_handle0 [start_write_load $master_host $master_port 3] + set load_handle1 [start_write_load $master_host $master_port 5] set load_handle2 [start_write_load $master_host $master_port 20] - set load_handle3 [start_write_load $master_host $master_port 20] - set load_handle4 [start_write_load $master_host $master_port 20] - after 2000 + set load_handle3 [start_write_load $master_host $master_port 8] + set load_handle4 [start_write_load $master_host $master_port 4] start_server {} { lappend slaves [srv 0 client] start_server {} { @@ -92,6 +102,7 @@ start_server {tags {"repl"}} { start_server {} { lappend slaves [srv 0 client] test "Connect multiple slaves at the same time (issue #141)" { + # Send SALVEOF commands to slaves [lindex $slaves 0] slaveof $master_host $master_port [lindex $slaves 1] slaveof $master_host $master_port [lindex $slaves 2] slaveof $master_host $master_port @@ -110,16 +121,33 @@ start_server {tags {"repl"}} { if {$retry == 0} { error "assertion:Slaves not correctly synchronized" } + + # Stop the write load stop_write_load $load_handle0 stop_write_load $load_handle1 stop_write_load $load_handle2 stop_write_load $load_handle3 stop_write_load $load_handle4 - set retry 10 - while {$retry && ([$master debug digest] ne [[lindex $slaves 0] debug digest])} { - after 1000 - incr retry -1 + + # Wait that slaves exit the "loading" state + wait_for_condition 500 100 { + ![string match {*loading:1*} [[lindex $slaves 0] info]] && + ![string match {*loading:1*} [[lindex $slaves 1] info]] && + ![string match {*loading:1*} [[lindex $slaves 2] info]] + } else { + fail "Slaves still loading data after too much time" } + + # Make sure that slaves and master have same number of keys + wait_for_condition 500 100 { + [$master dbsize] == [[lindex $slaves 0] dbsize] && + [$master dbsize] == [[lindex $slaves 1] dbsize] && + [$master dbsize] == [[lindex $slaves 2] dbsize] + } else { + fail "Different number of keys between masted and slave after too long time." + } + + # Check digests set digest [$master debug digest] set digest0 [[lindex $slaves 0] debug digest] set digest1 [[lindex $slaves 1] debug digest] @@ -128,10 +156,6 @@ start_server {tags {"repl"}} { assert {$digest eq $digest0} assert {$digest eq $digest1} assert {$digest eq $digest2} - #puts [$master dbsize] - #puts [[lindex $slaves 0] dbsize] - #puts [[lindex $slaves 1] dbsize] - #puts [[lindex $slaves 2] dbsize] } } }