X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/3be00d7ed619c12795da54553230aee15c555532..cc4c964b33ac108c9541e31eb2e2420addf9a82e:/src/debug.c diff --git a/src/debug.c b/src/debug.c index b44175d1..c1fc26cf 100644 --- a/src/debug.c +++ b/src/debug.c @@ -177,7 +177,26 @@ void computeDatasetDigest(unsigned char *final) { void debugCommand(redisClient *c) { if (!strcasecmp(c->argv[1]->ptr,"segfault")) { *((char*)-1) = 'x'; + } else if (!strcasecmp(c->argv[1]->ptr,"flushcache")) { + if (!server.ds_enabled) { + addReplyError(c, "DEBUG FLUSHCACHE called with diskstore off."); + return; + } else if (server.bgsavethread != (pthread_t) -1) { + addReplyError(c, "Can't flush cache while BGSAVE is in progress."); + return; + } else { + /* To flush the whole cache we need to wait for everything to + * be flushed on disk... */ + cacheForcePointInTime(); + emptyDb(); + addReply(c,shared.ok); + return; + } } else if (!strcasecmp(c->argv[1]->ptr,"reload")) { + if (server.ds_enabled) { + addReply(c,shared.ok); + return; + } if (rdbSave(server.dbfilename) != REDIS_OK) { addReply(c,shared.err); return; @@ -198,11 +217,12 @@ void debugCommand(redisClient *c) { redisLog(REDIS_WARNING,"Append Only File loaded by DEBUG LOADAOF"); addReply(c,shared.ok); } else if (!strcasecmp(c->argv[1]->ptr,"object") && c->argc == 3) { - dictEntry *de = dictFind(c->db->dict,c->argv[2]->ptr); + dictEntry *de; robj *val; char *strenc; - if (!de) { + if (server.ds_enabled) lookupKeyRead(c->db,c->argv[2]); + if ((de = dictFind(c->db->dict,c->argv[2]->ptr)) == NULL) { addReply(c,shared.nokeyerr); return; } @@ -262,10 +282,12 @@ void _redisAssert(char *estr, char *file, int line) { } void _redisPanic(char *msg, char *file, int line) { + redisLog(REDIS_WARNING,"------------------------------------------------"); redisLog(REDIS_WARNING,"!!! Software Failure. Press left mouse button to continue"); redisLog(REDIS_WARNING,"Guru Meditation: %s #%s:%d",msg,file,line); #ifdef HAVE_BACKTRACE redisLog(REDIS_WARNING,"(forcing SIGSEGV in order to print the stack trace)"); + redisLog(REDIS_WARNING,"------------------------------------------------"); *((char*)-1) = 'x'; #endif }