summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2013-05-09 12:52:04 +0200
committerantirez <antirez@gmail.com>2013-05-09 12:52:04 +0200
commite938575220c1b925dcdc608f46dc24e42aa6b2ed (patch)
treec514283b54bb9990d62df02ea1d6be1940330e55
parenta7486a659291d946de652d22c8730d8046198ebe (diff)
downloadredis-e938575220c1b925dcdc608f46dc24e42aa6b2ed.tar.gz
Test: more PSYNC tests (backlog TTL).
-rw-r--r--tests/integration/replication-psync.tcl48
1 files changed, 37 insertions, 11 deletions
diff --git a/tests/integration/replication-psync.tcl b/tests/integration/replication-psync.tcl
index b49ab2519..97d74db37 100644
--- a/tests/integration/replication-psync.tcl
+++ b/tests/integration/replication-psync.tcl
@@ -7,7 +7,13 @@ proc stop_bg_complex_data {handle} {
catch {exec /bin/kill -9 $handle}
}
-proc test_psync {backlog cond} {
+# Creates a master-slave pair and breaks the link continuously to force
+# partial resyncs attempts, all this while flooding the master with
+# write queries.
+#
+# You can specifiy backlog size, ttl, delay before reconnection, test duration
+# in seconds, and an additional condition to verify at the end.
+proc test_psync {descr duration backlog_size backlog_ttl delay cond} {
start_server {tags {"repl"}} {
start_server {} {
@@ -16,7 +22,8 @@ proc test_psync {backlog cond} {
set master_port [srv -1 port]
set slave [srv 0 client]
- $master config set repl-backlog-size $backlog
+ $master config set repl-backlog-size $backlog_size
+ $master config set repl-backlog-ttl $backlog_ttl
set load_handle0 [start_bg_complex_data $master_host $master_port 9 100000]
set load_handle1 [start_bg_complex_data $master_host $master_port 11 100000]
@@ -24,20 +31,30 @@ proc test_psync {backlog cond} {
test {First server should have role slave after SLAVEOF} {
$slave slaveof $master_host $master_port
- after 1000
- s 0 role
- } {slave}
+ wait_for_condition 50 100 {
+ [s 0 role] eq {slave}
+ } else {
+ fail "Replication not started."
+ }
+ }
- test "Test replication partial resync with backlog $backlog" {
+ test "Test replication partial resync: $descr" {
# Now while the clients are writing data, break the maste-slave
# link multiple times.
- for {set j 0} {$j < 100} {incr j} {
- after 100 ;# 100 times 100 milliseconds = 10 seconds total test
+ for {set j 0} {$j < $duration*10} {incr j} {
+ after 100
# catch {puts "MASTER [$master dbsize] keys, SLAVE [$slave dbsize] keys"}
if {($j % 20) == 0} {
catch {
- $slave client kill $master_host:$master_port
+ if {$delay} {
+ $slave multi
+ $slave client kill $master_host:$master_port
+ $slave debug sleep $delay
+ $slave exec
+ } else {
+ $slave client kill $master_host:$master_port
+ }
}
}
}
@@ -71,9 +88,18 @@ proc test_psync {backlog cond} {
}
}
-test_psync 1000000 {
+test_psync {ok psync} 6 1000000 3600 0 {
assert {[s -1 sync_partial_ok] > 0}
}
-test_psync 100 {
+
+test_psync {no backlog} 6 100 3600 0 {
+ assert {[s -1 sync_partial_err] > 0}
+}
+
+test_psync {ok after delay} 3 100000000 3600 3 {
+ assert {[s -1 sync_partial_ok] > 0}
+}
+
+test_psync {backlog expired} 3 100000000 1 3 {
assert {[s -1 sync_partial_err] > 0}
}