projects
/
m6w6
/
libmemcached
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
Sign fix for variable (this should solve the solaris warning).
[m6w6/libmemcached]
/
clients
/
memslap.c
diff --git
a/clients/memslap.c
b/clients/memslap.c
index 3ed6a2b5a664d15feeca54e015ff9b2eb958a422..88a0f21ca25be9b4dde03b8d9b43613d8d368ff5 100644
(file)
--- a/
clients/memslap.c
+++ b/
clients/memslap.c
@@
-13,7
+13,22
@@
* Mingqiang Zhuang <mingqiangzhuang@hengtiansoft.com>
*
*/
* Mingqiang Zhuang <mingqiangzhuang@hengtiansoft.com>
*
*/
+#include "config.h"
+
+#include <stdlib.h>
#include <getopt.h>
#include <getopt.h>
+#include <limits.h>
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
#include "ms_sigsegv.h"
#include "ms_setting.h"
#include "ms_sigsegv.h"
#include "ms_setting.h"
@@
-23,56
+38,65
@@
#define PROGRAM_DESCRIPTION \
"Generates workload against memcached servers."
#define PROGRAM_DESCRIPTION \
"Generates workload against memcached servers."
+#ifdef __sun
+ /* For some odd reason the option struct on solaris defines the argument
+ * as char* and not const char*
+ */
+#define OPTIONSTRING char*
+#else
+#define OPTIONSTRING const char*
+#endif
+
/* options */
static struct option long_options[]=
{
/* options */
static struct option long_options[]=
{
- { "servers", required_argument, NULL,
+ {
(OPTIONSTRING)
"servers", required_argument, NULL,
OPT_SERVERS },
OPT_SERVERS },
- { "threads", required_argument, NULL,
+ {
(OPTIONSTRING)
"threads", required_argument, NULL,
OPT_THREAD_NUMBER },
OPT_THREAD_NUMBER },
- { "concurrency", required_argument, NULL,
+ {
(OPTIONSTRING)
"concurrency", required_argument, NULL,
OPT_CONCURRENCY },
OPT_CONCURRENCY },
- { "conn_sock", required_argument, NULL,
+ {
(OPTIONSTRING)
"conn_sock", required_argument, NULL,
OPT_SOCK_PER_CONN },
OPT_SOCK_PER_CONN },
- { "execute_number", required_argument, NULL,
+ {
(OPTIONSTRING)
"execute_number", required_argument, NULL,
OPT_EXECUTE_NUMBER },
OPT_EXECUTE_NUMBER },
- { "time", required_argument, NULL,
+ {
(OPTIONSTRING)
"time", required_argument, NULL,
OPT_TIME },
OPT_TIME },
- { "cfg_cmd", required_argument, NULL,
+ {
(OPTIONSTRING)
"cfg_cmd", required_argument, NULL,
OPT_CONFIG_CMD },
OPT_CONFIG_CMD },
- { "win_size", required_argument, NULL,
+ {
(OPTIONSTRING)
"win_size", required_argument, NULL,
OPT_WINDOW_SIZE },
OPT_WINDOW_SIZE },
- { "fixed_size", required_argument, NULL,
+ {
(OPTIONSTRING)
"fixed_size", required_argument, NULL,
OPT_FIXED_LTH },
OPT_FIXED_LTH },
- { "verify", required_argument, NULL,
+ {
(OPTIONSTRING)
"verify", required_argument, NULL,
OPT_VERIFY },
OPT_VERIFY },
- { "division", required_argument, NULL,
+ {
(OPTIONSTRING)
"division", required_argument, NULL,
OPT_GETS_DIVISION },
OPT_GETS_DIVISION },
- { "stat_freq", required_argument, NULL,
+ {
(OPTIONSTRING)
"stat_freq", required_argument, NULL,
OPT_STAT_FREQ },
OPT_STAT_FREQ },
- { "exp_verify", required_argument, NULL,
+ {
(OPTIONSTRING)
"exp_verify", required_argument, NULL,
OPT_EXPIRE },
OPT_EXPIRE },
- { "overwrite", required_argument, NULL,
+ {
(OPTIONSTRING)
"overwrite", required_argument, NULL,
OPT_OVERWRITE },
OPT_OVERWRITE },
- { "reconnect", no_argument, NULL,
+ {
(OPTIONSTRING)
"reconnect", no_argument, NULL,
OPT_RECONNECT },
OPT_RECONNECT },
- { "udp", no_argument, NULL,
+ {
(OPTIONSTRING)
"udp", no_argument, NULL,
OPT_UDP },
OPT_UDP },
- { "facebook", no_argument, NULL,
+ {
(OPTIONSTRING)
"facebook", no_argument, NULL,
OPT_FACEBOOK_TEST },
OPT_FACEBOOK_TEST },
- { "binary", no_argument, NULL,
+ {
(OPTIONSTRING)
"binary", no_argument, NULL,
OPT_BINARY_PROTOCOL },
OPT_BINARY_PROTOCOL },
- { "tps", required_argument, NULL,
+ {
(OPTIONSTRING)
"tps", required_argument, NULL,
OPT_TPS },
OPT_TPS },
- { "rep_write", required_argument, NULL,
+ {
(OPTIONSTRING)
"rep_write", required_argument, NULL,
OPT_REP_WRITE_SRV },
OPT_REP_WRITE_SRV },
- { "verbose", no_argument, NULL,
+ {
(OPTIONSTRING)
"verbose", no_argument, NULL,
OPT_VERBOSE },
OPT_VERBOSE },
- { "help", no_argument, NULL,
+ {
(OPTIONSTRING)
"help", no_argument, NULL,
OPT_HELP },
OPT_HELP },
- { "version", no_argument, NULL,
+ {
(OPTIONSTRING)
"version", no_argument, NULL,
OPT_VERSION },
OPT_VERSION },
- { 0,
0, 0, 0
},
+ { 0,
0, 0, 0
},
};
/* Prototypes */
};
/* Prototypes */
@@
-153,7
+177,7
@@
static void ms_global_struct_destroy()
*/
static void ms_version_command(const char *command_name)
{
*/
static void ms_version_command(const char *command_name)
{
- printf("%s v%u.%u\n", command_name, 1
, 0
);
+ printf("%s v%u.%u\n", command_name, 1
U, 0U
);
exit(0);
}
exit(0);
}
@@
-276,7
+300,7
@@
void ms_help_command(const char *command_name, const char *description)
{
char *help_message= NULL;
{
char *help_message= NULL;
- printf("%s v%u.%u\n", command_name, 1
, 0
);
+ printf("%s v%u.%u\n", command_name, 1
U, 0U
);
printf(" %s\n\n", description);
printf(
"Usage:\n"
printf(" %s\n\n", description);
printf(
"Usage:\n"
@@
-287,6
+311,7
@@
void ms_help_command(const char *command_name, const char *description)
{
printf(" -%c, --%s%c\n", long_options[x].val, long_options[x].name,
long_options[x].has_arg ? '=' : ' ');
{
printf(" -%c, --%s%c\n", long_options[x].val, long_options[x].name,
long_options[x].has_arg ? '=' : ' ');
+
if ((help_message= (char *)ms_lookup_help(long_options[x].val)) != NULL)
{
printf(" %s\n", help_message);
if ((help_message= (char *)ms_lookup_help(long_options[x].val)) != NULL)
{
printf(" %s\n", help_message);
@@
-406,7
+431,7
@@
static void ms_options_parse(int argc, char *argv[])
break;
case OPT_CONCURRENCY: /* --concurrency or -c */
break;
case OPT_CONCURRENCY: /* --concurrency or -c */
- ms_setting.nconns=
atoi(optarg
);
+ ms_setting.nconns=
(uint32_t)strtoul(optarg, (char **) NULL, 10
);
if (ms_setting.nconns <= 0)
{
fprintf(stderr, "Concurrency must be greater than 0.:-)\n");
if (ms_setting.nconns <= 0)
{
fprintf(stderr, "Concurrency must be greater than 0.:-)\n");
@@
-415,7
+440,7
@@
static void ms_options_parse(int argc, char *argv[])
break;
case OPT_EXECUTE_NUMBER: /* --execute_number or -x */
break;
case OPT_EXECUTE_NUMBER: /* --execute_number or -x */
- ms_setting.exec_num=
atoll(optarg
);
+ ms_setting.exec_num=
(int)strtol(optarg, (char **) NULL, 10
);
if (ms_setting.exec_num <= 0)
{
fprintf(stderr, "Execute number must be greater than 0.:-)\n");
if (ms_setting.exec_num <= 0)
{
fprintf(stderr, "Execute number must be greater than 0.:-)\n");
@@
-424,7
+449,7
@@
static void ms_options_parse(int argc, char *argv[])
break;
case OPT_THREAD_NUMBER: /* --threads or -T */
break;
case OPT_THREAD_NUMBER: /* --threads or -T */
- ms_setting.nthreads=
atoi(optarg
);
+ ms_setting.nthreads=
(int)strtol(optarg, (char **) NULL, 10
);
if (ms_setting.nthreads <= 0)
{
fprintf(stderr, "Threads number must be greater than 0.:-)\n");
if (ms_setting.nthreads <= 0)
{
fprintf(stderr, "Threads number must be greater than 0.:-)\n");
@@
-433,7
+458,7
@@
static void ms_options_parse(int argc, char *argv[])
break;
case OPT_FIXED_LTH: /* --fixed_size or -X */
break;
case OPT_FIXED_LTH: /* --fixed_size or -X */
- ms_setting.fixed_value_size= (size_t)
atoi(optarg
);
+ ms_setting.fixed_value_size= (size_t)
strtoull(optarg, (char **) NULL, 10
);
if ((ms_setting.fixed_value_size <= 0)
|| (ms_setting.fixed_value_size > MAX_VALUE_SIZE))
{
if ((ms_setting.fixed_value_size <= 0)
|| (ms_setting.fixed_value_size > MAX_VALUE_SIZE))
{
@@
-454,7
+479,7
@@
static void ms_options_parse(int argc, char *argv[])
break;
case OPT_GETS_DIVISION: /* --division or -d */
break;
case OPT_GETS_DIVISION: /* --division or -d */
- ms_setting.mult_key_num=
atoi(optarg
);
+ ms_setting.mult_key_num=
(int)strtol(optarg, (char **) NULL, 10
);
if (ms_setting.mult_key_num <= 0)
{
fprintf(stderr, "Multi-get key number must be greater than 0.:-)\n");
if (ms_setting.mult_key_num <= 0)
{
fprintf(stderr, "Multi-get key number must be greater than 0.:-)\n");
@@
-540,7
+565,7
@@
static void ms_options_parse(int argc, char *argv[])
break;
case OPT_SOCK_PER_CONN: /* --conn_sock or -n */
break;
case OPT_SOCK_PER_CONN: /* --conn_sock or -n */
- ms_setting.sock_per_conn=
atoi(optarg
);
+ ms_setting.sock_per_conn=
(int)strtol(optarg, (char **) NULL, 10
);
if (ms_setting.sock_per_conn <= 0)
{
fprintf(stderr, "Number of socks of each concurrency "
if (ms_setting.sock_per_conn <= 0)
{
fprintf(stderr, "Number of socks of each concurrency "
@@
-577,7
+602,7
@@
static void ms_options_parse(int argc, char *argv[])
break;
case OPT_REP_WRITE_SRV: /* --rep_write or -p */
break;
case OPT_REP_WRITE_SRV: /* --rep_write or -p */
- ms_setting.rep_write_srv=
atoi(optarg
);
+ ms_setting.rep_write_srv=
(int)strtol(optarg, (char **) NULL, 10
);
if (ms_setting.rep_write_srv <= 0)
{
fprintf(stderr,
if (ms_setting.rep_write_srv <= 0)
{
fprintf(stderr,
@@
-602,11
+627,20
@@
static int ms_check_para()
{
if (ms_setting.srv_str == NULL)
{
{
if (ms_setting.srv_str == NULL)
{
- fprintf(stderr, "No Servers provided.\n\n");
- return -1;
+ char *temp;
+
+ if ((temp= getenv("MEMCACHED_SERVERS")))
+ {
+ ms_setting.srv_str= strdup(temp);
+ }
+ else
+ {
+ fprintf(stderr, "No Servers provided\n\n");
+ return -1;
+ }
}
}
- if (ms_setting.nconns % ms_setting.nthreads != 0)
+ if (ms_setting.nconns %
(uint32_t)
ms_setting.nthreads != 0)
{
fprintf(stderr, "Concurrency must be the multiples of threads count.\n");
return -1;
{
fprintf(stderr, "Concurrency must be the multiples of threads count.\n");
return -1;
@@
-750,7
+784,7
@@
static void ms_monitor_slap_mode()
{
/* Wait all the connects complete warm up. */
pthread_mutex_lock(&ms_global.init_lock.lock);
{
/* Wait all the connects complete warm up. */
pthread_mutex_lock(&ms_global.init_lock.lock);
- while (ms_global.init_lock.count < ms_setting.nconns)
+ while (ms_global.init_lock.count <
(int)
ms_setting.nconns)
{
pthread_cond_wait(&ms_global.init_lock.cond,
&ms_global.init_lock.lock);
{
pthread_cond_wait(&ms_global.init_lock.cond,
&ms_global.init_lock.lock);
@@
-770,7
+804,8
@@
static void ms_monitor_slap_mode()
second++;
if ((ms_setting.stat_freq > 0) && (second % ms_setting.stat_freq == 0)
second++;
if ((ms_setting.stat_freq > 0) && (second % ms_setting.stat_freq == 0)
- && (ms_stats.active_conns >= ms_setting.nconns))
+ && (ms_stats.active_conns >= ms_setting.nconns)
+ && (ms_stats.active_conns <= INT_MAX))
{
ms_print_statistics(second);
}
{
ms_print_statistics(second);
}
@@
-799,7
+834,7
@@
static void ms_monitor_slap_mode()
* We loop until we know that all connects have cleaned up.
*/
pthread_mutex_lock(&ms_global.run_lock.lock);
* We loop until we know that all connects have cleaned up.
*/
pthread_mutex_lock(&ms_global.run_lock.lock);
- while (ms_global.run_lock.count < ms_setting.nconns)
+ while (ms_global.run_lock.count <
(int)
ms_setting.nconns)
{
pthread_cond_wait(&ms_global.run_lock.cond, &ms_global.run_lock.lock);
}
{
pthread_cond_wait(&ms_global.run_lock.cond, &ms_global.run_lock.lock);
}