bff81a61d376445cb68747b1fb32d7d985113186
[m6w6/libmemcached] / include / memcached.h
1 /*
2 * Summary: interface for memcached server
3 * Description: main include file for libmemcached
4 *
5 * Copy: See Copyright for the status of this software.
6 *
7 * Author: Brian Aker
8 */
9
10 #ifndef __MEMCACHED_H__
11 #define __MEMCACHED_H__
12
13 #include <stdlib.h>
14 #include <inttypes.h>
15 #include <sys/types.h>
16 #include <netinet/in.h>
17
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21
22 typedef struct memcached_st memcached_st;
23 typedef struct memcached_stat_st memcached_stat_st;
24 typedef struct memcached_result_st memcached_result_st;
25 typedef struct memcached_string_st memcached_string_st;
26 typedef struct memcached_server_st memcached_server_st;
27
28 /* These are Private and should not be used by applications */
29 #define SMALL_STRING_LEN 1024
30 #define HUGE_STRING_LEN 8196
31
32 #define MEMCACHED_VERSION_STRING 12
33 #define MEMCACHED_DEFAULT_PORT 11211
34 #define MEMCACHED_DEFAULT_COMMAND_SIZE 350
35 #define MEMCACHED_MAX_KEY 251 /* We add one to have it null terminated */
36 #define MEMCACHED_MAX_BUFFER HUGE_STRING_LEN
37 #define MEMCACHED_MAX_HOST_LENGTH 64
38 #define MEMCACHED_WHEEL_SIZE 1024
39 #define MEMCACHED_STRIDE 4
40 #define MEMCACHED_DEFAULT_TIMEOUT INT32_MAX
41
42 typedef enum {
43 MEMCACHED_SUCCESS,
44 MEMCACHED_FAILURE,
45 MEMCACHED_HOST_LOOKUP_FAILURE,
46 MEMCACHED_CONNECTION_FAILURE,
47 MEMCACHED_CONNECTION_BIND_FAILURE,
48 MEMCACHED_WRITE_FAILURE,
49 MEMCACHED_READ_FAILURE,
50 MEMCACHED_UNKNOWN_READ_FAILURE,
51 MEMCACHED_PROTOCOL_ERROR,
52 MEMCACHED_CLIENT_ERROR,
53 MEMCACHED_SERVER_ERROR,
54 MEMCACHED_CONNECTION_SOCKET_CREATE_FAILURE,
55 MEMCACHED_DATA_EXISTS,
56 MEMCACHED_DATA_DOES_NOT_EXIST,
57 MEMCACHED_NOTSTORED,
58 MEMCACHED_STORED,
59 MEMCACHED_NOTFOUND,
60 MEMCACHED_MEMORY_ALLOCATION_FAILURE,
61 MEMCACHED_PARTIAL_READ,
62 MEMCACHED_SOME_ERRORS,
63 MEMCACHED_NO_SERVERS,
64 MEMCACHED_END,
65 MEMCACHED_DELETED,
66 MEMCACHED_VALUE,
67 MEMCACHED_STAT,
68 MEMCACHED_ERRNO,
69 MEMCACHED_FAIL_UNIX_SOCKET,
70 MEMCACHED_NOT_SUPPORTED,
71 MEMCACHED_NO_KEY_PROVIDED,
72 MEMCACHED_FETCH_NOTFINISHED,
73 MEMCACHED_TIMEOUT,
74 MEMCACHED_BUFFERED,
75 MEMCACHED_MAXIMUM_RETURN, /* Always add new error code before */
76 } memcached_return;
77
78 typedef enum {
79 MEMCACHED_DISTRIBUTION_MODULA,
80 MEMCACHED_DISTRIBUTION_CONSISTENT,
81 } memcached_server_distribution;
82
83 typedef enum {
84 MEMCACHED_BEHAVIOR_NO_BLOCK,
85 MEMCACHED_BEHAVIOR_TCP_NODELAY,
86 MEMCACHED_BEHAVIOR_HASH,
87 MEMCACHED_BEHAVIOR_KETAMA,
88 MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE,
89 MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE,
90 MEMCACHED_BEHAVIOR_CACHE_LOOKUPS,
91 MEMCACHED_BEHAVIOR_SUPPORT_CAS,
92 MEMCACHED_BEHAVIOR_POLL_TIMEOUT,
93 MEMCACHED_BEHAVIOR_DISTRIBUTION,
94 MEMCACHED_BEHAVIOR_BUFFER_REQUESTS,
95 MEMCACHED_BEHAVIOR_USER_DATA,
96 } memcached_behavior;
97
98 typedef enum {
99 MEMCACHED_HASH_DEFAULT= 0,
100 MEMCACHED_HASH_MD5,
101 MEMCACHED_HASH_CRC,
102 MEMCACHED_HASH_FNV1_64,
103 MEMCACHED_HASH_FNV1A_64,
104 MEMCACHED_HASH_FNV1_32,
105 MEMCACHED_HASH_FNV1A_32,
106 MEMCACHED_HASH_KETAMA,
107 MEMCACHED_HASH_HSIEH,
108 } memcached_hash;
109
110 typedef enum {
111 MEMCACHED_CONNECTION_UNKNOWN,
112 MEMCACHED_CONNECTION_TCP,
113 MEMCACHED_CONNECTION_UDP,
114 MEMCACHED_CONNECTION_UNIX_SOCKET,
115 } memcached_connection;
116
117 typedef enum {
118 MEMCACHED_NOT_ALLOCATED,
119 MEMCACHED_ALLOCATED,
120 MEMCACHED_USED,
121 } memcached_allocated;
122
123 struct memcached_server_st {
124 char hostname[MEMCACHED_MAX_HOST_LENGTH];
125 unsigned int port;
126 int fd;
127 unsigned int cursor_active;
128 char write_buffer[MEMCACHED_MAX_BUFFER];
129 size_t write_buffer_offset;
130 char *write_ptr;
131 char read_buffer[MEMCACHED_MAX_BUFFER];
132 size_t read_data_length;
133 size_t read_buffer_length;
134 char *read_ptr;
135 memcached_allocated sockaddr_inited;
136 struct addrinfo *address_info;
137 memcached_connection type;
138 uint8_t major_version;
139 uint8_t minor_version;
140 uint8_t micro_version;
141 uint16_t count;
142 };
143
144 struct memcached_stat_st {
145 uint32_t pid;
146 uint32_t uptime;
147 uint32_t threads;
148 uint32_t time;
149 uint32_t pointer_size;
150 uint32_t rusage_user_seconds;
151 uint32_t rusage_user_microseconds;
152 uint32_t rusage_system_seconds;
153 uint32_t rusage_system_microseconds;
154 uint32_t curr_items;
155 uint32_t total_items;
156 uint32_t limit_maxbytes;
157 uint32_t curr_connections;
158 uint32_t total_connections;
159 uint32_t connection_structures;
160 uint64_t bytes;
161 uint64_t cmd_get;
162 uint64_t cmd_set;
163 uint64_t get_hits;
164 uint64_t get_misses;
165 uint64_t evictions;
166 uint64_t bytes_read;
167 uint64_t bytes_written;
168 char version[MEMCACHED_VERSION_STRING];
169 };
170
171 struct memcached_string_st {
172 memcached_st *root;
173 memcached_allocated is_allocated;
174 char *string;
175 char *end;
176 size_t current_size;
177 size_t block_size;
178 };
179
180 struct memcached_result_st {
181 memcached_allocated is_allocated;
182 memcached_st *root;
183 char key[MEMCACHED_MAX_KEY];
184 size_t key_length;
185 memcached_string_st value;
186 uint32_t flags;
187 uint64_t cas;
188 /* Add result callback function */
189 };
190
191 struct memcached_st {
192 memcached_allocated is_allocated;
193 memcached_server_st *hosts;
194 unsigned int number_of_hosts;
195 unsigned int cursor_server;
196 char connected;
197 int cached_errno;
198 unsigned long long flags;
199 int send_size;
200 int recv_size;
201 int32_t poll_timeout;
202 memcached_result_st result;
203 memcached_hash hash;
204 memcached_server_distribution distribution;
205 void *user_data;
206 unsigned int wheel[MEMCACHED_WHEEL_SIZE];
207 #ifdef NOT_USED /* Future Use */
208 uint8_t replicas;
209 memcached_return warning;
210 #endif
211 };
212
213 /* Public API */
214 memcached_st *memcached_create(memcached_st *ptr);
215 void memcached_free(memcached_st *ptr);
216 memcached_st *memcached_clone(memcached_st *clone, memcached_st *ptr);
217
218 memcached_return memcached_delete(memcached_st *ptr, char *key, size_t key_length,
219 time_t expiration);
220 memcached_return memcached_increment(memcached_st *ptr,
221 char *key, size_t key_length,
222 uint32_t offset,
223 uint64_t *value);
224 memcached_return memcached_decrement(memcached_st *ptr,
225 char *key, size_t key_length,
226 uint32_t offset,
227 uint64_t *value);
228 void memcached_stat_free(memcached_st *, memcached_stat_st *);
229 memcached_stat_st *memcached_stat(memcached_st *ptr, char *args, memcached_return *error);
230 memcached_return memcached_stat_servername(memcached_stat_st *stat, char *args,
231 char *hostname, unsigned int port);
232 memcached_return memcached_flush(memcached_st *ptr, time_t expiration);
233 memcached_return memcached_verbosity(memcached_st *ptr, unsigned int verbosity);
234 void memcached_quit(memcached_st *ptr);
235 char *memcached_strerror(memcached_st *ptr, memcached_return rc);
236 memcached_return memcached_behavior_set(memcached_st *ptr, memcached_behavior flag, void *data);
237 unsigned long long memcached_behavior_get(memcached_st *ptr, memcached_behavior flag);
238
239 /* All of the functions for adding data to the server */
240 memcached_return memcached_set(memcached_st *ptr, char *key, size_t key_length,
241 char *value, size_t value_length,
242 time_t expiration,
243 uint32_t flags);
244 memcached_return memcached_add(memcached_st *ptr, char *key, size_t key_length,
245 char *value, size_t value_length,
246 time_t expiration,
247 uint32_t flags);
248 memcached_return memcached_replace(memcached_st *ptr, char *key, size_t key_length,
249 char *value, size_t value_length,
250 time_t expiration,
251 uint32_t flags);
252 memcached_return memcached_append(memcached_st *ptr,
253 char *key, size_t key_length,
254 char *value, size_t value_length,
255 time_t expiration,
256 uint32_t flags);
257 memcached_return memcached_prepend(memcached_st *ptr,
258 char *key, size_t key_length,
259 char *value, size_t value_length,
260 time_t expiration,
261 uint32_t flags);
262 memcached_return memcached_cas(memcached_st *ptr,
263 char *key, size_t key_length,
264 char *value, size_t value_length,
265 time_t expiration,
266 uint32_t flags,
267 uint64_t cas);
268
269 /* Get functions */
270 char *memcached_get(memcached_st *ptr, char *key, size_t key_length,
271 size_t *value_length,
272 uint32_t *flags,
273 memcached_return *error);
274 memcached_return memcached_mget(memcached_st *ptr,
275 char **keys, size_t *key_length,
276 unsigned int number_of_keys);
277 char *memcached_fetch(memcached_st *ptr, char *key, size_t *key_length,
278 size_t *value_length, uint32_t *flags,
279 memcached_return *error);
280 memcached_result_st *memcached_fetch_result(memcached_st *ptr,
281 memcached_result_st *result,
282 memcached_return *error);
283
284 /* Server Public functions */
285 #define memcached_server_count(A) (A)->number_of_hosts
286 #define memcached_server_name(A,B) (B).hostname
287 #define memcached_server_port(A,B) (B).port
288 #define memcached_server_list(A) (A)->hosts
289 #define memcached_server_response_count(A,B) (A)->hosts[B].cursor_active
290
291 memcached_return memcached_server_add_udp(memcached_st *ptr,
292 char *hostname,
293 unsigned int port);
294 memcached_return memcached_server_add_unix_socket(memcached_st *ptr,
295 char *filename);
296 memcached_return memcached_server_add(memcached_st *ptr, char *hostname,
297 unsigned int port);
298 void memcached_server_list_free(memcached_server_st *ptr);
299 memcached_return memcached_server_push(memcached_st *ptr, memcached_server_st *list);
300
301 memcached_server_st *memcached_server_list_append(memcached_server_st *ptr,
302 char *hostname, unsigned int port,
303 memcached_return *error);
304 unsigned int memcached_server_list_count(memcached_server_st *ptr);
305 memcached_server_st *memcached_servers_parse(char *server_strings);
306
307 char *memcached_stat_get_value(memcached_st *ptr, memcached_stat_st *stat,
308 char *key, memcached_return *error);
309 char ** memcached_stat_get_keys(memcached_st *ptr, memcached_stat_st *stat,
310 memcached_return *error);
311
312 char *memcached_get_by_key(memcached_st *ptr,
313 char *master_key, size_t master_key_length,
314 char *key, size_t key_length,
315 size_t *value_length,
316 uint32_t *flags,
317 memcached_return *error);
318
319 memcached_return memcached_mget_by_key(memcached_st *ptr,
320 char *master_key, size_t master_key_length,
321 char **keys, size_t *key_length,
322 unsigned int number_of_keys);
323
324 memcached_return memcached_set_by_key(memcached_st *ptr,
325 char *master_key, size_t master_key_length,
326 char *key, size_t key_length,
327 char *value, size_t value_length,
328 time_t expiration,
329 uint32_t flags);
330
331 memcached_return memcached_add_by_key(memcached_st *ptr,
332 char *master_key, size_t master_key_length,
333 char *key, size_t key_length,
334 char *value, size_t value_length,
335 time_t expiration,
336 uint32_t flags);
337
338 memcached_return memcached_replace_by_key(memcached_st *ptr,
339 char *master_key, size_t master_key_length,
340 char *key, size_t key_length,
341 char *value, size_t value_length,
342 time_t expiration,
343 uint32_t flags);
344
345 memcached_return memcached_prepend_by_key(memcached_st *ptr,
346 char *master_key, size_t master_key_length,
347 char *key, size_t key_length,
348 char *value, size_t value_length,
349 time_t expiration,
350 uint32_t flags);
351
352 memcached_return memcached_append_by_key(memcached_st *ptr,
353 char *master_key, size_t master_key_length,
354 char *key, size_t key_length,
355 char *value, size_t value_length,
356 time_t expiration,
357 uint32_t flags);
358
359 memcached_return memcached_cas_by_key(memcached_st *ptr,
360 char *master_key, size_t master_key_length,
361 char *key, size_t key_length,
362 char *value, size_t value_length,
363 time_t expiration,
364 uint32_t flags,
365 uint64_t cas);
366 memcached_return memcached_delete_by_key(memcached_st *ptr,
367 char *master_key, size_t master_key_length,
368 char *key, size_t key_length,
369 time_t expiration);
370
371 memcached_return memcached_mdelete(memcached_st *ptr,
372 char **key, size_t *key_length,
373 unsigned int number_of_keys,
374 time_t expiration);
375
376 memcached_return memcached_mdelete_by_key(memcached_st *ptr,
377 char *master_key, size_t master_key_length,
378 char **key, size_t *key_length,
379 unsigned int number_of_keys,
380 time_t expiration);
381
382 memcached_return memcached_fetch_execute(memcached_st *ptr,
383 unsigned int (*callback[])(memcached_st *ptr, memcached_result_st *result, void *context),
384 void *context,
385 unsigned int number_of_callbacks
386 );
387
388 /* Result Struct */
389 void memcached_result_free(memcached_result_st *result);
390 memcached_result_st *memcached_result_create(memcached_st *ptr,
391 memcached_result_st *result);
392 #define memcached_result_key_value(A) (A)->key
393 #define memcached_result_key_length(A) (A)->key_length
394 #ifdef FIX
395 #define memcached_result_value(A) memcached_string_value((A)->value)
396 #define memcached_result_length(A) memcached_string_length((A)->value)
397 #else
398 char *memcached_result_value(memcached_result_st *ptr);
399 size_t memcached_result_length(memcached_result_st *ptr);
400 #endif
401 #define memcached_result_flags(A) (A)->flags
402 #define memcached_result_cas(A) (A)->cas
403
404
405 #ifndef __WATCHPOINT_H__
406 #define __WATCHPOINT_H__
407 /* Some personal debugging functions */
408 #ifdef HAVE_DEBUG
409 #define WATCHPOINT fprintf(stderr, "\nWATCHPOINT %s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout);
410 #ifdef __MEMCACHED_H__
411 #define WATCHPOINT_ERROR(A) fprintf(stderr, "\nWATCHPOINT %s:%d %s\n", __FILE__, __LINE__, memcached_strerror(NULL, A));fflush(stdout);
412 #define WATCHPOINT_IFERROR(A) if(A != MEMCACHED_SUCCESS)fprintf(stderr, "\nWATCHPOINT %s:%d %s\n", __FILE__, __LINE__, memcached_strerror(NULL, A));fflush(stdout);
413 #endif
414 #define WATCHPOINT_STRING(A) fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %s\n", __FILE__, __LINE__,__func__,A);fflush(stdout);
415 #define WATCHPOINT_STRING_LENGTH(A,B) fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %.*s\n", __FILE__, __LINE__,__func__,(int)B,A);fflush(stdout);
416 #define WATCHPOINT_NUMBER(A) fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %zu\n", __FILE__, __LINE__,__func__,(size_t)(A));fflush(stdout);
417 #define WATCHPOINT_ERRNO(A) fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %s\n", __FILE__, __LINE__,__func__, strerror(A));A= 0;fflush(stdout);
418 #define WATCHPOINT_ASSERT(A) assert((A));
419 #else
420 #define WATCHPOINT
421 #ifdef __MEMCACHED_H__
422 #define WATCHPOINT_ERROR(A)
423 #define WATCHPOINT_IFERROR(A)
424 #endif
425 #define WATCHPOINT_STRING(A)
426 #define WATCHPOINT_NUMBER(A)
427 #define WATCHPOINT_ERRNO(A)
428 #define WATCHPOINT_ASSERT(A)
429 #endif
430
431 #endif /* __WATCHPOINT_H__ */
432
433
434 #ifdef __cplusplus
435 }
436 #endif
437
438 #endif /* __MEMCACHED_H__ */