From e5fe66efe9f9b67ce6f9d06f919645756a588d6f Mon Sep 17 00:00:00 2001 From: antirez Date: Tue, 27 Aug 2013 11:52:12 +0200 Subject: DEBUG SDSLEN added. This command is only useful for low-level debugging of memory issues due to sds wasting memory as empty buffer at the end of the string. --- src/debug.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/debug.c b/src/debug.c index d8898b42a..3af9bdb89 100644 --- a/src/debug.c +++ b/src/debug.c @@ -294,6 +294,29 @@ void debugCommand(redisClient *c) { (void*)val, val->refcount, strenc, (long long) rdbSavedObjectLen(val), val->lru, estimateObjectIdleTime(val)); + } else if (!strcasecmp(c->argv[1]->ptr,"sdslen") && c->argc == 3) { + dictEntry *de; + robj *val; + sds key; + + if ((de = dictFind(c->db->dict,c->argv[2]->ptr)) == NULL) { + addReply(c,shared.nokeyerr); + return; + } + val = dictGetVal(de); + key = dictGetKey(de); + + if (val->type != REDIS_STRING || !sdsEncodedObject(val)) { + addReplyError(c,"Not an sds encoded string."); + } else { + addReplyStatusFormat(c, + "key_sds_len:%lld, key_sds_avail:%lld, " + "val_sds_len:%lld, val_sds_avail:%lld", + (long long) sdslen(key), + (long long) sdsavail(key), + (long long) sdslen(val->ptr), + (long long) sdsavail(val->ptr)); + } } else if (!strcasecmp(c->argv[1]->ptr,"populate") && c->argc == 3) { long keys, j; robj *key, *val; -- cgit v1.2.1