From a9967659cd0b62b2d78ed4e2ee09ad3c1f6f2fee Mon Sep 17 00:00:00 2001 From: John Sully Date: Wed, 18 Dec 2019 00:04:48 -0500 Subject: [PATCH] Implement subkey expire for hashes Former-commit-id: 8cbe254491826f2a461d504b6dabcbbab44d20b3 --- src/expire.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/expire.cpp b/src/expire.cpp index fdad83638..4cb1959ad 100644 --- a/src/expire.cpp +++ b/src/expire.cpp @@ -100,9 +100,19 @@ void activeExpireCycleExpire(redisDb *db, expireEntry &e, long long now) { } } break; + + case OBJ_HASH: + if (hashTypeDelete(val,(sds)pfat->nextExpireEntry().spsubkey.get())) { + deleted++; + if (hashTypeLength(val) == 0) { + activeExpireCycleExpireFullKey(db, e.key()); + return; + } + } + break; + case OBJ_LIST: case OBJ_ZSET: - case OBJ_HASH: default: serverAssert(false); } @@ -170,6 +180,13 @@ void expireMemberCore(client *c, robj *key, robj *subkey, long long basetime, lo } break; + case OBJ_HASH: + if (!hashTypeExists(val, szFromObj(subkey))) { + addReply(c,shared.czero); + return; + } + break; + default: addReplyError(c, "object type is unsupported"); return;