diff options
author | filipe oliveira <filipecosta.90@gmail.com> | 2021-08-03 10:21:29 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-03 12:21:29 +0300 |
commit | 4aa927d16d4458124157bcc1d6a31b54df4f3a3f (patch) | |
tree | 184f3ae645a3e3e54ee8a52eed18bc006160ea0c /src/redis-benchmark.c | |
parent | 432c92d8df179a6a1aeae2df553c6b3fc810be76 (diff) | |
download | redis-4aa927d16d4458124157bcc1d6a31b54df4f3a3f.tar.gz |
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 <oran@redislabs.com>
Diffstat (limited to 'src/redis-benchmark.c')
-rw-r--r-- | src/redis-benchmark.c | 23 |
1 files changed, 19 insertions, 4 deletions
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 <tests> 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 <host> 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; |