From 1609a1c42d8f49bada5375a8756a2ca56609ece8 Mon Sep 17 00:00:00 2001 From: antirez Date: Thu, 30 Dec 2010 15:55:24 +0100 Subject: [PATCH] fixed a few bugs in DS store, now it's somewhat about able to reply to 'GET foo' with a bogus value. --- src/diskstore.c | 1 + src/dscache.c | 12 ++++-------- src/redis.c | 4 +++- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/diskstore.c b/src/diskstore.c index 043adc4b..ae23b8ed 100644 --- a/src/diskstore.c +++ b/src/diskstore.c @@ -142,6 +142,7 @@ int dsSet(redisDb *db, robj *key, robj *val) { } robj *dsGet(redisDb *db, robj *key) { + return createStringObject("foo",3); } int dsDel(redisDb *db, robj *key) { diff --git a/src/dscache.c b/src/dscache.c index 7273f7ff..d24ec77c 100644 --- a/src/dscache.c +++ b/src/dscache.c @@ -263,7 +263,6 @@ void vmThreadedIOCompletedJob(aeEventLoop *el, int fd, void *privdata, while((retval = read(fd,buf,1)) == 1) { iojob *j; listNode *ln; - struct dictEntry *de; redisLog(REDIS_DEBUG,"Processing I/O completed job"); @@ -284,11 +283,10 @@ void vmThreadedIOCompletedJob(aeEventLoop *el, int fd, void *privdata, redisLog(REDIS_DEBUG,"COMPLETED Job type %s, key: %s", (j->type == REDIS_IOJOB_LOAD) ? "load" : "save", (unsigned char*)j->key->ptr); - de = dictFind(j->db->dict,j->key->ptr); - redisAssert(de != NULL); if (j->type == REDIS_IOJOB_LOAD) { /* Create the key-value pair in the in-memory database */ dbAdd(j->db,j->key,j->val); + incrRefCount(j->val); /* Handle clients waiting for this key to be loaded. */ handleClientsBlockedOnSwappedKey(j->db,j->key); freeIOJob(j); @@ -326,11 +324,9 @@ void *IOThreadEntryPoint(void *arg) { lockThreadedIO(); if (listLength(server.io_newjobs) == 0) { /* No new jobs in queue, exit. */ - redisLog(REDIS_DEBUG,"Thread %ld exiting, nothing to do", - (long) pthread_self()); - server.io_active_threads--; unlockThreadedIO(); - return NULL; + sleep(1); + continue; } ln = listFirst(server.io_newjobs); j = ln->value; @@ -437,7 +433,7 @@ void dsCreateIOJob(int type, redisDb *db, robj *key, robj *val) { j->key = key; incrRefCount(key); j->val = val; - incrRefCount(val); + if (val) incrRefCount(val); lockThreadedIO(); queueIOJob(j); diff --git a/src/redis.c b/src/redis.c index 2ca37a3b..36b7c853 100644 --- a/src/redis.c +++ b/src/redis.c @@ -1050,7 +1050,9 @@ int prepareForShutdown() { kill(server.bgsavechildpid,SIGKILL); rdbRemoveTempFile(server.bgsavechildpid); } - if (server.appendonly) { + if (server.ds_enabled) { + /* FIXME: flush all objects on disk */ + } else if (server.appendonly) { /* Append only file: fsync() the AOF and exit */ aof_fsync(server.appendfd); } else if (server.saveparamslen > 0) {