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
6fb04d46
Commit
6fb04d46
authored
Nov 30, 2017
by
antirez
Browse files
Regression test: Slave restart with EVALSHA in backlog issue #4483.
parent
3b9be93f
Changes
1
Hide whitespace changes
Inline
Side-by-side
tests/integration/psync2.tcl
View file @
6fb04d46
...
...
@@ -10,7 +10,7 @@ start_server {} {
# Config
set debug_msg 0
;
# Enable additional debug messages
set no_exit 0
;
;
# Do not exit at end of the test
set no_exit 0
;
# Do not exit at end of the test
set duration 20
;
# Total test seconds
...
...
@@ -175,6 +175,69 @@ start_server {} {
assert
{
$sync
_count == $new_sync_count
}
}
test
"PSYNC2: Slave RDB restart with EVALSHA in backlog issue #4483"
{
# Pick a random slave
set slave_id
[
expr
{(
$master
_id+1
)
%5
}]
set sync_count
[
status $R
(
$master
_id
)
sync_full
]
# Make sure to replicate the first EVAL while the salve is online
# so that it's part of the scripts the master believes it's safe
# to propagate as EVALSHA.
$R
(
$master
_id
)
EVAL
{
return redis.call
(
"incr"
,
"__mycounter"
)}
0
$R
(
$master
_id
)
EVALSHA e6e0b547500efcec21eddb619ac3724081afee89 0
# Wait for the two to sync
wait_for_condition 50 1000
{
[
$R
(
$master
_id
)
debug digest
]
==
[
$R
(
$slave
_id
)
debug digest
]
}
else
{
fail
"Slave not reconnecting"
}
# Prevent the slave from receiving master updates, and at
# the same time send a new script several times to the
# master, so that we'll end with EVALSHA into the backlog.
$R
(
$slave
_id
)
slaveof 127.0.0.1 0
$R
(
$master
_id
)
EVALSHA e6e0b547500efcec21eddb619ac3724081afee89 0
$R
(
$master
_id
)
EVALSHA e6e0b547500efcec21eddb619ac3724081afee89 0
$R
(
$master
_id
)
EVALSHA e6e0b547500efcec21eddb619ac3724081afee89 0
catch
{
$R
(
$slave
_id
)
config rewrite
$R
(
$slave
_id
)
debug restart
}
# Reconfigure the slave correctly again, when it's back online.
set retry 50
while
{
$retry
}
{
if
{[
catch
{
$R
(
$slave
_id
)
slaveof $master_host $master_port
}]}
{
after 1000
}
else
{
break
}
incr retry -1
}
# The master should be back at 4 slaves eventually
wait_for_condition 50 1000
{
[
status $R
(
$master
_id
)
connected_slaves
]
== 4
}
else
{
fail
"Slave not reconnecting"
}
set new_sync_count
[
status $R
(
$master
_id
)
sync_full
]
assert
{
$sync
_count == $new_sync_count
}
# However if the slave started with the full state of the
# scripting engine, we should now have the same digest.
wait_for_condition 50 1000
{
[
$R
(
$master
_id
)
debug digest
]
==
[
$R
(
$slave
_id
)
debug digest
]
}
else
{
fail
"Debug digest mismatch between master and slave in post-restart handshake"
}
}
if
{
$no
_exit
}
{
while 1
{
puts -nonewline .
;
flush stdout
;
after 1000
}
}
...
...
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