]> git.saurik.com Git - redis.git/commitdiff
diskstore directory structure creation
authorantirez <antirez@gmail.com>
Wed, 29 Dec 2010 22:00:00 +0000 (23:00 +0100)
committerantirez <antirez@gmail.com>
Wed, 29 Dec 2010 22:00:00 +0000 (23:00 +0100)
src/diskstore.c
src/dscache.c
src/redis.c

index 0eece403d98da86e08fa519dcac7ede0112d9730..cfb8ae66040d9d2d6bbe0e6b68130e49ed0b75b2 100644 (file)
 #include <fcntl.h>
 #include <sys/stat.h>
 
+int create256dir(char *prefix) {
+    char buf[1024];
+    int j;
+
+    for (j = 0; j < 256; j++) {
+        snprintf(buf,sizeof(buf),"%s%02x",prefix,j);
+        if (mkdir(buf,0755) == -1) {
+            redisLog(REDIS_WARNING,"Error creating dir %s for diskstore: %s",
+                buf,strerror(errno));
+            return REDIS_ERR;
+        }
+    }
+    return REDIS_OK;
+}
+
 int dsOpen(void) {
     struct stat sb;
-    int retval;
+    int retval, j;
     char *path = server.ds_path;
+    char buf[1024];
 
     if ((retval = stat(path,&sb) == -1) && errno != ENOENT) {
         redisLog(REDIS_WARNING, "Error opening disk store at %s: %s",
@@ -97,11 +113,20 @@ int dsOpen(void) {
     /* New disk store, create the directory structure now, as creating
      * them in a lazy way is not a good idea, after very few insertions
      * we'll need most of the 65536 directories anyway. */
-    if (mkdir(path,0644) == -1) {
+    if (mkdir(path,0755) == -1) {
         redisLog(REDIS_WARNING,"Disk store init failed creating dir %s: %s",
             path, strerror(errno));
         return REDIS_ERR;
     }
+    /* Create the top level 256 directories */
+    snprintf(buf,sizeof(buf),"%s/",path);
+    if (create256dir(buf) == REDIS_ERR) return REDIS_ERR;
+
+    /* For every 256 top level dir, create 256 nested dirs */
+    for (j = 0; j < 256; j++) {
+        snprintf(buf,sizeof(buf),"%s/%02x/",path,j);
+        if (create256dir(buf) == REDIS_ERR) return REDIS_ERR;
+    }
     return REDIS_OK;
 }
 
index fca2cca9b5f6688200df3b273ab07adc801efb4b..24d485fb25680db5d10d243592d70b28d1e876a9 100644 (file)
@@ -457,6 +457,7 @@ void cacheScheduleForFlush(redisDb *db, robj *key) {
             val->storage = REDIS_DS_DIRTY;
     }
 
+    redisLog(REDIS_DEBUG,"Scheduling key %s for saving",key->ptr);
     dk = zmalloc(sizeof(*dk));
     dk->db = db;
     dk->key = key;
@@ -477,6 +478,8 @@ void cacheCron(void) {
             struct dictEntry *de;
             robj *val;
 
+            redisLog(REDIS_DEBUG,"Creating IO Job to save key %s",dk->key->ptr);
+
             /* Lookup the key. We need to check if it's still here and
              * possibly access to the value. */
             de = dictFind(dk->db->dict,dk->key->ptr);
index 8680797ab19be84d8c95cc25e5955cb7e9ab4f4b..652d18ca41e994b6e6133d06cf2b6ae3559de7e3 100644 (file)
@@ -1493,7 +1493,9 @@ int main(int argc, char **argv) {
     linuxOvercommitMemoryWarning();
 #endif
     start = time(NULL);
-    if (server.appendonly) {
+    if (server.ds_enabled) {
+        redisLog(REDIS_NOTICE,"Running with disk back end");
+    } else if (server.appendonly) {
         if (loadAppendOnlyFile(server.appendfilename) == REDIS_OK)
             redisLog(REDIS_NOTICE,"DB loaded from append only file: %ld seconds",time(NULL)-start);
     } else {