diff options
Diffstat (limited to 'src/db.c')
-rw-r--r-- | src/db.c | 22 |
1 files changed, 12 insertions, 10 deletions
@@ -226,7 +226,7 @@ void dbOverwrite(redisDb *db, robj *key, robj *val) { /* Although the key is not really deleted from the database, we regard overwrite as two steps of unlink+add, so we still need to call the unlink callback of the module. */ - moduleNotifyKeyUnlink(key,val); + moduleNotifyKeyUnlink(key,old); dictSetVal(db->dict, de, val); if (server.lazyfree_lazy_server_del) { @@ -595,21 +595,23 @@ void signalFlushedDb(int dbid, int async) { /* Return the set of flags to use for the emptyDb() call for FLUSHALL * and FLUSHDB commands. * - * Currently the command just attempts to parse the "ASYNC" option. It - * also checks if the command arity is wrong. + * sync: flushes the database in an sync manner. + * async: flushes the database in an async manner. + * no option: determine sync or async according to the value of lazyfree-lazy-user-flush. * * On success C_OK is returned and the flags are stored in *flags, otherwise * C_ERR is returned and the function sends an error to the client. */ int getFlushCommandFlags(client *c, int *flags) { /* Parse the optional ASYNC option. */ - if (c->argc > 1) { - if (c->argc > 2 || strcasecmp(c->argv[1]->ptr,"async")) { - addReplyErrorObject(c,shared.syntaxerr); - return C_ERR; - } + if (c->argc == 2 && !strcasecmp(c->argv[1]->ptr,"sync")) { + *flags = EMPTYDB_NO_FLAGS; + } else if (c->argc == 2 && !strcasecmp(c->argv[1]->ptr,"async")) { *flags = EMPTYDB_ASYNC; + } else if (c->argc == 1) { + *flags = server.lazyfree_lazy_user_flush ? EMPTYDB_ASYNC : EMPTYDB_NO_FLAGS; } else { - *flags = EMPTYDB_NO_FLAGS; + addReplyErrorObject(c,shared.syntaxerr); + return C_ERR; } return C_OK; } @@ -951,7 +953,7 @@ void scanGenericCommand(client *c, robj *o, unsigned long cursor) { int filter = 0; /* Filter element if it does not match the pattern. */ - if (!filter && use_pattern) { + if (use_pattern) { if (sdsEncodedObject(kobj)) { if (!stringmatchlen(pat, patlen, kobj->ptr, sdslen(kobj->ptr), 0)) filter = 1; |