From 83d28303725ea48e6ba1ab08b57d1eacf9137961 Mon Sep 17 00:00:00 2001 From: Matt Stancliff Date: Thu, 10 Apr 2014 17:08:02 -0400 Subject: [PATCH 1/2] Check key expiration before deleting Deleting an expired key should return 0, not success. Fixes #1648 --- src/db.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/db.c b/src/db.c index f80ef2ac..5e75de47 100644 --- a/src/db.c +++ b/src/db.c @@ -280,6 +280,7 @@ void delCommand(redisClient *c) { int deleted = 0, j; for (j = 1; j < c->argc; j++) { + expireIfNeeded(c->db,c->argv[j]); if (dbDelete(c->db,c->argv[j])) { signalModifiedKey(c->db,c->argv[j]); notifyKeyspaceEvent(REDIS_NOTIFY_GENERIC, From 88530804e8c7ad977277ea693026b2b0a5f4816d Mon Sep 17 00:00:00 2001 From: Matt Stancliff Date: Thu, 10 Apr 2014 18:32:19 -0400 Subject: [PATCH 2/2] Add test for deleting an expired key Verify proper expire-before-delete behavior. This test passes with the expire-before-delete commit and fails without it. --- tests/unit/basic.tcl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/unit/basic.tcl b/tests/unit/basic.tcl index 1f46ba66..8da35896 100644 --- a/tests/unit/basic.tcl +++ b/tests/unit/basic.tcl @@ -261,6 +261,14 @@ start_server {tags {"basic"}} { assert_equal 20 [r get x] } + test "DEL against expired key" { + r debug set-active-expire 0 + r setex keyExpire 1 valExpire + after 1100 + assert_equal 0 [r del keyExpire] + r debug set-active-expire 1 + } + test {EXISTS} { set res {} r set newkey test