Commit d6797d34 authored by antirez's avatar antirez
Browse files

Diskless replication tested with the multiple slaves consistency test.

parent ebb3bd53
...@@ -94,79 +94,82 @@ start_server {tags {"repl"}} { ...@@ -94,79 +94,82 @@ start_server {tags {"repl"}} {
} }
} }
start_server {tags {"repl"}} { foreach dl {no yes} {
set master [srv 0 client] start_server {tags {"repl"}} {
set master_host [srv 0 host] set master [srv 0 client]
set master_port [srv 0 port] $master config set repl-diskless-sync $dl
set slaves {} set master_host [srv 0 host]
set load_handle0 [start_write_load $master_host $master_port 3] set master_port [srv 0 port]
set load_handle1 [start_write_load $master_host $master_port 5] set slaves {}
set load_handle2 [start_write_load $master_host $master_port 20] set load_handle0 [start_write_load $master_host $master_port 3]
set load_handle3 [start_write_load $master_host $master_port 8] set load_handle1 [start_write_load $master_host $master_port 5]
set load_handle4 [start_write_load $master_host $master_port 4] set load_handle2 [start_write_load $master_host $master_port 20]
start_server {} { set load_handle3 [start_write_load $master_host $master_port 8]
lappend slaves [srv 0 client] set load_handle4 [start_write_load $master_host $master_port 4]
start_server {} { start_server {} {
lappend slaves [srv 0 client] lappend slaves [srv 0 client]
start_server {} { start_server {} {
lappend slaves [srv 0 client] lappend slaves [srv 0 client]
test "Connect multiple slaves at the same time (issue #141)" { start_server {} {
# Send SALVEOF commands to slaves lappend slaves [srv 0 client]
[lindex $slaves 0] slaveof $master_host $master_port test "Connect multiple slaves at the same time (issue #141), diskless=$dl" {
[lindex $slaves 1] slaveof $master_host $master_port # Send SALVEOF commands to slaves
[lindex $slaves 2] slaveof $master_host $master_port [lindex $slaves 0] slaveof $master_host $master_port
[lindex $slaves 1] slaveof $master_host $master_port
# Wait for all the three slaves to reach the "online" state [lindex $slaves 2] slaveof $master_host $master_port
set retry 500
while {$retry} { # Wait for all the three slaves to reach the "online" state
set info [r -3 info] set retry 500
if {[string match {*slave0:*state=online*slave1:*state=online*slave2:*state=online*} $info]} { while {$retry} {
break set info [r -3 info]
if {[string match {*slave0:*state=online*slave1:*state=online*slave2:*state=online*} $info]} {
break
} else {
incr retry -1
after 100
}
}
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
# 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 { } else {
incr retry -1 fail "Slaves still loading data after too much time"
after 100
} }
}
if {$retry == 0} {
error "assertion:Slaves not correctly synchronized"
}
# Stop the write load # Make sure that slaves and master have same number of keys
stop_write_load $load_handle0 wait_for_condition 500 100 {
stop_write_load $load_handle1 [$master dbsize] == [[lindex $slaves 0] dbsize] &&
stop_write_load $load_handle2 [$master dbsize] == [[lindex $slaves 1] dbsize] &&
stop_write_load $load_handle3 [$master dbsize] == [[lindex $slaves 2] dbsize]
stop_write_load $load_handle4 } else {
fail "Different number of keys between masted and slave after too long time."
# 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 # Check digests
wait_for_condition 500 100 { set digest [$master debug digest]
[$master dbsize] == [[lindex $slaves 0] dbsize] && set digest0 [[lindex $slaves 0] debug digest]
[$master dbsize] == [[lindex $slaves 1] dbsize] && set digest1 [[lindex $slaves 1] debug digest]
[$master dbsize] == [[lindex $slaves 2] dbsize] set digest2 [[lindex $slaves 2] debug digest]
} else { assert {$digest ne 0000000000000000000000000000000000000000}
fail "Different number of keys between masted and slave after too long time." assert {$digest eq $digest0}
assert {$digest eq $digest1}
assert {$digest eq $digest2}
} }
}
# Check digests }
set digest [$master debug digest]
set digest0 [[lindex $slaves 0] debug digest]
set digest1 [[lindex $slaves 1] debug digest]
set digest2 [[lindex $slaves 2] debug digest]
assert {$digest ne 0000000000000000000000000000000000000000}
assert {$digest eq $digest0}
assert {$digest eq $digest1}
assert {$digest eq $digest2}
}
}
} }
} }
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment