]> git.saurik.com Git - redis.git/blobdiff - src/db.c
master-slave replication fixed, it was not listing any key using KEYS command in...
[redis.git] / src / db.c
index 7d2bf4af49be33d66e6ba1faac182bb6bc531b46..669fba13e8e7d7f6b12494920ef965ec735f372a 100644 (file)
--- a/src/db.c
+++ b/src/db.c
@@ -50,7 +50,7 @@ robj *lookupKey(redisDb *db, robj *key) {
             cacheScheduleIOGetFlags(db,key) & REDIS_IO_SAVEINPROG)
         {
             /* Need to wait for the key to get unbusy */
             cacheScheduleIOGetFlags(db,key) & REDIS_IO_SAVEINPROG)
         {
             /* Need to wait for the key to get unbusy */
-            redisLog(REDIS_WARNING,"Lookup found a key in SAVEINPROG state. Waiting. (Key was in the cache)");
+            redisLog(REDIS_DEBUG,"Lookup found a key in SAVEINPROG state. Waiting. (Key was in the cache)");
             lookupWaitBusyKey(db,key);
         }
         server.stat_keyspace_hits++;
             lookupWaitBusyKey(db,key);
         }
         server.stat_keyspace_hits++;
@@ -76,7 +76,7 @@ robj *lookupKey(redisDb *db, robj *key) {
             /* At this point we need to blocking load the key in memory.
              * The first thing we do is waiting here if the key is busy. */
             if (flags & REDIS_IO_SAVEINPROG) {
             /* At this point we need to blocking load the key in memory.
              * The first thing we do is waiting here if the key is busy. */
             if (flags & REDIS_IO_SAVEINPROG) {
-                redisLog(REDIS_WARNING,"Lookup found a key in SAVEINPROG state. Waiting (while force loading).");
+                redisLog(REDIS_DEBUG,"Lookup found a key in SAVEINPROG state. Waiting (while force loading).");
                 lookupWaitBusyKey(db,key);
             }
 
                 lookupWaitBusyKey(db,key);
             }
 
@@ -201,7 +201,8 @@ int dbDelete(redisDb *db, robj *key) {
     return dictDelete(db->dict,key->ptr) == DICT_OK;
 }
 
     return dictDelete(db->dict,key->ptr) == DICT_OK;
 }
 
-/* Empty the whole database */
+/* Empty the whole database.
+ * If diskstore is enabled this function will just flush the in-memory cache. */
 long long emptyDb() {
     int j;
     long long removed = 0;
 long long emptyDb() {
     int j;
     long long removed = 0;
@@ -210,6 +211,7 @@ long long emptyDb() {
         removed += dictSize(server.db[j].dict);
         dictEmpty(server.db[j].dict);
         dictEmpty(server.db[j].expires);
         removed += dictSize(server.db[j].dict);
         dictEmpty(server.db[j].dict);
         dictEmpty(server.db[j].expires);
+        if (server.ds_enabled) dictEmpty(server.db[j].io_negcache);
     }
     return removed;
 }
     }
     return removed;
 }
@@ -379,30 +381,6 @@ void typeCommand(redisClient *c) {
     addReplyStatus(c,type);
 }
 
     addReplyStatus(c,type);
 }
 
-void saveCommand(redisClient *c) {
-    if (server.bgsavechildpid != -1) {
-        addReplyError(c,"Background save already in progress");
-        return;
-    }
-    if (rdbSave(server.dbfilename) == REDIS_OK) {
-        addReply(c,shared.ok);
-    } else {
-        addReply(c,shared.err);
-    }
-}
-
-void bgsaveCommand(redisClient *c) {
-    if (server.bgsavechildpid != -1) {
-        addReplyError(c,"Background save already in progress");
-        return;
-    }
-    if (rdbSaveBackground(server.dbfilename) == REDIS_OK) {
-        addReplyStatus(c,"Background saving started");
-    } else {
-        addReply(c,shared.err);
-    }
-}
-
 void shutdownCommand(redisClient *c) {
     if (prepareForShutdown() == REDIS_OK)
         exit(0);
 void shutdownCommand(redisClient *c) {
     if (prepareForShutdown() == REDIS_OK)
         exit(0);
@@ -549,6 +527,8 @@ void propagateExpire(redisDb *db, robj *key) {
 int expireIfNeeded(redisDb *db, robj *key) {
     time_t when = getExpire(db,key);
 
 int expireIfNeeded(redisDb *db, robj *key) {
     time_t when = getExpire(db,key);
 
+    if (when < 0) return 0; /* No expire for this key */
+
     /* If we are running in the context of a slave, return ASAP:
      * the slave key expiration is controlled by the master that will
      * send us synthesized DEL operations for expired keys.
     /* If we are running in the context of a slave, return ASAP:
      * the slave key expiration is controlled by the master that will
      * send us synthesized DEL operations for expired keys.
@@ -560,8 +540,6 @@ int expireIfNeeded(redisDb *db, robj *key) {
         return time(NULL) > when;
     }
 
         return time(NULL) > when;
     }
 
-    if (when < 0) return 0;
-
     /* Return when this key has not expired */
     if (time(NULL) <= when) return 0;
 
     /* Return when this key has not expired */
     if (time(NULL) <= when) return 0;