Unverified Commit e5acc5ef authored by Salvatore Sanfilippo's avatar Salvatore Sanfilippo Committed by GitHub
Browse files

Merge pull request #2774 from rouzier/blocking-list-commands-support-milliseconds-floating

Added millisecond resolution for blpop command && friends
parents fba6e26e eca01873
...@@ -77,10 +77,18 @@ int serveClientBlockedOnList(client *receiver, robj *key, robj *dstkey, redisDb ...@@ -77,10 +77,18 @@ int serveClientBlockedOnList(client *receiver, robj *key, robj *dstkey, redisDb
* is zero. */ * is zero. */
int getTimeoutFromObjectOrReply(client *c, robj *object, mstime_t *timeout, int unit) { int getTimeoutFromObjectOrReply(client *c, robj *object, mstime_t *timeout, int unit) {
long long tval; long long tval;
long double ftval;
if (getLongLongFromObjectOrReply(c,object,&tval, if (unit == UNIT_SECONDS) {
"timeout is not an integer or out of range") != C_OK) if (getLongDoubleFromObjectOrReply(c,object,&ftval,
return C_ERR; "timeout is not an float or out of range") != C_OK)
return C_ERR;
tval = (long long) (ftval * 1000.0);
} else {
if (getLongLongFromObjectOrReply(c,object,&tval,
"timeout is not an integer or out of range") != C_OK)
return C_ERR;
}
if (tval < 0) { if (tval < 0) {
addReplyError(c,"timeout is negative"); addReplyError(c,"timeout is negative");
...@@ -88,7 +96,6 @@ int getTimeoutFromObjectOrReply(client *c, robj *object, mstime_t *timeout, int ...@@ -88,7 +96,6 @@ int getTimeoutFromObjectOrReply(client *c, robj *object, mstime_t *timeout, int
} }
if (tval > 0) { if (tval > 0) {
if (unit == UNIT_SECONDS) tval *= 1000;
tval += mstime(); tval += mstime();
} }
*timeout = tval; *timeout = tval;
......
...@@ -436,8 +436,11 @@ start_server { ...@@ -436,8 +436,11 @@ start_server {
test "$pop: with non-integer timeout" { test "$pop: with non-integer timeout" {
set rd [redis_deferring_client] set rd [redis_deferring_client]
$rd $pop blist1 1.1 r del blist1
assert_error "ERR*not an integer*" {$rd read} $rd $pop blist1 0.1
r rpush blist1 foo
assert_equal {blist1 foo} [$rd read]
assert_equal 0 [r exists blist1]
} }
test "$pop: with zero timeout should block indefinitely" { test "$pop: with zero timeout should block indefinitely" {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment