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} {
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 {} {
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
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]
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]
}
}
}