travis: no memcached-tool
[awesomized/libmemcached] / clients / ms_memslap.h
1 /*
2 * File: ms_memslap.h
3 * Author: Mingqiang Zhuang
4 *
5 * Created on February 10, 2009
6 *
7 * (c) Copyright 2009, Schooner Information Technology, Inc.
8 * http://www.schoonerinfotech.com/
9 *
10 */
11 #ifndef MS_MEMSLAP_H
12 #define MS_MEMSLAP_H
13
14 #include <stdlib.h>
15 #include <stdio.h>
16 #include <errno.h>
17 #include <string.h>
18 #include <assert.h>
19 #include <unistd.h>
20 #include <stdint.h>
21 #include <pthread.h>
22 #if !defined(__cplusplus)
23 # include <stdbool.h>
24 #endif
25 #include <math.h>
26
27 #include "ms_stats.h"
28 #include "ms_atomic.h"
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 /* command line option */
35 typedef enum
36 {
37 OPT_VERSION= 'V',
38 OPT_HELP= 'h',
39 OPT_UDP= 'U',
40 OPT_SERVERS= 's',
41 OPT_EXECUTE_NUMBER= 'x',
42 OPT_THREAD_NUMBER= 'T',
43 OPT_CONCURRENCY= 'c',
44 OPT_FIXED_LTH= 'X',
45 OPT_VERIFY= 'v',
46 OPT_GETS_DIVISION= 'd',
47 OPT_TIME= 't',
48 OPT_CONFIG_CMD= 'F',
49 OPT_WINDOW_SIZE= 'w',
50 OPT_EXPIRE= 'e',
51 OPT_STAT_FREQ= 'S',
52 OPT_RECONNECT= 'R',
53 OPT_VERBOSE= 'b',
54 OPT_FACEBOOK_TEST= 'a',
55 OPT_SOCK_PER_CONN= 'n',
56 OPT_BINARY_PROTOCOL= 'B',
57 OPT_OVERWRITE= 'o',
58 OPT_TPS= 'P',
59 OPT_REP_WRITE_SRV= 'p'
60 } ms_options_t;
61
62 /* global statistic of response time */
63 typedef struct statistic
64 {
65 pthread_mutex_t stat_mutex; /* synchronize the following members */
66
67 ms_stat_t get_stat; /* statistics of get command */
68 ms_stat_t set_stat; /* statistics of set command */
69 ms_stat_t total_stat; /* statistics of both get and set commands */
70 } ms_statistic_t;
71
72 /* global status statistic structure */
73 typedef struct stats
74 {
75 ATOMIC uint32_t active_conns; /* active connections */
76 ATOMIC size_t bytes_read; /* read bytes */
77 ATOMIC size_t bytes_written; /* written bytes */
78 ATOMIC size_t obj_bytes; /* object bytes */
79 ATOMIC size_t pre_cmd_get; /* previous total get command count */
80 ATOMIC size_t pre_cmd_set; /* previous total set command count */
81 ATOMIC size_t cmd_get; /* current total get command count */
82 ATOMIC size_t cmd_set; /* current total set command count */
83 ATOMIC size_t get_misses; /* total objects of get miss */
84 ATOMIC size_t vef_miss; /* total objects of verification miss */
85 ATOMIC size_t vef_failed; /* total objects of verification failed */
86 ATOMIC size_t unexp_unget; /* total objects which is unexpired but not get */
87 ATOMIC size_t exp_get; /* total objects which is expired but get */
88 ATOMIC size_t pkt_disorder; /* disorder packages of UDP */
89 ATOMIC size_t pkt_drop; /* packages dropped of UDP */
90 ATOMIC size_t udp_timeout; /* how many times timeout of UDP happens */
91 } ms_stats_t;
92
93 /* lock adapter */
94 typedef struct sync_lock
95 {
96 uint32_t count;
97 pthread_mutex_t lock;
98 pthread_cond_t cond;
99 } ms_sync_lock_t;
100
101 /* global variable structure */
102 typedef struct global
103 {
104 /* synchronize lock */
105 ms_sync_lock_t init_lock;
106 ms_sync_lock_t warmup_lock;
107 ms_sync_lock_t run_lock;
108
109 /* mutex for outputing error log synchronously when memslap crashes */
110 pthread_mutex_t quit_mutex;
111
112 /* mutex for generating key prefix */
113 pthread_mutex_t seq_mutex;
114
115 /* global synchronous flags for slap mode */
116 bool finish_warmup;
117 bool time_out;
118 } ms_global_t;
119
120 /* global structure */
121 ms_global_t ms_global;
122
123 /* global stats information structure */
124 ms_stats_t ms_stats;
125
126 /* global statistic structure */
127 ms_statistic_t ms_statistic;
128
129 #ifdef __cplusplus
130 }
131 #endif
132
133 #endif /* end of MS_MEMSLAP_H */