dalli_memcached 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/BENCHMARKS +142 -0
- data/CHANGELOG +176 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +45 -0
- data/LICENSE +184 -0
- data/Manifest +209 -0
- data/README.rdoc +124 -0
- data/Rakefile +134 -0
- data/TODO +1 -0
- data/dalli_memcached.gemspec +0 -0
- data/ext/extconf-make.rb +25 -0
- data/ext/extconf.rb +78 -0
- data/ext/libmemcached-0.32/AUTHORS +7 -0
- data/ext/libmemcached-0.32/COPYING +32 -0
- data/ext/libmemcached-0.32/ChangeLog +303 -0
- data/ext/libmemcached-0.32/INSTALL +302 -0
- data/ext/libmemcached-0.32/Makefile.am +36 -0
- data/ext/libmemcached-0.32/Makefile.in +911 -0
- data/ext/libmemcached-0.32/NEWS +1 -0
- data/ext/libmemcached-0.32/README +33 -0
- data/ext/libmemcached-0.32/THANKS +14 -0
- data/ext/libmemcached-0.32/TODO +11 -0
- data/ext/libmemcached-0.32/aclocal.m4 +2108 -0
- data/ext/libmemcached-0.32/clients/Makefile.am +80 -0
- data/ext/libmemcached-0.32/clients/Makefile.in +773 -0
- data/ext/libmemcached-0.32/clients/client_options.h +32 -0
- data/ext/libmemcached-0.32/clients/execute.c +64 -0
- data/ext/libmemcached-0.32/clients/execute.h +5 -0
- data/ext/libmemcached-0.32/clients/generator.c +74 -0
- data/ext/libmemcached-0.32/clients/generator.h +20 -0
- data/ext/libmemcached-0.32/clients/memcat.c +178 -0
- data/ext/libmemcached-0.32/clients/memcp.c +251 -0
- data/ext/libmemcached-0.32/clients/memdump.c +170 -0
- data/ext/libmemcached-0.32/clients/memerror.c +80 -0
- data/ext/libmemcached-0.32/clients/memflush.c +143 -0
- data/ext/libmemcached-0.32/clients/memrm.c +160 -0
- data/ext/libmemcached-0.32/clients/memslap.c +441 -0
- data/ext/libmemcached-0.32/clients/memstat.c +326 -0
- data/ext/libmemcached-0.32/clients/utilities.c +207 -0
- data/ext/libmemcached-0.32/clients/utilities.h +41 -0
- data/ext/libmemcached-0.32/config.h.in +254 -0
- data/ext/libmemcached-0.32/config/compile +143 -0
- data/ext/libmemcached-0.32/config/config.guess +1561 -0
- data/ext/libmemcached-0.32/config/config.rpath +666 -0
- data/ext/libmemcached-0.32/config/config.sub +1686 -0
- data/ext/libmemcached-0.32/config/depcomp +630 -0
- data/ext/libmemcached-0.32/config/install-sh +520 -0
- data/ext/libmemcached-0.32/config/ltmain.sh +9636 -0
- data/ext/libmemcached-0.32/config/missing +376 -0
- data/ext/libmemcached-0.32/configure +23843 -0
- data/ext/libmemcached-0.32/configure.ac +120 -0
- data/ext/libmemcached-0.32/libmemcached/Makefile.am +111 -0
- data/ext/libmemcached-0.32/libmemcached/Makefile.in +1069 -0
- data/ext/libmemcached-0.32/libmemcached/byteorder.c +31 -0
- data/ext/libmemcached-0.32/libmemcached/common.h +189 -0
- data/ext/libmemcached-0.32/libmemcached/crc.c +86 -0
- data/ext/libmemcached-0.32/libmemcached/hsieh_hash.c +68 -0
- data/ext/libmemcached-0.32/libmemcached/jenkins_hash.c +213 -0
- data/ext/libmemcached-0.32/libmemcached/libmemcached.ver +1 -0
- data/ext/libmemcached-0.32/libmemcached/libmemcached_probes.d +30 -0
- data/ext/libmemcached-0.32/libmemcached/libmemcached_probes.h +82 -0
- data/ext/libmemcached-0.32/libmemcached/md5.c +354 -0
- data/ext/libmemcached-0.32/libmemcached/memcached.c +153 -0
- data/ext/libmemcached-0.32/libmemcached/memcached.h +305 -0
- data/ext/libmemcached-0.32/libmemcached/memcached.hpp +799 -0
- data/ext/libmemcached-0.32/libmemcached/memcached/README.txt +7 -0
- data/ext/libmemcached-0.32/libmemcached/memcached/protocol_binary.h +385 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_allocators.c +72 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_analyze.c +100 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_auto.c +207 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_behavior.c +290 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_callback.c +175 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_configure.h.in +23 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_connect.c +371 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_constants.h +146 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_delete.c +0 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_do.c +72 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_dump.c +79 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_exist.c +114 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_exist.h +20 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_fetch.c +102 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_flush.c +89 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_flush_buffers.c +23 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_get.c +494 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_get.h +87 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_hash.c +252 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_hosts.c +510 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_internal.h +31 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_io.c +594 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_io.h +72 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_key.c +28 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_parse.c +74 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_pool.h +38 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_purge.c +76 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_quit.c +75 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_response.c +529 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_result.c +57 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_result.h +59 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_sasl.c +225 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_sasl.h +44 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_server.c +159 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_server.h +93 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_stats.c +437 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_storage.c +514 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_storage.h +107 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_strerror.c +92 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_string.c +138 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_string.h +53 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_touch.c +60 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_touch.h +31 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_types.h +44 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_util.h +15 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_verbosity.c +36 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_version.c +112 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_watchpoint.h +38 -0
- data/ext/libmemcached-0.32/libmemcached/murmur_hash.c +76 -0
- data/ext/libmemcached-0.32/libmemcached/visibility.h +51 -0
- data/ext/libmemcached-0.32/libmemcachedutil/Makefile.am +11 -0
- data/ext/libmemcached-0.32/libmemcachedutil/Makefile.in +604 -0
- data/ext/libmemcached-0.32/libmemcachedutil/libmemcachedutil.ver +1 -0
- data/ext/libmemcached-0.32/libmemcachedutil/memcached_pool.c +170 -0
- data/ext/libmemcached-0.32/m4/ac_cxx_compile_stdcxx_0x.m4 +103 -0
- data/ext/libmemcached-0.32/m4/ac_cxx_header_stdcxx_98.m4 +67 -0
- data/ext/libmemcached-0.32/m4/acx_pthread.m4 +276 -0
- data/ext/libmemcached-0.32/m4/byteorder.m4 +40 -0
- data/ext/libmemcached-0.32/m4/deprecated.m4 +17 -0
- data/ext/libmemcached-0.32/m4/enable_utillib.m4 +16 -0
- data/ext/libmemcached-0.32/m4/extensions.m4 +94 -0
- data/ext/libmemcached-0.32/m4/hsieh.m4 +18 -0
- data/ext/libmemcached-0.32/m4/lib-prefix.m4 +221 -0
- data/ext/libmemcached-0.32/m4/libtool.m4 +7831 -0
- data/ext/libmemcached-0.32/m4/ltoptions.m4 +369 -0
- data/ext/libmemcached-0.32/m4/ltsugar.m4 +123 -0
- data/ext/libmemcached-0.32/m4/ltversion.m4 +23 -0
- data/ext/libmemcached-0.32/m4/lt~obsolete.m4 +98 -0
- data/ext/libmemcached-0.32/m4/memcached.m4 +30 -0
- data/ext/libmemcached-0.32/m4/pandora_64bit.m4 +55 -0
- data/ext/libmemcached-0.32/m4/pandora_canonical.m4 +151 -0
- data/ext/libmemcached-0.32/m4/pandora_check_compiler_version.m4 +37 -0
- data/ext/libmemcached-0.32/m4/pandora_check_cxx_standard.m4 +16 -0
- data/ext/libmemcached-0.32/m4/pandora_enable_dtrace.m4 +41 -0
- data/ext/libmemcached-0.32/m4/pandora_ensure_gcc_version.m4 +36 -0
- data/ext/libmemcached-0.32/m4/pandora_have_better_malloc.m4 +54 -0
- data/ext/libmemcached-0.32/m4/pandora_have_sasl.m4 +133 -0
- data/ext/libmemcached-0.32/m4/pandora_header_assert.m4 +23 -0
- data/ext/libmemcached-0.32/m4/pandora_libtool.m4 +15 -0
- data/ext/libmemcached-0.32/m4/pandora_optimize.m4 +79 -0
- data/ext/libmemcached-0.32/m4/pandora_shared_ptr.m4 +56 -0
- data/ext/libmemcached-0.32/m4/pandora_vc_build.m4 +32 -0
- data/ext/libmemcached-0.32/m4/pandora_warnings.m4 +262 -0
- data/ext/libmemcached-0.32/m4/pod2man.m4 +7 -0
- data/ext/libmemcached-0.32/m4/protocol_binary.m4 +23 -0
- data/ext/libmemcached-0.32/m4/setsockopt.m4 +57 -0
- data/ext/libmemcached-0.32/m4/visibility.m4 +52 -0
- data/ext/libmemcached-0.32/support/Makefile.am +4 -0
- data/ext/libmemcached-0.32/support/Makefile.in +487 -0
- data/ext/libmemcached-0.32/support/libmemcached-fc.spec.in +105 -0
- data/ext/libmemcached-0.32/support/libmemcached.pc.in +10 -0
- data/ext/libmemcached-0.32/support/libmemcached.spec +105 -0
- data/ext/libmemcached-0.32/support/libmemcached.spec.in +105 -0
- data/ext/libmemcached-0.32/support/set_benchmark.sh +5 -0
- data/ext/libmemcached-0.32/tests/Makefile.am +113 -0
- data/ext/libmemcached-0.32/tests/Makefile.in +762 -0
- data/ext/libmemcached-0.32/tests/atomsmasher.c +245 -0
- data/ext/libmemcached-0.32/tests/function.c +4904 -0
- data/ext/libmemcached-0.32/tests/ketama_test_cases.h +108 -0
- data/ext/libmemcached-0.32/tests/output.cmp +7 -0
- data/ext/libmemcached-0.32/tests/output.res +7 -0
- data/ext/libmemcached-0.32/tests/output2.res +46 -0
- data/ext/libmemcached-0.32/tests/plus.cpp +293 -0
- data/ext/libmemcached-0.32/tests/r/memcat.res +19 -0
- data/ext/libmemcached-0.32/tests/r/memcp.res +27 -0
- data/ext/libmemcached-0.32/tests/r/memrm.res +19 -0
- data/ext/libmemcached-0.32/tests/r/memslap.res +33 -0
- data/ext/libmemcached-0.32/tests/r/memstat.res +33 -0
- data/ext/libmemcached-0.32/tests/server.c +118 -0
- data/ext/libmemcached-0.32/tests/server.h +25 -0
- data/ext/libmemcached-0.32/tests/start.c +16 -0
- data/ext/libmemcached-0.32/tests/t/memcat.test +4 -0
- data/ext/libmemcached-0.32/tests/t/memcp.test +3 -0
- data/ext/libmemcached-0.32/tests/t/memrm.test +3 -0
- data/ext/libmemcached-0.32/tests/t/memslap.test +5 -0
- data/ext/libmemcached-0.32/tests/t/memstat.test +3 -0
- data/ext/libmemcached-0.32/tests/test.c +137 -0
- data/ext/libmemcached-0.32/tests/test.h +46 -0
- data/ext/libmemcached-0.32/tests/udp.c +76 -0
- data/ext/rlibmemcached.i +258 -0
- data/ext/rlibmemcached_wrap.c +13917 -0
- data/lib/memcached.rb +33 -0
- data/lib/memcached/auth.rb +16 -0
- data/lib/memcached/behaviors.rb +78 -0
- data/lib/memcached/exceptions.rb +84 -0
- data/lib/memcached/experimental.rb +48 -0
- data/lib/memcached/marshal_codec.rb +10 -0
- data/lib/memcached/memcached.rb +732 -0
- data/lib/memcached/rails.rb +250 -0
- data/test/profile/benchmark.rb +280 -0
- data/test/profile/c_profiler.rb +14 -0
- data/test/profile/exercise.rb +185 -0
- data/test/profile/rb_profiler.rb +21 -0
- data/test/profile/valgrind.rb +10 -0
- data/test/setup.rb +30 -0
- data/test/teardown.rb +0 -0
- data/test/test_helper.rb +18 -0
- data/test/unit/binding_test.rb +8 -0
- data/test/unit/memcached_experimental_test.rb +272 -0
- data/test/unit/memcached_test.rb +1487 -0
- data/test/unit/rails_test.rb +330 -0
- metadata +347 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Summary: Constants for libmemcached
|
|
3
|
+
*
|
|
4
|
+
* Copy: See Copyright for the status of this software.
|
|
5
|
+
*
|
|
6
|
+
* Author: Brian Aker
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#ifndef __MEMCACHED_CONSTANTS_H__
|
|
10
|
+
#define __MEMCACHED_CONSTANTS_H__
|
|
11
|
+
|
|
12
|
+
/* Public defines */
|
|
13
|
+
#define MEMCACHED_DEFAULT_PORT 11211
|
|
14
|
+
#define MEMCACHED_MAX_KEY 251 /* We add one to have it null terminated */
|
|
15
|
+
#define MEMCACHED_MAX_BUFFER 8196
|
|
16
|
+
#define MEMCACHED_MAX_HOST_LENGTH 64
|
|
17
|
+
#define MEMCACHED_MAX_HOST_SORT_LENGTH 86 /* Used for Ketama */
|
|
18
|
+
#define MEMCACHED_POINTS_PER_SERVER 100
|
|
19
|
+
#define MEMCACHED_POINTS_PER_SERVER_KETAMA 160
|
|
20
|
+
#define MEMCACHED_CONTINUUM_SIZE MEMCACHED_POINTS_PER_SERVER*100 /* This would then set max hosts to 100 */
|
|
21
|
+
#define MEMCACHED_STRIDE 4
|
|
22
|
+
#define MEMCACHED_DEFAULT_TIMEOUT 1000
|
|
23
|
+
#define MEMCACHED_CONTINUUM_ADDITION 10 /* How many extra slots we should build for in the continuum */
|
|
24
|
+
#define MEMCACHED_PREFIX_KEY_MAX_SIZE 128
|
|
25
|
+
#define MEMCACHED_EXPIRATION_NOT_ADD 0xffffffffU
|
|
26
|
+
|
|
27
|
+
typedef enum {
|
|
28
|
+
MEMCACHED_SUCCESS,
|
|
29
|
+
MEMCACHED_FAILURE,
|
|
30
|
+
MEMCACHED_HOST_LOOKUP_FAILURE,
|
|
31
|
+
MEMCACHED_CONNECTION_FAILURE,
|
|
32
|
+
MEMCACHED_CONNECTION_BIND_FAILURE,
|
|
33
|
+
MEMCACHED_WRITE_FAILURE,
|
|
34
|
+
MEMCACHED_READ_FAILURE,
|
|
35
|
+
MEMCACHED_UNKNOWN_READ_FAILURE,
|
|
36
|
+
MEMCACHED_PROTOCOL_ERROR,
|
|
37
|
+
MEMCACHED_CLIENT_ERROR,
|
|
38
|
+
MEMCACHED_SERVER_ERROR,
|
|
39
|
+
MEMCACHED_CONNECTION_SOCKET_CREATE_FAILURE,
|
|
40
|
+
MEMCACHED_DATA_EXISTS,
|
|
41
|
+
MEMCACHED_DATA_DOES_NOT_EXIST,
|
|
42
|
+
MEMCACHED_NOTSTORED,
|
|
43
|
+
MEMCACHED_STORED,
|
|
44
|
+
MEMCACHED_NOTFOUND,
|
|
45
|
+
MEMCACHED_MEMORY_ALLOCATION_FAILURE,
|
|
46
|
+
MEMCACHED_PARTIAL_READ,
|
|
47
|
+
MEMCACHED_SOME_ERRORS,
|
|
48
|
+
MEMCACHED_NO_SERVERS,
|
|
49
|
+
MEMCACHED_END,
|
|
50
|
+
MEMCACHED_DELETED,
|
|
51
|
+
MEMCACHED_VALUE,
|
|
52
|
+
MEMCACHED_STAT,
|
|
53
|
+
MEMCACHED_ITEM,
|
|
54
|
+
MEMCACHED_ERRNO,
|
|
55
|
+
MEMCACHED_FAIL_UNIX_SOCKET,
|
|
56
|
+
MEMCACHED_NOT_SUPPORTED,
|
|
57
|
+
MEMCACHED_NO_KEY_PROVIDED, /* Deprecated. Use MEMCACHED_BAD_KEY_PROVIDED! */
|
|
58
|
+
MEMCACHED_FETCH_NOTFINISHED,
|
|
59
|
+
MEMCACHED_TIMEOUT,
|
|
60
|
+
MEMCACHED_BUFFERED,
|
|
61
|
+
MEMCACHED_BAD_KEY_PROVIDED,
|
|
62
|
+
MEMCACHED_INVALID_HOST_PROTOCOL,
|
|
63
|
+
MEMCACHED_SERVER_MARKED_DEAD,
|
|
64
|
+
MEMCACHED_UNKNOWN_STAT_KEY,
|
|
65
|
+
MEMCACHED_AUTH_PROBLEM,
|
|
66
|
+
MEMCACHED_AUTH_FAILURE,
|
|
67
|
+
MEMCACHED_AUTH_CONTINUE,
|
|
68
|
+
MEMCACHED_MAXIMUM_RETURN /* Always add new error code before */
|
|
69
|
+
} memcached_return;
|
|
70
|
+
|
|
71
|
+
typedef enum {
|
|
72
|
+
MEMCACHED_DISTRIBUTION_MODULA,
|
|
73
|
+
MEMCACHED_DISTRIBUTION_CONSISTENT,
|
|
74
|
+
MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA,
|
|
75
|
+
MEMCACHED_DISTRIBUTION_RANDOM
|
|
76
|
+
} memcached_server_distribution;
|
|
77
|
+
|
|
78
|
+
typedef enum {
|
|
79
|
+
MEMCACHED_BEHAVIOR_NO_BLOCK,
|
|
80
|
+
MEMCACHED_BEHAVIOR_TCP_NODELAY,
|
|
81
|
+
MEMCACHED_BEHAVIOR_HASH,
|
|
82
|
+
MEMCACHED_BEHAVIOR_KETAMA,
|
|
83
|
+
MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE,
|
|
84
|
+
MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE,
|
|
85
|
+
MEMCACHED_BEHAVIOR_CACHE_LOOKUPS,
|
|
86
|
+
MEMCACHED_BEHAVIOR_SUPPORT_CAS,
|
|
87
|
+
MEMCACHED_BEHAVIOR_POLL_TIMEOUT,
|
|
88
|
+
MEMCACHED_BEHAVIOR_POLL_MAX_RETRIES,
|
|
89
|
+
MEMCACHED_BEHAVIOR_DISTRIBUTION,
|
|
90
|
+
MEMCACHED_BEHAVIOR_BUFFER_REQUESTS,
|
|
91
|
+
MEMCACHED_BEHAVIOR_USER_DATA,
|
|
92
|
+
MEMCACHED_BEHAVIOR_SORT_HOSTS,
|
|
93
|
+
MEMCACHED_BEHAVIOR_VERIFY_KEY,
|
|
94
|
+
MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT,
|
|
95
|
+
MEMCACHED_BEHAVIOR_RETRY_TIMEOUT,
|
|
96
|
+
MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED,
|
|
97
|
+
MEMCACHED_BEHAVIOR_KETAMA_HASH,
|
|
98
|
+
MEMCACHED_BEHAVIOR_BINARY_PROTOCOL,
|
|
99
|
+
MEMCACHED_BEHAVIOR_SND_TIMEOUT,
|
|
100
|
+
MEMCACHED_BEHAVIOR_RCV_TIMEOUT,
|
|
101
|
+
MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT,
|
|
102
|
+
MEMCACHED_BEHAVIOR_IO_MSG_WATERMARK,
|
|
103
|
+
MEMCACHED_BEHAVIOR_IO_BYTES_WATERMARK,
|
|
104
|
+
MEMCACHED_BEHAVIOR_IO_KEY_PREFETCH,
|
|
105
|
+
MEMCACHED_BEHAVIOR_HASH_WITH_PREFIX_KEY,
|
|
106
|
+
MEMCACHED_BEHAVIOR_NOREPLY,
|
|
107
|
+
MEMCACHED_BEHAVIOR_USE_UDP,
|
|
108
|
+
MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS
|
|
109
|
+
} memcached_behavior;
|
|
110
|
+
|
|
111
|
+
typedef enum {
|
|
112
|
+
MEMCACHED_CALLBACK_PREFIX_KEY = 0,
|
|
113
|
+
MEMCACHED_CALLBACK_USER_DATA = 1,
|
|
114
|
+
MEMCACHED_CALLBACK_CLEANUP_FUNCTION = 2,
|
|
115
|
+
MEMCACHED_CALLBACK_CLONE_FUNCTION = 3,
|
|
116
|
+
#ifdef MEMCACHED_ENABLE_DEPRECATED
|
|
117
|
+
MEMCACHED_CALLBACK_MALLOC_FUNCTION = 4,
|
|
118
|
+
MEMCACHED_CALLBACK_REALLOC_FUNCTION = 5,
|
|
119
|
+
MEMCACHED_CALLBACK_FREE_FUNCTION = 6,
|
|
120
|
+
#endif
|
|
121
|
+
MEMCACHED_CALLBACK_GET_FAILURE = 7,
|
|
122
|
+
MEMCACHED_CALLBACK_DELETE_TRIGGER = 8
|
|
123
|
+
} memcached_callback;
|
|
124
|
+
|
|
125
|
+
typedef enum {
|
|
126
|
+
MEMCACHED_HASH_DEFAULT= 0,
|
|
127
|
+
MEMCACHED_HASH_MD5,
|
|
128
|
+
MEMCACHED_HASH_CRC,
|
|
129
|
+
MEMCACHED_HASH_FNV1_64,
|
|
130
|
+
MEMCACHED_HASH_FNV1A_64,
|
|
131
|
+
MEMCACHED_HASH_FNV1_32,
|
|
132
|
+
MEMCACHED_HASH_FNV1A_32,
|
|
133
|
+
MEMCACHED_HASH_HSIEH,
|
|
134
|
+
MEMCACHED_HASH_MURMUR,
|
|
135
|
+
MEMCACHED_HASH_JENKINS,
|
|
136
|
+
MEMCACHED_HASH_NONE
|
|
137
|
+
} memcached_hash;
|
|
138
|
+
|
|
139
|
+
typedef enum {
|
|
140
|
+
MEMCACHED_CONNECTION_UNKNOWN,
|
|
141
|
+
MEMCACHED_CONNECTION_TCP,
|
|
142
|
+
MEMCACHED_CONNECTION_UDP,
|
|
143
|
+
MEMCACHED_CONNECTION_UNIX_SOCKET
|
|
144
|
+
} memcached_connection;
|
|
145
|
+
|
|
146
|
+
#endif /* __MEMCACHED_CONSTANTS_H__ */
|
|
File without changes
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#include "common.h"
|
|
2
|
+
|
|
3
|
+
memcached_return memcached_do(memcached_server_st *ptr, const void *command,
|
|
4
|
+
size_t command_length, uint8_t with_flush)
|
|
5
|
+
{
|
|
6
|
+
memcached_return rc;
|
|
7
|
+
ssize_t sent_length;
|
|
8
|
+
|
|
9
|
+
WATCHPOINT_ASSERT(command_length);
|
|
10
|
+
WATCHPOINT_ASSERT(command);
|
|
11
|
+
|
|
12
|
+
if ((rc= memcached_connect(ptr)) != MEMCACHED_SUCCESS)
|
|
13
|
+
{
|
|
14
|
+
WATCHPOINT_ERROR(rc);
|
|
15
|
+
return rc;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/*
|
|
19
|
+
** Since non buffering ops in UDP mode dont check to make sure they will fit
|
|
20
|
+
** before they start writing, if there is any data in buffer, clear it out,
|
|
21
|
+
** otherwise we might get a partial write.
|
|
22
|
+
**/
|
|
23
|
+
if (ptr->type == MEMCACHED_CONNECTION_UDP && with_flush && ptr->write_buffer_offset > UDP_DATAGRAM_HEADER_LENGTH)
|
|
24
|
+
memcached_io_write(ptr, NULL, 0, 1);
|
|
25
|
+
|
|
26
|
+
sent_length= memcached_io_write(ptr, command, command_length, (char) with_flush);
|
|
27
|
+
|
|
28
|
+
if (sent_length == -1 || (size_t)sent_length != command_length)
|
|
29
|
+
rc= MEMCACHED_WRITE_FAILURE;
|
|
30
|
+
else if ((ptr->root->flags & MEM_NOREPLY) == 0)
|
|
31
|
+
memcached_server_response_increment(ptr);
|
|
32
|
+
|
|
33
|
+
return rc;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
memcached_return memcached_vdo(memcached_server_st *ptr,
|
|
37
|
+
const struct libmemcached_io_vector_st *vector, size_t count,
|
|
38
|
+
uint8_t with_flush)
|
|
39
|
+
{
|
|
40
|
+
memcached_return rc;
|
|
41
|
+
ssize_t sent_length;
|
|
42
|
+
size_t command_length;
|
|
43
|
+
uint32_t x;
|
|
44
|
+
|
|
45
|
+
WATCHPOINT_ASSERT(count);
|
|
46
|
+
WATCHPOINT_ASSERT(vector);
|
|
47
|
+
|
|
48
|
+
if ((rc= memcached_connect(ptr)) != MEMCACHED_SUCCESS)
|
|
49
|
+
{
|
|
50
|
+
WATCHPOINT_ERROR(rc);
|
|
51
|
+
return rc;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (ptr->type == MEMCACHED_CONNECTION_UDP && with_flush && ptr->write_buffer_offset > UDP_DATAGRAM_HEADER_LENGTH)
|
|
55
|
+
{
|
|
56
|
+
memcached_io_write(ptr, NULL, 0, true);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
sent_length= memcached_io_writev(ptr, vector, count, (char) with_flush);
|
|
60
|
+
|
|
61
|
+
command_length = 0;
|
|
62
|
+
for (x= 0; x < count; ++x, vector++)
|
|
63
|
+
command_length+= vector->length;
|
|
64
|
+
|
|
65
|
+
if (sent_length == -1 || (size_t)sent_length != command_length) {
|
|
66
|
+
rc = MEMCACHED_WRITE_FAILURE;
|
|
67
|
+
WATCHPOINT_ERROR(rc);
|
|
68
|
+
} else if ((ptr->root->flags & MEM_NOREPLY) == 0)
|
|
69
|
+
memcached_server_response_increment(ptr);
|
|
70
|
+
|
|
71
|
+
return rc;
|
|
72
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/*
|
|
2
|
+
We use this to dump all keys.
|
|
3
|
+
|
|
4
|
+
At this point we only support a callback method. This could be optimized by first
|
|
5
|
+
calling items and finding active slabs. For the moment though we just loop through
|
|
6
|
+
all slabs on servers and "grab" the keys.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#include "common.h"
|
|
10
|
+
static memcached_return ascii_dump(memcached_st *ptr, memcached_dump_func *callback, void *context, uint32_t number_of_callbacks)
|
|
11
|
+
{
|
|
12
|
+
memcached_return rc= 0;
|
|
13
|
+
char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
|
|
14
|
+
size_t send_length;
|
|
15
|
+
uint32_t server_key;
|
|
16
|
+
uint32_t x;
|
|
17
|
+
|
|
18
|
+
unlikely (ptr->number_of_hosts == 0)
|
|
19
|
+
return MEMCACHED_NO_SERVERS;
|
|
20
|
+
|
|
21
|
+
for (server_key= 0; server_key < ptr->number_of_hosts; server_key++)
|
|
22
|
+
{
|
|
23
|
+
/* 256 I BELIEVE is the upper limit of slabs */
|
|
24
|
+
for (x= 0; x < 256; x++)
|
|
25
|
+
{
|
|
26
|
+
send_length= (size_t) snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE,
|
|
27
|
+
"stats cachedump %u 0 0\r\n", x);
|
|
28
|
+
|
|
29
|
+
rc= memcached_do(&ptr->hosts[server_key], buffer, send_length, 1);
|
|
30
|
+
|
|
31
|
+
unlikely (rc != MEMCACHED_SUCCESS)
|
|
32
|
+
goto error;
|
|
33
|
+
|
|
34
|
+
while (1)
|
|
35
|
+
{
|
|
36
|
+
uint32_t callback_counter;
|
|
37
|
+
rc= memcached_response(&ptr->hosts[server_key], buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL);
|
|
38
|
+
|
|
39
|
+
if (rc == MEMCACHED_ITEM)
|
|
40
|
+
{
|
|
41
|
+
char *string_ptr, *end_ptr;
|
|
42
|
+
char *key;
|
|
43
|
+
|
|
44
|
+
string_ptr= buffer;
|
|
45
|
+
string_ptr+= 5; /* Move past ITEM */
|
|
46
|
+
for (end_ptr= string_ptr; isgraph(*end_ptr); end_ptr++);
|
|
47
|
+
key= string_ptr;
|
|
48
|
+
key[(size_t)(end_ptr-string_ptr)]= 0;
|
|
49
|
+
for (callback_counter= 0; callback_counter < number_of_callbacks; callback_counter++)
|
|
50
|
+
{
|
|
51
|
+
rc= (*callback[callback_counter])(ptr, key, (size_t)(end_ptr-string_ptr), context);
|
|
52
|
+
if (rc != MEMCACHED_SUCCESS)
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else if (rc == MEMCACHED_END)
|
|
57
|
+
break;
|
|
58
|
+
else
|
|
59
|
+
goto error;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
error:
|
|
65
|
+
if (rc == MEMCACHED_END)
|
|
66
|
+
return MEMCACHED_SUCCESS;
|
|
67
|
+
else
|
|
68
|
+
return rc;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
memcached_return memcached_dump(memcached_st *ptr, memcached_dump_func *callback, void *context, uint32_t number_of_callbacks)
|
|
72
|
+
{
|
|
73
|
+
/* No support for Binary protocol yet */
|
|
74
|
+
if (ptr->flags & MEM_BINARY_PROTOCOL)
|
|
75
|
+
return MEMCACHED_FAILURE;
|
|
76
|
+
|
|
77
|
+
return ascii_dump(ptr, callback, context, number_of_callbacks);
|
|
78
|
+
}
|
|
79
|
+
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#include <libmemcached/common.h>
|
|
2
|
+
|
|
3
|
+
static memcached_return binary_exist(memcached_st *ptr, memcached_server_st *server,
|
|
4
|
+
const char* key, size_t key_length)
|
|
5
|
+
{
|
|
6
|
+
protocol_binary_request_set request= {.bytes= {0}};
|
|
7
|
+
size_t send_length= sizeof(request.bytes);
|
|
8
|
+
|
|
9
|
+
request.message.header.request.magic= PROTOCOL_BINARY_REQ;
|
|
10
|
+
request.message.header.request.opcode= PROTOCOL_BINARY_CMD_ADD;
|
|
11
|
+
request.message.header.request.keylen= htons((uint16_t)(ptr->prefix_key_length + key_length));
|
|
12
|
+
request.message.header.request.datatype= PROTOCOL_BINARY_RAW_BYTES;
|
|
13
|
+
request.message.header.request.extlen= 8;
|
|
14
|
+
request.message.body.flags= 0;
|
|
15
|
+
request.message.body.expiration= htonl(2678400);
|
|
16
|
+
|
|
17
|
+
request.message.header.request.bodylen= htonl((uint32_t) (key_length
|
|
18
|
+
+ptr->prefix_key_length
|
|
19
|
+
+request.message.header.request.extlen));
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
struct libmemcached_io_vector_st vector[]=
|
|
23
|
+
{
|
|
24
|
+
{ send_length, request.bytes },
|
|
25
|
+
{ strlen(ptr->prefix_key), ptr->prefix_key },
|
|
26
|
+
{ key_length, key }
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
memcached_return rc= memcached_vdo(server, vector, 3, 1);
|
|
30
|
+
if (rc != MEMCACHED_SUCCESS)
|
|
31
|
+
{
|
|
32
|
+
memcached_io_reset(server);
|
|
33
|
+
return (rc == MEMCACHED_SUCCESS) ? MEMCACHED_WRITE_FAILURE : rc;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
rc= memcached_response(server, NULL, 0, NULL);
|
|
37
|
+
|
|
38
|
+
if (rc == MEMCACHED_SUCCESS)
|
|
39
|
+
rc= MEMCACHED_NOTFOUND;
|
|
40
|
+
|
|
41
|
+
if (rc == MEMCACHED_DATA_EXISTS)
|
|
42
|
+
rc= MEMCACHED_SUCCESS;
|
|
43
|
+
|
|
44
|
+
return rc;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
static memcached_return ascii_exist(memcached_st *ptr, memcached_server_st *server,
|
|
48
|
+
const char* key, size_t key_length)
|
|
49
|
+
{
|
|
50
|
+
struct libmemcached_io_vector_st vector[]=
|
|
51
|
+
{
|
|
52
|
+
{ sizeof("add ") -1, "add " },
|
|
53
|
+
{ strlen(ptr->prefix_key), ptr->prefix_key },
|
|
54
|
+
{ key_length, key },
|
|
55
|
+
{ sizeof(" 0") -1, " 0" },
|
|
56
|
+
{ sizeof(" 2678400") -1, " 2678400" },
|
|
57
|
+
{ sizeof(" 0") -1, " 0" },
|
|
58
|
+
{ 2, "\r\n" },
|
|
59
|
+
{ 2, "\r\n" }
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
memcached_return rc = memcached_vdo(server, vector, 8, 1);
|
|
63
|
+
|
|
64
|
+
if (rc == MEMCACHED_SUCCESS)
|
|
65
|
+
{
|
|
66
|
+
char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
|
|
67
|
+
rc= memcached_response(server, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL);
|
|
68
|
+
|
|
69
|
+
if (rc == MEMCACHED_NOTSTORED)
|
|
70
|
+
rc= MEMCACHED_SUCCESS;
|
|
71
|
+
|
|
72
|
+
if (rc == MEMCACHED_STORED)
|
|
73
|
+
rc= MEMCACHED_NOTFOUND;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (rc == MEMCACHED_WRITE_FAILURE)
|
|
77
|
+
memcached_io_reset(server);
|
|
78
|
+
|
|
79
|
+
return rc;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
memcached_return memcached_exist(memcached_st *ptr, const char *key, size_t key_length)
|
|
83
|
+
{
|
|
84
|
+
return memcached_exist_by_key(ptr, key, key_length, key, key_length);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
memcached_return memcached_exist_by_key(memcached_st *ptr,
|
|
88
|
+
const char *group_key, size_t group_key_length,
|
|
89
|
+
const char *key, size_t key_length)
|
|
90
|
+
{
|
|
91
|
+
unlikely (ptr->flags & MEM_USE_UDP)
|
|
92
|
+
return MEMCACHED_NOT_SUPPORTED;
|
|
93
|
+
|
|
94
|
+
if (ptr->number_of_hosts == 0)
|
|
95
|
+
return MEMCACHED_NO_SERVERS;
|
|
96
|
+
|
|
97
|
+
if (ptr->flags & MEM_NOREPLY)
|
|
98
|
+
{
|
|
99
|
+
size_t dummy_length;
|
|
100
|
+
uint32_t dummy_flags;
|
|
101
|
+
memcached_return dummy_error;
|
|
102
|
+
|
|
103
|
+
memcached_get(ptr, key, key_length, &dummy_length, &dummy_flags, &dummy_error);
|
|
104
|
+
return dummy_error;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
unsigned int server_key= memcached_generate_hash(ptr, key, key_length);
|
|
108
|
+
memcached_server_st *server= &ptr->hosts[server_key];
|
|
109
|
+
|
|
110
|
+
if (ptr->flags & MEM_BINARY_PROTOCOL)
|
|
111
|
+
return binary_exist(ptr, server, key, key_length);
|
|
112
|
+
else
|
|
113
|
+
return ascii_exist(ptr, server, key, key_length);
|
|
114
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#ifndef __MEMCACHED_EXIST_H__
|
|
2
|
+
#define __MEMCACHED_EXIST_H__
|
|
3
|
+
|
|
4
|
+
#ifdef __cplusplus
|
|
5
|
+
extern "C" {
|
|
6
|
+
#endif
|
|
7
|
+
|
|
8
|
+
LIBMEMCACHED_API
|
|
9
|
+
memcached_return memcached_exist(memcached_st *memc, const char *key, size_t key_length);
|
|
10
|
+
|
|
11
|
+
LIBMEMCACHED_API
|
|
12
|
+
memcached_return memcached_exist_by_key(memcached_st *memc,
|
|
13
|
+
const char *group_key, size_t group_key_length,
|
|
14
|
+
const char *key, size_t key_length);
|
|
15
|
+
|
|
16
|
+
#ifdef __cplusplus
|
|
17
|
+
}
|
|
18
|
+
#endif
|
|
19
|
+
|
|
20
|
+
#endif /* __MEMCACHED_EXIST_H__ */
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#include "common.h"
|
|
2
|
+
#include "memcached_io.h"
|
|
3
|
+
|
|
4
|
+
char *memcached_fetch(memcached_st *ptr, char *key, size_t *key_length,
|
|
5
|
+
size_t *value_length,
|
|
6
|
+
uint32_t *flags,
|
|
7
|
+
memcached_return *error)
|
|
8
|
+
{
|
|
9
|
+
memcached_result_st *result_buffer= &ptr->result;
|
|
10
|
+
|
|
11
|
+
unlikely (ptr->flags & MEM_USE_UDP)
|
|
12
|
+
{
|
|
13
|
+
*error= MEMCACHED_NOT_SUPPORTED;
|
|
14
|
+
return NULL;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
result_buffer= memcached_fetch_result(ptr, result_buffer, error);
|
|
18
|
+
|
|
19
|
+
if (result_buffer == NULL || *error != MEMCACHED_SUCCESS)
|
|
20
|
+
{
|
|
21
|
+
WATCHPOINT_ASSERT(result_buffer == NULL);
|
|
22
|
+
*value_length= 0;
|
|
23
|
+
return NULL;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
*value_length= memcached_string_length(&result_buffer->value);
|
|
27
|
+
|
|
28
|
+
if (key)
|
|
29
|
+
{
|
|
30
|
+
strncpy(key, result_buffer->key, result_buffer->key_length);
|
|
31
|
+
*key_length= result_buffer->key_length;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (result_buffer->flags)
|
|
35
|
+
*flags= result_buffer->flags;
|
|
36
|
+
else
|
|
37
|
+
*flags= 0;
|
|
38
|
+
|
|
39
|
+
return memcached_string_c_copy(&result_buffer->value);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
memcached_result_st *memcached_fetch_result(memcached_st *ptr,
|
|
43
|
+
memcached_result_st *result,
|
|
44
|
+
memcached_return *error)
|
|
45
|
+
{
|
|
46
|
+
memcached_server_st *server;
|
|
47
|
+
|
|
48
|
+
unlikely (ptr->flags & MEM_USE_UDP)
|
|
49
|
+
{
|
|
50
|
+
*error= MEMCACHED_NOT_SUPPORTED;
|
|
51
|
+
return NULL;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (result == NULL)
|
|
55
|
+
if ((result= memcached_result_create(ptr, NULL)) == NULL)
|
|
56
|
+
return NULL;
|
|
57
|
+
|
|
58
|
+
while ((server = memcached_io_get_readable_server(ptr)) != NULL)
|
|
59
|
+
{
|
|
60
|
+
char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
|
|
61
|
+
*error= memcached_response(server, buffer, sizeof(buffer), result);
|
|
62
|
+
|
|
63
|
+
if (*error == MEMCACHED_SUCCESS)
|
|
64
|
+
return result;
|
|
65
|
+
else if (*error == MEMCACHED_END)
|
|
66
|
+
memcached_server_response_reset(server);
|
|
67
|
+
else
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* We have completed reading data */
|
|
72
|
+
if (result->is_allocated)
|
|
73
|
+
memcached_result_free(result);
|
|
74
|
+
else
|
|
75
|
+
memcached_string_reset(&result->value);
|
|
76
|
+
|
|
77
|
+
return NULL;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
memcached_return memcached_fetch_execute(memcached_st *ptr,
|
|
81
|
+
memcached_execute_function *callback,
|
|
82
|
+
void *context,
|
|
83
|
+
unsigned int number_of_callbacks)
|
|
84
|
+
{
|
|
85
|
+
memcached_result_st *result= &ptr->result;
|
|
86
|
+
memcached_return rc= MEMCACHED_FAILURE;
|
|
87
|
+
unsigned int x;
|
|
88
|
+
|
|
89
|
+
while ((result= memcached_fetch_result(ptr, result, &rc)) != NULL)
|
|
90
|
+
{
|
|
91
|
+
if (rc == MEMCACHED_SUCCESS)
|
|
92
|
+
{
|
|
93
|
+
for (x= 0; x < number_of_callbacks; x++)
|
|
94
|
+
{
|
|
95
|
+
rc= (*callback[x])(ptr, result, context);
|
|
96
|
+
if (rc != MEMCACHED_SUCCESS)
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return rc;
|
|
102
|
+
}
|