summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOran Agra <oran@redislabs.com>2020-07-07 16:15:44 +0300
committerOran Agra <oran@redislabs.com>2020-07-10 10:07:47 +0300
commitb23e2510364bd13d9988921235c400c5657a8438 (patch)
tree4f8f0d5448e346435403b498791fb07bf72681db
parent6f8a8647de5b16ff937dc25046151619a2eafabb (diff)
downloadredis-b23e2510364bd13d9988921235c400c5657a8438.tar.gz
redis-cli --hotkeys fixed to handle non-printable key names
-rw-r--r--src/redis-cli.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/redis-cli.c b/src/redis-cli.c
index e1f40373a..c5ba48447 100644
--- a/src/redis-cli.c
+++ b/src/redis-cli.c
@@ -7481,21 +7481,27 @@ static void getKeyFreqs(redisReply *keys, unsigned long long *freqs) {
/* Pipeline OBJECT freq commands */
for(i=0;i<keys->elements;i++) {
- redisAppendCommand(context, "OBJECT freq %s", keys->element[i]->str);
+ const char* argv[] = {"OBJECT", "FREQ", keys->element[i]->str};
+ size_t lens[] = {6, 4, keys->element[i]->len};
+ redisAppendCommandArgv(context, 3, argv, lens);
}
/* Retrieve freqs */
for(i=0;i<keys->elements;i++) {
if(redisGetReply(context, (void**)&reply)!=REDIS_OK) {
+ sds keyname = sdscatrepr(sdsempty(), keys->element[i]->str, keys->element[i]->len);
fprintf(stderr, "Error getting freq for key '%s' (%d: %s)\n",
- keys->element[i]->str, context->err, context->errstr);
+ keyname, context->err, context->errstr);
+ sdsfree(keyname);
exit(1);
} else if(reply->type != REDIS_REPLY_INTEGER) {
if(reply->type == REDIS_REPLY_ERROR) {
fprintf(stderr, "Error: %s\n", reply->str);
exit(1);
} else {
- fprintf(stderr, "Warning: OBJECT freq on '%s' failed (may have been deleted)\n", keys->element[i]->str);
+ sds keyname = sdscatrepr(sdsempty(), keys->element[i]->str, keys->element[i]->len);
+ fprintf(stderr, "Warning: OBJECT freq on '%s' failed (may have been deleted)\n", keyname);
+ sdsfree(keyname);
freqs[i] = 0;
}
} else {
@@ -7566,10 +7572,10 @@ static void findHotKeys(void) {
memmove(hotkeys,hotkeys+1,sizeof(hotkeys[0])*k);
}
counters[k] = freqs[i];
- hotkeys[k] = sdsnew(keys->element[i]->str);
+ hotkeys[k] = sdscatrepr(sdsempty(), keys->element[i]->str, keys->element[i]->len);
printf(
"[%05.2f%%] Hot key '%s' found so far with counter %llu\n",
- pct, keys->element[i]->str, freqs[i]);
+ pct, hotkeys[k], freqs[i]);
}
/* Sleep if we've been directed to do so */