Skip to content

Commit

Permalink
Blocking command with a 0.001 seconds timeout blocks indefinitely (#1…
Browse files Browse the repository at this point in the history
…1688)

Any value in the range of [0-1) turns to 0 when being cast from double to long long. This change rounds up instead of down for values that can't be stored precisely as long doubles.

(cherry picked from commit eef29b6)
  • Loading branch information
gabiganam authored and oranagra committed Jan 16, 2023
1 parent 61a1d45 commit 574a49b
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/timeout.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
#include "server.h"
#include "cluster.h"

#include <math.h>

/* ========================== Clients timeouts ============================= */

/* Check if this blocked client timedout (does nothing if the client is
Expand Down Expand Up @@ -169,7 +171,7 @@ int getTimeoutFromObjectOrReply(client *c, robj *object, mstime_t *timeout, int
if (getLongDoubleFromObjectOrReply(c,object,&ftval,
"timeout is not a float or out of range") != C_OK)
return C_ERR;
tval = (long long) (ftval * 1000.0);
tval = (long long) ceill(ftval * 1000.0);
} else {
if (getLongLongFromObjectOrReply(c,object,&tval,
"timeout is not an integer or out of range") != C_OK)
Expand Down
10 changes: 10 additions & 0 deletions tests/unit/type/list.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -1256,6 +1256,16 @@ foreach {pop} {BLPOP BLMPOP_LEFT} {
$rd close
}

test "$pop: with 0.001 timeout should not block indefinitely" {
# Use a timeout of 0.001 and wait for the number of blocked clients to equal 0.
# Validate the empty read from the deferring client.
set rd [redis_deferring_client]
bpop_command $rd $pop blist1 0.001
wait_for_blocked_clients_count 0
assert_equal {} [$rd read]
$rd close
}

test "$pop: second argument is not a list" {
set rd [redis_deferring_client]
r del blist1{t} blist2{t}
Expand Down

0 comments on commit 574a49b

Please sign in to comment.