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
8327ccef
Commit
8327ccef
authored
May 15, 2018
by
antirez
Browse files
Test: replication test blocking lists/zsets ops.
parent
25f017e5
Changes
3
Hide whitespace changes
Inline
Side-by-side
tests/helpers/bg_block_op.tcl
0 → 100644
View file @
8327ccef
source tests/support/redis.tcl
source tests/support/util.tcl
# This function sometimes writes sometimes blocking-reads from lists/sorted
# sets. There are multiple processes like this executing at the same time
# so that we have some chance to trap some corner condition if there is
# a regression. For this to happen it is important that we narrow the key
# space to just a few elements, and balance the operations so that it is
# unlikely that lists and zsets just get more data without ever causing
# blocking.
proc bg_block_op
{
host port db ops
}
{
set r
[
redis $host $port
]
$r select $db
for
{
set j 0
}
{
$j
< $ops
}
{
incr j
}
{
# List side
set k list_
[
randomInt 10
]
set k2 list_
[
randomInt 10
]
set v
[
randomValue
]
randpath
{
randpath
{
$r rpush $k $v
}
{
$r lpush $k $v
}
}
{
$r blpop $k 2
}
{
$r blpop $k $k2 2
}
# Zset side
set k zset_
[
randomInt 10
]
set k2 zset_
[
randomInt 10
]
randpath
{
$r zadd $k
[
randomInt 10000
]
$v
}
{
# Duplicate to balance the probability to push data
$r zadd $k
[
randomInt 10000
]
$v
}
{
$r bzpopmin $k 2
}
{
$r bzpopmax $k 2
}
}
}
bg_block_op
[
lindex $argv 0
]
[
lindex $argv 1
]
[
lindex $argv 2
]
[
lindex $argv 3
]
tests/integration/block-repl.tcl
0 → 100644
View file @
8327ccef
# Test replication of blocking lists and zset operations.
# Unlike stream operations such operations are
"pop"
style, so they consume
# the list or sorted set, and must be replicated correctly.
proc start_bg_block_op
{
host port db ops
}
{
set tclsh
[
info nameofexecutable
]
exec $tclsh tests/helpers/bg_block_op.tcl $host $port $db $ops &
}
proc stop_bg_block_op
{
handle
}
{
catch
{
exec /bin/kill -9 $handle
}
}
start_server
{
tags
{
"repl"
}}
{
start_server
{}
{
set master
[
srv -1 client
]
set master_host
[
srv -1 host
]
set master_port
[
srv -1 port
]
set slave
[
srv 0 client
]
set load_handle0
[
start_bg_block_op $master_host $master_port 9 100000
]
set load_handle1
[
start_bg_block_op $master_host $master_port 11 100000
]
set load_handle2
[
start_bg_block_op $master_host $master_port 12 100000
]
test
{
First server should have role slave after SLAVEOF
}
{
$slave slaveof $master_host $master_port
after 1000
s 0 role
}
{
slave
}
test
{
Test replication with parallel clients writing in differnet DBs
}
{
after 25000
stop_bg_block_op $load_handle0
stop_bg_block_op $load_handle1
stop_bg_block_op $load_handle2
set retry 10
while
{
$retry
&&
([
$master
debug digest
]
ne
[
$slave
debug digest
])}
\
{
after 1000
incr retry -1
}
if
{[
$master
debug digest
]
ne
[
$slave
debug digest
]}
{
set csv1
[
csvdump r
]
set csv2
[
csvdump
{
r -1
}]
set fd
[
open /tmp/repldump1.txt w
]
puts -nonewline $fd $csv1
close $fd
set fd
[
open /tmp/repldump2.txt w
]
puts -nonewline $fd $csv2
close $fd
puts
"Master - Slave inconsistency"
puts
"Run diff -u against /tmp/repldump*.txt for more info"
}
assert_equal
[
r debug digest
]
[
r -1 debug digest
]
}
}
}
tests/test_helper.tcl
View file @
8327ccef
...
@@ -34,6 +34,7 @@ set ::all_tests {
...
@@ -34,6 +34,7 @@ set ::all_tests {
unit/multi
unit/multi
unit/quit
unit/quit
unit/aofrw
unit/aofrw
integration/block-repl
integration/replication
integration/replication
integration/replication-2
integration/replication-2
integration/replication-3
integration/replication-3
...
...
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