File valkey-slot-stats.patch of Package valkey.39739

From 2dfe25b40839bb7e904d83622b09b999b25fb160 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Viktor=20S=C3=B6derqvist?= <viktor.soderqvist@est.tech>
Date: Tue, 10 Dec 2024 14:46:21 +0100
Subject: [PATCH] Fix race in test "CLUSTER SLOT-STATS cpu-usec for blocking
 commands, unblocked on timeout" (#1416)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This fix changes the timeout for BLPOP in this test case from 1 second
to 0.5 seconds.

In the test case quoted below, the procedure
`wait_for_blocked_clients_count` waits for one second by default. If
BLPOP has 1 second timeout and 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"
    }
}
```

Fixes #1121

Signed-off-by: Viktor Söderqvist <viktor.soderqvist@est.tech>
---
 tests/unit/cluster/slot-stats.tcl | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/tests/unit/cluster/slot-stats.tcl b/tests/unit/cluster/slot-stats.tcl
index 3e3487a612..99f9c1c03a 100644
--- a/tests/unit/cluster/slot-stats.tcl
+++ b/tests/unit/cluster/slot-stats.tcl
@@ -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
 
@@ -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
-}
\ No newline at end of file
+}
openSUSE Build Service is sponsored by