Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
ad87ec4f
Commit
ad87ec4f
authored
Jul 25, 2014
by
antirez
Browse files
Cluster test: unit 06, slaves with stale data can't failover.
parent
49c817c2
Changes
2
Hide whitespace changes
Inline
Side-by-side
tests/cluster/tests/06-slave-stop-cond.tcl
0 → 100644
View file @
ad87ec4f
# Slave stop condition test
# Check that if there is a disconnection time limit, the slave will not try
# to failover its master.
source
"../tests/includes/init-tests.tcl"
# Create a cluster with 5 master and 10 slaves, so that we have 2
# slaves for each master.
test
"Create a 5 nodes cluster"
{
create_cluster 5 5
}
test
"Cluster is up"
{
assert_cluster_state ok
}
test
"The first master has actually one slave"
{
assert
{[
llength
[
lindex
[
R 0 role
]
2
]]
== 1
}
}
test
{
Slaves of #0 is instance #5 as expected
}
{
set port0
[
get_instance_attrib redis 0 port
]
assert
{[
lindex
[
R 5 role
]
2
]
== $port0
}
}
test
"Instance #5 synced with the master"
{
wait_for_condition 1000 50
{
[
RI 5 master_link_status
]
eq
{
up
}
}
else
{
fail
"Instance #5 master link status is not up"
}
}
test
"Lower the slave validity factor of #5 to the value of 2"
{
assert
{[
R 5 config set cluster-slave-validity-factor 2
]
eq
{
OK
}}
}
test
"Break master-slave link and prevent further reconnections"
{
# Stop the slave with a multi/exec transaction so that the master will
# be killed as soon as it can accept writes again.
R 5 multi
R 5 client kill 127.0.0.1:$port0
# here we should sleep 6 or more seconds
(
node_timeout * slave_validity
)
# but the actual validity time is actually incremented by the
# repl-ping-slave-period value which is 10 seconds by default. So we
# need to wait more than 16 seconds.
R 5 debug sleep 20
R 5 deferred 1
R 5 exec
# Prevent the master from accepting new slaves.
# Use a large pause value since we'll kill it anyway.
R 0 CLIENT PAUSE 60000
# Wait for the slave to return available again
R 5 deferred 0
assert
{[
R 5 read
]
eq
{
OK OK
}}
# Kill the master so that a reconnection will not be possible.
kill_instance redis 0
}
test
"Slave #5 is reachable and alive"
{
assert
{[
R 5 ping
]
eq
{
PONG
}}
}
test
"Slave #5 should not be able to failover"
{
after 10000
assert
{[
RI 5 role
]
eq
{
slave
}}
}
test
"Cluster should be down"
{
assert_cluster_state fail
}
tests/cluster/tests/includes/init-tests.tcl
View file @
ad87ec4f
...
...
@@ -25,6 +25,7 @@ test "Cluster nodes hard reset" {
R $id cluster reset hard
R $id cluster set-config-epoch
[
expr
{
$id
+1
}]
R $id config set cluster-node-timeout 3000
R $id config set cluster-slave-validity-factor 10
R $id config rewrite
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment