From a3bafd5a952b5cfacacb03f9fb2ac5988d1e39fb Mon Sep 17 00:00:00 2001 From: Toshiaki Takahashi Date: Tue, 15 May 2018 07:19:25 +0000 Subject: [PATCH] write_redis: fix "max_set_duration" deletes unexpected data The calculation result of the data range when "max_set_duration" is used is incorrect, because the (char []) type, i.e. string, variable "time" is used as the number for the time calculation. As a result, data in the wrong range is deleted. With this change, the correct data is deleted by calculation using a double type value. --- src/write_redis.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/write_redis.c b/src/write_redis.c index 97c6cc05..c17654b4 100644 --- a/src/write_redis.c +++ b/src/write_redis.c @@ -129,10 +129,10 @@ static int wr_write(const data_set_t *ds, /* {{{ */ if (node->max_set_duration > 0) { /* * remove element, scored less than 'current-max_set_duration' - * '(%d' indicates 'less than' in redis CLI. + * '(...' indicates 'less than' in redis CLI. */ - rr = redisCommand(node->conn, "ZREMRANGEBYSCORE %s -1 (%d", key, - (time - node->max_set_duration) + 1); + rr = redisCommand(node->conn, "ZREMRANGEBYSCORE %s -1 (%.9f", key, + (CDTIME_T_TO_DOUBLE(vl->time) - node->max_set_duration)); if (rr == NULL) WARNING("ZREMRANGEBYSCORE command error. key:%s message:%s", key, node->conn->errstr); -- 2.11.0