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