mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-23 00:28:26 -05:00
expireGenericCommand(): better variable names and a top-comment that describes the function's behavior.
This commit is contained in:
parent
c6bf4a0034
commit
70381bbf82
21
src/db.c
21
src/db.c
@ -518,16 +518,23 @@ int stringObjectEqualsMs(robj *a) {
|
||||
return tolower(arg[0]) == 'm' && tolower(arg[1]) == 's' && arg[2] == '\0';
|
||||
}
|
||||
|
||||
void expireGenericCommand(redisClient *c, long long offset, int unit) {
|
||||
/* This is the generic command implementation for EXPIRE, PEXPIRE, EXPIREAT
|
||||
* and PEXPIREAT. Because the commad second argument may be relative or absolute
|
||||
* the "basetime" argument is used to signal what the base time is (either 0
|
||||
* for *AT variants of the command, or the current time for relative expires).
|
||||
*
|
||||
* unit is either UNIT_SECONDS or UNIT_MILLISECONDS, and is only used for
|
||||
* the argv[2] parameter. The basetime is always specified in milliesconds. */
|
||||
void expireGenericCommand(redisClient *c, long long basetime, int unit) {
|
||||
dictEntry *de;
|
||||
robj *key = c->argv[1], *param = c->argv[2];
|
||||
long long milliseconds;
|
||||
long long when; /* unix time in milliseconds when the key will expire. */
|
||||
|
||||
if (getLongLongFromObjectOrReply(c, param, &milliseconds, NULL) != REDIS_OK)
|
||||
if (getLongLongFromObjectOrReply(c, param, &when, NULL) != REDIS_OK)
|
||||
return;
|
||||
|
||||
if (unit == UNIT_SECONDS) milliseconds *= 1000;
|
||||
milliseconds += offset;
|
||||
if (unit == UNIT_SECONDS) when *= 1000;
|
||||
when += basetime;
|
||||
|
||||
de = dictFind(c->db->dict,key->ptr);
|
||||
if (de == NULL) {
|
||||
@ -540,7 +547,7 @@ void expireGenericCommand(redisClient *c, long long offset, int unit) {
|
||||
*
|
||||
* Instead we take the other branch of the IF statement setting an expire
|
||||
* (possibly in the past) and wait for an explicit DEL from the master. */
|
||||
if (milliseconds <= mstime() && !server.loading && !server.masterhost) {
|
||||
if (when <= mstime() && !server.loading && !server.masterhost) {
|
||||
robj *aux;
|
||||
|
||||
redisAssertWithInfo(c,key,dbDelete(c->db,key));
|
||||
@ -554,7 +561,7 @@ void expireGenericCommand(redisClient *c, long long offset, int unit) {
|
||||
addReply(c, shared.cone);
|
||||
return;
|
||||
} else {
|
||||
setExpire(c->db,key,milliseconds);
|
||||
setExpire(c->db,key,when);
|
||||
addReply(c,shared.cone);
|
||||
signalModifiedKey(c->db,key);
|
||||
server.dirty++;
|
||||
|
Loading…
Reference in New Issue
Block a user