summaryrefslogtreecommitdiff
path: root/src/redis-benchmark.c
diff options
context:
space:
mode:
authorfilipe oliveira <filipecosta.90@gmail.com>2021-08-03 10:21:29 +0100
committerGitHub <noreply@github.com>2021-08-03 12:21:29 +0300
commit4aa927d16d4458124157bcc1d6a31b54df4f3a3f (patch)
tree184f3ae645a3e3e54ee8a52eed18bc006160ea0c /src/redis-benchmark.c
parent432c92d8df179a6a1aeae2df553c6b3fc810be76 (diff)
downloadredis-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.c23
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;