From 4aa927d16d4458124157bcc1d6a31b54df4f3a3f Mon Sep 17 00:00:00 2001 From: filipe oliveira Date: Tue, 3 Aug 2021 10:21:29 +0100 Subject: Enabled -x option (Read last argument from STDIN) on redis-benchmark (#9130) Add the -x option (Read last argument from STDIN) on redis-benchmark. Other changes: To be able to use the code from redis-cli some helper methods were moved to cli_common.(h|c) Co-authored-by: Oran Agra --- src/redis-benchmark.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'src/redis-benchmark.c') diff --git a/src/redis-benchmark.c b/src/redis-benchmark.c index 738aed5de..273c8373a 100644 --- a/src/redis-benchmark.c +++ b/src/redis-benchmark.c @@ -110,6 +110,7 @@ static struct config { int dbnum; sds dbnumstr; char *tests; + int stdinarg; /* get last arg from stdin. (-x option) */ char *auth; const char *user; int precision; @@ -1399,7 +1400,7 @@ static void genBenchmarkRandomData(char *data, int count) { } /* Returns number of consumed options. */ -int parseOptions(int argc, const char **argv) { +int parseOptions(int argc, char **argv) { int i; int lastarg; int exit_status = 1; @@ -1430,6 +1431,8 @@ int parseOptions(int argc, const char **argv) { } else if (!strcmp(argv[i],"-s")) { if (lastarg) goto invalid; config.hostsocket = strdup(argv[++i]); + } else if (!strcmp(argv[i],"-x")) { + config.stdinarg = 1; } else if (!strcmp(argv[i],"-a") ) { if (lastarg) goto invalid; config.auth = strdup(argv[++i]); @@ -1576,6 +1579,7 @@ usage: " -t Only run the comma separated list of tests. The test\n" " names are the same as the ones produced as output.\n" " -I Idle mode. Just open N idle connections and wait.\n" +" -x Read last argument from STDIN.\n" #ifdef USE_OPENSSL " --tls Establish a secure TLS connection.\n" " --sni Server name indication for TLS.\n" @@ -1673,7 +1677,7 @@ int test_is_selected(char *name) { return strstr(config.tests,buf) != NULL; } -int main(int argc, const char **argv) { +int main(int argc, char **argv) { int i; char *data, *cmd, *tag; int len; @@ -1706,6 +1710,7 @@ int main(int argc, const char **argv) { config.hostsocket = NULL; config.tests = NULL; config.dbnum = 0; + config.stdinarg = 0; config.auth = NULL; config.precision = DEFAULT_LATENCY_PRECISION; config.num_threads = 0; @@ -1812,14 +1817,24 @@ int main(int argc, const char **argv) { title = sdscatlen(title, " ", 1); title = sdscatlen(title, (char*)argv[i], strlen(argv[i])); } - + sds *sds_args = getSdsArrayFromArgv(argc, argv, 0); + if (!sds_args) { + printf("Invalid quoted string\n"); + return 1; + } + if (config.stdinarg) { + sds_args = sds_realloc(sds_args,(argc + 1) * sizeof(sds)); + sds_args[argc] = readArgFromStdin(); + argc++; + } do { - len = redisFormatCommandArgv(&cmd,argc,argv,NULL); + len = redisFormatCommandArgv(&cmd,argc,(const char**)sds_args,NULL); // adjust the datasize to the parsed command config.datasize = len; benchmark(title,cmd,len); free(cmd); } while(config.loop); + sdsfreesplitres(sds_args, argc); if (config.redis_config != NULL) freeRedisConfig(config.redis_config); return 0; -- cgit v1.2.1