#include <sys/time.h>
#include <sys/types.h>
#include <sys/types.h>
+#include <unistd.h>
+
+#include <iostream>
#include <libmemcached/memcached.h>
unsigned int *actual_loaded);
void flush_all(memcached_st *memc);
-static int opt_binary= 0;
+static bool opt_binary= 0;
static int opt_verbose= 0;
static int opt_flush= 0;
static int opt_non_blocking_io= 0;
static unsigned int opt_concurrency= 0;
static int opt_displayflag= 0;
static char *opt_servers= NULL;
-static int opt_udp_io= 0;
+static bool opt_udp_io= false;
test_t opt_test= SET_TEST;
extern "C" {
-static void *run_task(void *p)
+static __attribute__((noreturn)) void *run_task(void *p)
{
thread_context_st *context= (thread_context_st *)p;
memcached_st *memc= memcached_create(NULL);
+ memcached_server_push(memc, servers);
+
/* We need to set udp behavior before adding servers to the client */
if (opt_udp_io)
{
- memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_USE_UDP,
- (uint64_t)opt_udp_io);
- for (uint32_t x= 0; x < memcached_server_list_count(servers); x++ )
+ if (memcached_failed(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_USE_UDP, opt_udp_io)))
{
- servers[x].type= MEMCACHED_CONNECTION_UDP;
+ std::cerr << "Failed to enable UDP." << std::endl;
+ memcached_free(memc);
+ exit(EXIT_FAILURE);
}
}
- memcached_server_push(memc, servers);
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL,
(uint64_t)opt_binary);
if (opt_flush)
+ {
flush_all(memc);
+ }
if (opt_createial_load)
+ {
pairs= load_create_data(memc, opt_createial_load, &actual_loaded);
+ }
char **keys= static_cast<char **>(calloc(actual_loaded, sizeof(char*)));
size_t *key_lengths= static_cast<size_t *>(calloc(actual_loaded, sizeof(size_t)));
{
{(OPTIONSTRING)"concurrency", required_argument, NULL, OPT_SLAP_CONCURRENCY},
{(OPTIONSTRING)"debug", no_argument, &opt_verbose, OPT_DEBUG},
+ {(OPTIONSTRING)"quiet", no_argument, NULL, OPT_QUIET},
{(OPTIONSTRING)"execute-number", required_argument, NULL, OPT_SLAP_EXECUTE_NUMBER},
{(OPTIONSTRING)"flag", no_argument, &opt_displayflag, OPT_FLAG},
{(OPTIONSTRING)"flush", no_argument, &opt_flush, OPT_FLUSH},
{0, 0, 0, 0},
};
+ bool opt_help= false;
+ bool opt_version= false;
int option_index= 0;
- int option_rv;
-
while (1)
{
- option_rv= getopt_long(argc, argv, "Vhvds:", long_options, &option_index);
+ int option_rv= getopt_long(argc, argv, "Vhvds:", long_options, &option_index);
+
if (option_rv == -1) break;
+
switch (option_rv)
{
case 0:
"does not currently support get ops.\n");
exit(1);
}
- opt_udp_io= 1;
+ opt_udp_io= true;
break;
case OPT_BINARY:
- opt_binary = 1;
+ opt_binary= true;
break;
case OPT_VERBOSE: /* --verbose or -v */
- opt_verbose = OPT_VERBOSE;
+ opt_verbose= OPT_VERBOSE;
break;
case OPT_DEBUG: /* --debug or -d */
break;
case OPT_VERSION: /* --version or -V */
- version_command(PROGRAM_NAME);
+ opt_version= true;
break;
case OPT_HELP: /* --help or -h */
- help_command(PROGRAM_NAME, PROGRAM_DESCRIPTION, long_options, help_options);
+ opt_help= true;
break;
case OPT_SERVERS: /* --servers or -s */
break;
case OPT_SLAP_TEST:
- if (!strcmp(optarg, "get"))
+ if (strcmp(optarg, "get") == 0)
{
if (opt_udp_io == 1)
{
fprintf(stderr, "You can not run a get test in UDP mode. UDP mode "
"does not currently support get ops.\n");
- exit(1);
+ exit(EXIT_FAILURE);
}
opt_test= GET_TEST ;
}
- else if (!strcmp(optarg, "set"))
+ else if (strcmp(optarg, "set") == 0)
{
opt_test= SET_TEST;
}
- else if (!strcmp(optarg, "mget"))
+ else if (strcmp(optarg, "mget") == 0)
{
opt_test= MGET_TEST;
}
else
{
fprintf(stderr, "Your test, %s, is not a known test\n", optarg);
- exit(1);
+ exit(EXIT_FAILURE);
}
break;
opt_createial_load= (unsigned int)strtoul(optarg, (char **)NULL, 10);
break;
+ case OPT_QUIET:
+ close_stdio();
+ break;
+
+
case '?':
/* getopt_long already printed an error message. */
- exit(1);
+ exit(EXIT_FAILURE);
default:
abort();
}
}
- if ((opt_test == GET_TEST or opt_test == MGET_TEST) && opt_createial_load == 0)
+ if (opt_version)
+ {
+ version_command(PROGRAM_NAME);
+ exit(EXIT_SUCCESS);
+ }
+
+ if (opt_help)
+ {
+ help_command(PROGRAM_NAME, PROGRAM_DESCRIPTION, long_options, help_options);
+ exit(EXIT_SUCCESS);
+ }
+
+ if ((opt_test == GET_TEST or opt_test == MGET_TEST) and opt_createial_load == 0)
opt_createial_load= DEFAULT_INITIAL_LOAD;
if (opt_execute_number == 0)