From 1c894f5989b40e19319df8d4cf01fc51238f8e80 Mon Sep 17 00:00:00 2001 From: antirez Date: Fri, 4 Apr 2014 15:34:59 +0200 Subject: [PATCH] Make SLOWLOG argument truncation play well with LZF encoding. --- src/slowlog.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/slowlog.c b/src/slowlog.c index ff6ccf47..005c8daa 100644 --- a/src/slowlog.c +++ b/src/slowlog.c @@ -63,15 +63,17 @@ slowlogEntry *slowlogCreateEntry(robj **argv, int argc, long long duration) { } else { /* Trim too long strings as well... */ if (argv[j]->type == REDIS_STRING && - sdsEncodedObject(argv[j]) && - sdslen(argv[j]->ptr) > SLOWLOG_ENTRY_MAX_STRING) + (sdsEncodedObject(argv[j]) || lzfEncodedObject(argv[j])) && + stringObjectLen(argv[j]) > SLOWLOG_ENTRY_MAX_STRING) { - sds s = sdsnewlen(argv[j]->ptr, SLOWLOG_ENTRY_MAX_STRING); + robj *o = getDecodedObject(argv[j]); + sds s = sdsnewlen(o->ptr, SLOWLOG_ENTRY_MAX_STRING); s = sdscatprintf(s,"... (%lu more bytes)", (unsigned long) - sdslen(argv[j]->ptr) - SLOWLOG_ENTRY_MAX_STRING); + stringObjectLen(argv[j]) - SLOWLOG_ENTRY_MAX_STRING); se->argv[j] = createObject(REDIS_STRING,s); + decrRefCount(o); } else { se->argv[j] = argv[j]; incrRefCount(argv[j]);