Skip to content

Commit 5789266

Browse files
yzc-yzczuiderkwast
andauthored
Fix SCAN consistency test to only test what we guarantee (#2853)
Test the SCAN consistency by alternating SCAN calls to primary and replica. We cannot rely on the exact order of the elements and the returned cursor number. --------- Signed-off-by: yzc-yzc <[email protected]> Co-authored-by: Viktor Söderqvist <[email protected]>
1 parent 33bfac3 commit 5789266

File tree

1 file changed

+63
-57
lines changed

1 file changed

+63
-57
lines changed
Lines changed: 63 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,66 @@
1+
proc scan_interleaved {primary replica cmd {key ""} args} {
2+
set cursor 0
3+
set keys {}
4+
set toggle [randomInt 2]
5+
while {1} {
6+
if {$key != ""} {
7+
set cmd_args [list $key $cursor {*}$args]
8+
} else {
9+
set cmd_args [list $cursor {*}$args]
10+
}
11+
12+
if {$toggle == 0} {
13+
set scan_result [$primary $cmd {*}$cmd_args]
14+
} else {
15+
set scan_result [$replica $cmd {*}$cmd_args]
16+
}
17+
lappend keys {*}[lindex $scan_result 1]
18+
if {[lindex $scan_result 0] eq 0} {
19+
break
20+
}
21+
set cursor [lindex $scan_result 0]
22+
set toggle [expr {1 - $toggle}]
23+
}
24+
return $keys
25+
}
26+
127
test {scan family consistency with configured hash seed} {
2-
start_server {tags {"external:skip"}} {
3-
4-
set fixed_seed "aabbccddeeffgghh"
5-
set shared_overrides [list appendonly no save "" hash-seed $fixed_seed activedefrag no hz 1]
6-
7-
start_server [list overrides $shared_overrides] {
8-
set primary_host [srv 0 host]
9-
set primary_port [srv 0 port]
10-
11-
start_server [list overrides $shared_overrides] {
12-
set primary [srv -1 client]
13-
set replica [srv 0 client]
14-
15-
$primary flushall
16-
$replica replicaof $primary_host $primary_port
17-
wait_replica_online $primary
18-
19-
set n 50
20-
for {set i 0} {$i < $n} {incr i} {
21-
$primary set "k:$i" x
22-
$primary hset h "f:$i" $i
23-
$primary sadd s "m:$i"
24-
$primary zadd z $i "m:$i"
25-
}
26-
27-
wait_for_condition 200 50 {
28-
[$replica dbsize] == [$primary dbsize]
29-
} else {
30-
fail "replica did not catch up dbsize (primary=[$primary dbsize], replica=[$replica dbsize])"
31-
}
32-
set cursor {{0} {}}
33-
while {1} {
34-
set primary_cursor_next [$primary scan [lindex $cursor 0]]
35-
set replica_cursor_next [$replica scan [lindex $cursor 0]]
36-
assert_equal $primary_cursor_next $replica_cursor_next
37-
if {[lindex $primary_cursor_next 0] eq "0"} {
38-
assert_equal "0" [lindex $replica_cursor_next 0]
39-
break
40-
}
41-
set cursor $primary_cursor_next
42-
}
43-
44-
foreach {cmd key} {hscan h sscan s zscan z} {
45-
set cursor {{0} {}}
46-
while {1} {
47-
set primary_cursor_next [$primary $cmd $key [lindex $cursor 0]]
48-
set replica_cursor_next [$replica $cmd $key [lindex $cursor 0]]
49-
assert_equal $primary_cursor_next $replica_cursor_next
50-
if {[lindex $primary_cursor_next 0] eq "0"} {
51-
assert_equal "0" [lindex $replica_cursor_next 0]
52-
break
53-
}
54-
set cursor $primary_cursor_next
55-
}
56-
}
57-
}
28+
set fixed_seed [randstring 16 16 alpha]
29+
set shared_overrides [list appendonly no save "" hash-seed $fixed_seed]
30+
31+
start_multiple_servers 2 [list overrides $shared_overrides] {
32+
set primary [srv -1 client]
33+
set replica [srv 0 client]
34+
35+
set primary_host [srv -1 host]
36+
set primary_port [srv -1 port]
37+
38+
$primary flushall
39+
$replica replicaof $primary_host $primary_port
40+
wait_for_sync $replica
41+
42+
set n 50
43+
for {set i 0} {$i < $n} {incr i} {
44+
$primary set "k:$i" x
45+
$primary hset h "f:$i" $i
46+
$primary sadd s "m:$i"
47+
$primary zadd z $i "m:$i"
48+
}
49+
50+
wait_for_condition 200 50 {
51+
[$replica dbsize] == [$primary dbsize]
52+
} else {
53+
fail "replica did not catch up dbsize (primary=[$primary dbsize], replica=[$replica dbsize])"
54+
}
55+
56+
set keys [scan_interleaved $primary $replica scan]
57+
set keys [lsort -unique $keys]
58+
assert_equal [expr {$n+3}] [llength $keys]
59+
60+
foreach {cmd key extra} {hscan h {novalues} sscan s {} zscan z {noscores}} {
61+
set items [scan_interleaved $primary $replica $cmd $key {*}$extra]
62+
set items [lsort -unique $items]
63+
assert_equal $n [llength $items]
5864
}
5965
}
60-
}
66+
} {} {external:skip}

0 commit comments

Comments
 (0)