Fix race condition in cluster test 22-replica-in-sync (#9721)
there was a chance that by the time the assertion is executed, the replica already manages to reconnect. now we make sure the replica is unable to re-connect to the master. additionally, we wait for some gossip from the disconnected replica, to see that it doesn't mess things up. unrelated: fix a typo when trying to exhaust the backlog, one that didn't have any harmful implications Co-authored-by: Madelyn Olson <madelyneolson@gmail.com>
This commit is contained in:
parent
f27083a4a8
commit
d04f306931
@ -25,6 +25,16 @@ proc is_replica_online {info_repl} {
|
||||
return $result
|
||||
}
|
||||
|
||||
proc get_last_pong_time {node_id target_cid} {
|
||||
foreach item [split [R $node_id cluster nodes] \n] {
|
||||
set args [split $item " "]
|
||||
if {[lindex $args 0] eq $target_cid} {
|
||||
return [lindex $args 5]
|
||||
}
|
||||
}
|
||||
fail "Target node ID was not present"
|
||||
}
|
||||
|
||||
set master_id 0
|
||||
|
||||
test "Fill up primary with data" {
|
||||
@ -74,7 +84,7 @@ test "Replica in loading state is hidden" {
|
||||
for {set j 0} {$j < $num} {incr j} {
|
||||
set key "{0}"
|
||||
append key $j
|
||||
R $master_id set key $value
|
||||
R $master_id set $key $value
|
||||
}
|
||||
R $master_id exec
|
||||
|
||||
@ -109,10 +119,28 @@ test "Replica in loading state is hidden" {
|
||||
}
|
||||
|
||||
test "Check disconnected replica not hidden from slots" {
|
||||
# We want to disconnect the replica, but keep it alive so it can still gossip
|
||||
|
||||
# Make sure that the replica will not be able to re-connect to the master
|
||||
R $master_id config set requirepass asdf
|
||||
|
||||
# Disconnect replica from primary
|
||||
R $master_id client kill type replica
|
||||
|
||||
# Check master to have no replicas
|
||||
assert {[s $master_id connected_slaves] == 0}
|
||||
|
||||
set replica_cid [R $replica_id cluster myid]
|
||||
set initial_pong [get_last_pong_time $master_id $replica_cid]
|
||||
wait_for_condition 50 100 {
|
||||
$initial_pong != [get_last_pong_time $master_id $replica_cid]
|
||||
} else {
|
||||
fail "Primary never received gossip from replica"
|
||||
}
|
||||
|
||||
# Check that replica is still in the cluster slots
|
||||
assert {[is_in_slots $master_id $replica]}
|
||||
|
||||
# undo config
|
||||
R $master_id config set requirepass ""
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user