Skip to content

Commit

Permalink
Fix race in test case "CLUSTER SLOT-STATS cpu-usec for blocking comma…
Browse files Browse the repository at this point in the history
…nds, unblocked on timeout"

The command BLPOP blocks for 1 second.

The procedure `wait_for_blocked_clients_count` waits for one second by default.
If the first `wait_for_blocked_clients_count` finishes very fast, then the second
`wait_for_blocked_clients_count` can time out before the BLPOP has been unblocked.

```TCL
    test "CLUSTER SLOT-STATS cpu-usec for blocking commands, unblocked on timeout." {
        # Blocking command with 1 second timeout.
        set rd [valkey_deferring_client]
        $rd BLPOP $key 1

        # Confirm that the client is blocked, then unblocked after 1 second timeout.
        wait_for_blocked_clients_count 1
        wait_for_blocked_clients_count 0
```

As seen in the definition of `wait_for_blocked_clients_count`, the total time to
wait is 1 second by default.

```TCL
proc wait_for_blocked_clients_count {count {maxtries 100} {delay 10} {idx 0}} {
    wait_for_condition $maxtries $delay  {
        [s $idx blocked_clients] == $count
    } else {
        fail "Timeout waiting for blocked clients"
    }
}
```

Signed-off-by: Viktor Söderqvist <[email protected]>
  • Loading branch information
zuiderkwast committed Dec 10, 2024
1 parent f951a1c commit 3672303
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions tests/unit/cluster/slot-stats.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -228,11 +228,11 @@ start_cluster 1 0 {tags {external:skip cluster} overrides {cluster-slot-stats-en
R 0 FLUSHALL

test "CLUSTER SLOT-STATS cpu-usec for blocking commands, unblocked on timeout." {
# Blocking command with 1 second timeout.
# Blocking command with 0.5 seconds timeout.
set rd [valkey_deferring_client]
$rd BLPOP $key 1
$rd BLPOP $key 0.5

# Confirm that the client is blocked, then unblocked after 1 second timeout.
# Confirm that the client is blocked, then unblocked within 1 second.
wait_for_blocked_clients_count 1
wait_for_blocked_clients_count 0

Expand Down Expand Up @@ -971,4 +971,4 @@ start_cluster 1 1 {tags {external:skip cluster} overrides {cluster-slot-stats-en
}
R 0 CONFIG RESETSTAT
R 1 CONFIG RESETSTAT
}
}

0 comments on commit 3672303

Please sign in to comment.