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;
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;
}
val = dictGetEntryVal(de);
- if (!server.vm_enabled || (val->storage == REDIS_VM_MEMORY ||
- val->storage == REDIS_VM_SWAPPING)) {
- char *strenc;
-
- strenc = strEncoding(val->encoding);
- addReplyStatusFormat(c,
- "Value at:%p refcount:%d "
- "encoding:%s serializedlength:%lld "
- "lru:%d lru_seconds_idle:%lu",
- (void*)val, val->refcount,
- strenc, (long long) rdbSavedObjectLen(val),
- val->lru, estimateObjectIdleTime(val));
- } else {
- vmpointer *vp = (vmpointer*) val;
- addReplyStatusFormat(c,
- "Value swapped at: page %llu "
- "using %llu pages",
- (unsigned long long) vp->page,
- (unsigned long long) vp->usedpages);
- }
- } else if (!strcasecmp(c->argv[1]->ptr,"swapin") && c->argc == 3) {
- lookupKeyRead(c->db,c->argv[2]);
- addReply(c,shared.ok);
- } else if (!strcasecmp(c->argv[1]->ptr,"swapout") && c->argc == 3) {
- dictEntry *de = dictFind(c->db->dict,c->argv[2]->ptr);
- robj *val;
- vmpointer *vp;
-
- if (!server.vm_enabled) {
- addReplyError(c,"Virtual Memory is disabled");
- return;
- }
- if (!de) {
- addReply(c,shared.nokeyerr);
- return;
- }
- val = dictGetEntryVal(de);
- /* Swap it */
- if (val->storage != REDIS_VM_MEMORY) {
- addReplyError(c,"This key is not in memory");
- } else if (val->refcount != 1) {
- addReplyError(c,"Object is shared");
- } else if ((vp = vmSwapObjectBlocking(val)) != NULL) {
- dictGetEntryVal(de) = vp;
- addReply(c,shared.ok);
- } else {
- addReply(c,shared.err);
- }
+ strenc = strEncoding(val->encoding);
+
+ addReplyStatusFormat(c,
+ "Value at:%p refcount:%d "
+ "encoding:%s serializedlength:%lld "
+ "lru:%d lru_seconds_idle:%lu",
+ (void*)val, val->refcount,
+ strenc, (long long) rdbSavedObjectLen(val),
+ val->lru, estimateObjectIdleTime(val));
} else if (!strcasecmp(c->argv[1]->ptr,"populate") && c->argc == 3) {
long keys, j;
robj *key, *val;
}
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
}