MCPcopy Create free account
hub / github.com/F-Stack/f-stack / getKeySizes

Function getKeySizes

app/redis-6.2.6/src/redis-cli.c:7596–7653  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7594}
7595
7596static void getKeySizes(redisReply *keys, typeinfo **types,
7597 unsigned long long *sizes, int memkeys,
7598 unsigned memkeys_samples)
7599{
7600 redisReply *reply;
7601 unsigned int i;
7602
7603 /* Pipeline size commands */
7604 for(i=0;i<keys->elements;i++) {
7605 /* Skip keys that disappeared between SCAN and TYPE (or unknown types when not in memkeys mode) */
7606 if(!types[i] || (!types[i]->sizecmd && !memkeys))
7607 continue;
7608
7609 if (!memkeys) {
7610 const char* argv[] = {types[i]->sizecmd, keys->element[i]->str};
7611 size_t lens[] = {strlen(types[i]->sizecmd), keys->element[i]->len};
7612 redisAppendCommandArgv(context, 2, argv, lens);
7613 } else if (memkeys_samples==0) {
7614 const char* argv[] = {"MEMORY", "USAGE", keys->element[i]->str};
7615 size_t lens[] = {6, 5, keys->element[i]->len};
7616 redisAppendCommandArgv(context, 3, argv, lens);
7617 } else {
7618 sds samplesstr = sdsfromlonglong(memkeys_samples);
7619 const char* argv[] = {"MEMORY", "USAGE", keys->element[i]->str, "SAMPLES", samplesstr};
7620 size_t lens[] = {6, 5, keys->element[i]->len, 7, sdslen(samplesstr)};
7621 redisAppendCommandArgv(context, 5, argv, lens);
7622 sdsfree(samplesstr);
7623 }
7624 }
7625
7626 /* Retrieve sizes */
7627 for(i=0;i<keys->elements;i++) {
7628 /* Skip keys that disappeared between SCAN and TYPE (or unknown types when not in memkeys mode) */
7629 if(!types[i] || (!types[i]->sizecmd && !memkeys)) {
7630 sizes[i] = 0;
7631 continue;
7632 }
7633
7634 /* Retrieve size */
7635 if(redisGetReply(context, (void**)&reply)!=REDIS_OK) {
7636 fprintf(stderr, "Error getting size for key '%s' (%d: %s)\n",
7637 keys->element[i]->str, context->err, context->errstr);
7638 exit(1);
7639 } else if(reply->type != REDIS_REPLY_INTEGER) {
7640 /* Theoretically the key could have been removed and
7641 * added as a different type between TYPE and SIZE */
7642 fprintf(stderr,
7643 "Warning: %s on '%s' failed (may have changed type)\n",
7644 !memkeys? types[i]->sizecmd: "MEMORY USAGE",
7645 keys->element[i]->str);
7646 sizes[i] = 0;
7647 } else {
7648 sizes[i] = reply->integer;
7649 }
7650
7651 freeReplyObject(reply);
7652 }
7653}

Callers 1

findBigKeysFunction · 0.85

Calls 6

redisAppendCommandArgvFunction · 0.85
sdsfromlonglongFunction · 0.85
sdslenFunction · 0.85
sdsfreeFunction · 0.85
redisGetReplyFunction · 0.85
freeReplyObjectFunction · 0.85

Tested by

no test coverage detected