mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-22 16:18:28 -05:00
Add SIGINT handler to redis-cli --bigkeys, --memkeys, --hotkeys, --scan (#10736)
Finish current loop and display the scanned keys summery on SIGINT (Ctrl-C) signal. It will also prepend the current scanned percentage to the scanned keys summery 1st line. In this commit I've renamed and relocated `intrinsicLatencyModeStop` function as I'm using the exact same logic.
This commit is contained in:
parent
60250f50c2
commit
00a9d6b314
@ -8220,6 +8220,11 @@ static void getKeySizes(redisReply *keys, typeinfo **types,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void longStatLoopModeStop(int s) {
|
||||||
|
UNUSED(s);
|
||||||
|
force_cancel_loop = 1;
|
||||||
|
}
|
||||||
|
|
||||||
static void findBigKeys(int memkeys, unsigned memkeys_samples) {
|
static void findBigKeys(int memkeys, unsigned memkeys_samples) {
|
||||||
unsigned long long sampled = 0, total_keys, totlen=0, *sizes=NULL, it=0, scan_loops = 0;
|
unsigned long long sampled = 0, total_keys, totlen=0, *sizes=NULL, it=0, scan_loops = 0;
|
||||||
redisReply *reply, *keys;
|
redisReply *reply, *keys;
|
||||||
@ -8237,6 +8242,7 @@ static void findBigKeys(int memkeys, unsigned memkeys_samples) {
|
|||||||
typeinfo_add(types_dict, "zset", &type_zset);
|
typeinfo_add(types_dict, "zset", &type_zset);
|
||||||
typeinfo_add(types_dict, "stream", &type_stream);
|
typeinfo_add(types_dict, "stream", &type_stream);
|
||||||
|
|
||||||
|
signal(SIGINT, longStatLoopModeStop);
|
||||||
/* Total keys pre scanning */
|
/* Total keys pre scanning */
|
||||||
total_keys = getDbSize();
|
total_keys = getDbSize();
|
||||||
|
|
||||||
@ -8315,14 +8321,14 @@ static void findBigKeys(int memkeys, unsigned memkeys_samples) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
freeReplyObject(reply);
|
freeReplyObject(reply);
|
||||||
} while(it != 0);
|
} while(force_cancel_loop == 0 && it != 0);
|
||||||
|
|
||||||
if(types) zfree(types);
|
if(types) zfree(types);
|
||||||
if(sizes) zfree(sizes);
|
if(sizes) zfree(sizes);
|
||||||
|
|
||||||
/* We're done */
|
/* We're done */
|
||||||
printf("\n-------- summary -------\n\n");
|
printf("\n-------- summary -------\n\n");
|
||||||
|
if (force_cancel_loop) printf("[%05.2f%%] ", pct);
|
||||||
printf("Sampled %llu keys in the keyspace!\n", sampled);
|
printf("Sampled %llu keys in the keyspace!\n", sampled);
|
||||||
printf("Total key length in bytes is %llu (avg len %.2f)\n\n",
|
printf("Total key length in bytes is %llu (avg len %.2f)\n\n",
|
||||||
totlen, totlen ? (double)totlen/sampled : 0);
|
totlen, totlen ? (double)totlen/sampled : 0);
|
||||||
@ -8401,6 +8407,7 @@ static void findHotKeys(void) {
|
|||||||
unsigned int arrsize = 0, i, k;
|
unsigned int arrsize = 0, i, k;
|
||||||
double pct;
|
double pct;
|
||||||
|
|
||||||
|
signal(SIGINT, longStatLoopModeStop);
|
||||||
/* Total keys pre scanning */
|
/* Total keys pre scanning */
|
||||||
total_keys = getDbSize();
|
total_keys = getDbSize();
|
||||||
|
|
||||||
@ -8466,13 +8473,13 @@ static void findHotKeys(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
freeReplyObject(reply);
|
freeReplyObject(reply);
|
||||||
} while(it != 0);
|
} while(force_cancel_loop ==0 && it != 0);
|
||||||
|
|
||||||
if (freqs) zfree(freqs);
|
if (freqs) zfree(freqs);
|
||||||
|
|
||||||
/* We're done */
|
/* We're done */
|
||||||
printf("\n-------- summary -------\n\n");
|
printf("\n-------- summary -------\n\n");
|
||||||
|
if(force_cancel_loop)printf("[%05.2f%%] ",pct);
|
||||||
printf("Sampled %llu keys in the keyspace!\n", sampled);
|
printf("Sampled %llu keys in the keyspace!\n", sampled);
|
||||||
|
|
||||||
for (i=1; i<= HOTKEYS_SAMPLE; i++) {
|
for (i=1; i<= HOTKEYS_SAMPLE; i++) {
|
||||||
@ -8643,7 +8650,7 @@ static void statMode(void) {
|
|||||||
static void scanMode(void) {
|
static void scanMode(void) {
|
||||||
redisReply *reply;
|
redisReply *reply;
|
||||||
unsigned long long cur = 0;
|
unsigned long long cur = 0;
|
||||||
|
signal(SIGINT, longStatLoopModeStop);
|
||||||
do {
|
do {
|
||||||
reply = sendScan(&cur);
|
reply = sendScan(&cur);
|
||||||
for (unsigned int j = 0; j < reply->element[1]->elements; j++) {
|
for (unsigned int j = 0; j < reply->element[1]->elements; j++) {
|
||||||
@ -8658,7 +8665,7 @@ static void scanMode(void) {
|
|||||||
}
|
}
|
||||||
freeReplyObject(reply);
|
freeReplyObject(reply);
|
||||||
if (config.interval) usleep(config.interval);
|
if (config.interval) usleep(config.interval);
|
||||||
} while(cur != 0);
|
} while(force_cancel_loop == 0 && cur != 0);
|
||||||
|
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
@ -8785,11 +8792,6 @@ unsigned long compute_something_fast(void) {
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void intrinsicLatencyModeStop(int s) {
|
|
||||||
UNUSED(s);
|
|
||||||
force_cancel_loop = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sigIntHandler(int s) {
|
static void sigIntHandler(int s) {
|
||||||
UNUSED(s);
|
UNUSED(s);
|
||||||
|
|
||||||
@ -8807,7 +8809,7 @@ static void intrinsicLatencyMode(void) {
|
|||||||
|
|
||||||
run_time = (long long)config.intrinsic_latency_duration * 1000000;
|
run_time = (long long)config.intrinsic_latency_duration * 1000000;
|
||||||
test_end = ustime() + run_time;
|
test_end = ustime() + run_time;
|
||||||
signal(SIGINT, intrinsicLatencyModeStop);
|
signal(SIGINT, longStatLoopModeStop);
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
long long start, end, latency;
|
long long start, end, latency;
|
||||||
|
Loading…
Reference in New Issue
Block a user