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