memcached 1.2.6 → 1.2.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (225) hide show
  1. data/CHANGELOG +2 -0
  2. data/Manifest +206 -12
  3. data/Rakefile +32 -1
  4. data/ext/extconf.rb +10 -35
  5. data/ext/libmemcached-0.32/AUTHORS +7 -0
  6. data/ext/libmemcached-0.32/COPYING +32 -0
  7. data/ext/libmemcached-0.32/ChangeLog +303 -0
  8. data/ext/libmemcached-0.32/INSTALL +302 -0
  9. data/ext/libmemcached-0.32/Makefile.am +36 -0
  10. data/ext/libmemcached-0.32/Makefile.in +828 -0
  11. data/ext/libmemcached-0.32/NEWS +1 -0
  12. data/ext/libmemcached-0.32/README +33 -0
  13. data/ext/libmemcached-0.32/THANKS +14 -0
  14. data/ext/libmemcached-0.32/TODO +11 -0
  15. data/ext/libmemcached-0.32/aclocal.m4 +1852 -0
  16. data/ext/libmemcached-0.32/clients/Makefile.am +73 -0
  17. data/ext/libmemcached-0.32/clients/Makefile.in +770 -0
  18. data/ext/libmemcached-0.32/clients/client_options.h +32 -0
  19. data/ext/libmemcached-0.32/clients/execute.c +64 -0
  20. data/ext/libmemcached-0.32/clients/execute.h +5 -0
  21. data/ext/libmemcached-0.32/clients/generator.c +74 -0
  22. data/ext/libmemcached-0.32/clients/generator.h +20 -0
  23. data/ext/libmemcached-0.32/clients/memcat.c +178 -0
  24. data/ext/libmemcached-0.32/clients/memcp.c +251 -0
  25. data/ext/libmemcached-0.32/clients/memdump.c +170 -0
  26. data/ext/libmemcached-0.32/clients/memerror.c +80 -0
  27. data/ext/libmemcached-0.32/clients/memflush.c +143 -0
  28. data/ext/libmemcached-0.32/clients/memrm.c +160 -0
  29. data/ext/libmemcached-0.32/clients/memslap.c +441 -0
  30. data/ext/libmemcached-0.32/clients/memstat.c +326 -0
  31. data/ext/libmemcached-0.32/clients/utilities.c +207 -0
  32. data/ext/libmemcached-0.32/clients/utilities.h +41 -0
  33. data/ext/libmemcached-0.32/config.h.in +252 -0
  34. data/ext/libmemcached-0.32/config/compile +143 -0
  35. data/ext/libmemcached-0.32/config/config.guess +1561 -0
  36. data/ext/libmemcached-0.32/config/config.rpath +666 -0
  37. data/ext/libmemcached-0.32/config/config.sub +1686 -0
  38. data/ext/libmemcached-0.32/config/depcomp +630 -0
  39. data/ext/libmemcached-0.32/config/install-sh +520 -0
  40. data/ext/libmemcached-0.32/config/ltmain.sh +8406 -0
  41. data/ext/libmemcached-0.32/config/missing +376 -0
  42. data/ext/libmemcached-0.32/configure +23048 -0
  43. data/ext/libmemcached-0.32/configure.ac +122 -0
  44. data/ext/libmemcached-0.32/docs/Makefile.am +415 -0
  45. data/ext/libmemcached-0.32/docs/Makefile.in +918 -0
  46. data/ext/libmemcached-0.32/docs/libmemcached.pod +123 -0
  47. data/ext/libmemcached-0.32/docs/libmemcached_examples.pod +115 -0
  48. data/ext/libmemcached-0.32/docs/libmemcachedutil.pod +40 -0
  49. data/ext/libmemcached-0.32/docs/memcached_analyze.pod +52 -0
  50. data/ext/libmemcached-0.32/docs/memcached_auto.pod +97 -0
  51. data/ext/libmemcached-0.32/docs/memcached_behavior.pod +224 -0
  52. data/ext/libmemcached-0.32/docs/memcached_callback.pod +123 -0
  53. data/ext/libmemcached-0.32/docs/memcached_create.pod +61 -0
  54. data/ext/libmemcached-0.32/docs/memcached_delete.pod +54 -0
  55. data/ext/libmemcached-0.32/docs/memcached_dump.pod +53 -0
  56. data/ext/libmemcached-0.32/docs/memcached_flush.pod +46 -0
  57. data/ext/libmemcached-0.32/docs/memcached_flush_buffers.pod +42 -0
  58. data/ext/libmemcached-0.32/docs/memcached_generate_hash_value.pod +57 -0
  59. data/ext/libmemcached-0.32/docs/memcached_get.pod +161 -0
  60. data/ext/libmemcached-0.32/docs/memcached_memory_allocators.pod +73 -0
  61. data/ext/libmemcached-0.32/docs/memcached_pool.pod +77 -0
  62. data/ext/libmemcached-0.32/docs/memcached_quit.pod +47 -0
  63. data/ext/libmemcached-0.32/docs/memcached_sasl.pod +63 -0
  64. data/ext/libmemcached-0.32/docs/memcached_server_st.pod +75 -0
  65. data/ext/libmemcached-0.32/docs/memcached_servers.pod +102 -0
  66. data/ext/libmemcached-0.32/docs/memcached_set.pod +187 -0
  67. data/ext/libmemcached-0.32/docs/memcached_stats.pod +82 -0
  68. data/ext/libmemcached-0.32/docs/memcached_strerror.pod +46 -0
  69. data/ext/libmemcached-0.32/docs/memcached_user_data.pod +49 -0
  70. data/ext/libmemcached-0.32/docs/memcached_verbosity.pod +41 -0
  71. data/ext/libmemcached-0.32/docs/memcached_version.pod +56 -0
  72. data/ext/libmemcached-0.32/docs/memcat.pod +37 -0
  73. data/ext/libmemcached-0.32/docs/memcp.pod +40 -0
  74. data/ext/libmemcached-0.32/docs/memdump.pod +31 -0
  75. data/ext/libmemcached-0.32/docs/memerror.pod +30 -0
  76. data/ext/libmemcached-0.32/docs/memflush.pod +35 -0
  77. data/ext/libmemcached-0.32/docs/memrm.pod +34 -0
  78. data/ext/libmemcached-0.32/docs/memslap.pod +33 -0
  79. data/ext/libmemcached-0.32/docs/memstat.pod +35 -0
  80. data/ext/libmemcached-0.32/libmemcached/Makefile.am +107 -0
  81. data/ext/libmemcached-0.32/libmemcached/Makefile.in +1050 -0
  82. data/ext/libmemcached-0.32/libmemcached/byteorder.c +31 -0
  83. data/ext/libmemcached-0.32/libmemcached/common.h +183 -0
  84. data/ext/libmemcached-0.32/libmemcached/crc.c +86 -0
  85. data/ext/libmemcached-0.32/libmemcached/hsieh_hash.c +68 -0
  86. data/ext/libmemcached-0.32/libmemcached/jenkins_hash.c +213 -0
  87. data/ext/libmemcached-0.32/libmemcached/libmemcached.ver +1 -0
  88. data/ext/libmemcached-0.32/libmemcached/libmemcached_probes.d +28 -0
  89. data/ext/libmemcached-0.32/libmemcached/libmemcached_probes.h +78 -0
  90. data/ext/libmemcached-0.32/libmemcached/md5.c +354 -0
  91. data/ext/libmemcached-0.32/libmemcached/memcached.c +152 -0
  92. data/ext/libmemcached-0.32/libmemcached/memcached.h +302 -0
  93. data/ext/libmemcached-0.32/libmemcached/memcached.hpp +799 -0
  94. data/ext/libmemcached-0.32/libmemcached/memcached/README.txt +7 -0
  95. data/ext/libmemcached-0.32/libmemcached/memcached/protocol_binary.h +366 -0
  96. data/ext/libmemcached-0.32/libmemcached/memcached_allocators.c +72 -0
  97. data/ext/libmemcached-0.32/libmemcached/memcached_analyze.c +100 -0
  98. data/ext/libmemcached-0.32/libmemcached/memcached_auto.c +207 -0
  99. data/ext/libmemcached-0.32/libmemcached/memcached_behavior.c +285 -0
  100. data/ext/libmemcached-0.32/libmemcached/memcached_callback.c +175 -0
  101. data/ext/libmemcached-0.32/libmemcached/memcached_configure.h.in +23 -0
  102. data/ext/libmemcached-0.32/libmemcached/memcached_connect.c +361 -0
  103. data/ext/libmemcached-0.32/libmemcached/memcached_constants.h +145 -0
  104. data/ext/libmemcached-0.32/libmemcached/memcached_delete.c +0 -0
  105. data/ext/libmemcached-0.32/libmemcached/memcached_do.c +34 -0
  106. data/ext/libmemcached-0.32/libmemcached/memcached_dump.c +79 -0
  107. data/ext/libmemcached-0.32/libmemcached/memcached_fetch.c +102 -0
  108. data/ext/libmemcached-0.32/libmemcached/memcached_flush.c +89 -0
  109. data/ext/libmemcached-0.32/libmemcached/memcached_flush_buffers.c +22 -0
  110. data/ext/libmemcached-0.32/libmemcached/memcached_get.c +495 -0
  111. data/ext/libmemcached-0.32/libmemcached/memcached_get.h +87 -0
  112. data/ext/libmemcached-0.32/libmemcached/memcached_hash.c +252 -0
  113. data/ext/libmemcached-0.32/libmemcached/memcached_hosts.c +510 -0
  114. data/ext/libmemcached-0.32/libmemcached/memcached_internal.h +31 -0
  115. data/ext/libmemcached-0.32/libmemcached/memcached_io.c +547 -0
  116. data/ext/libmemcached-0.32/libmemcached/memcached_io.h +59 -0
  117. data/ext/libmemcached-0.32/libmemcached/memcached_key.c +28 -0
  118. data/ext/libmemcached-0.32/libmemcached/memcached_parse.c +74 -0
  119. data/ext/libmemcached-0.32/libmemcached/memcached_pool.h +38 -0
  120. data/ext/libmemcached-0.32/libmemcached/memcached_purge.c +76 -0
  121. data/ext/libmemcached-0.32/libmemcached/memcached_quit.c +75 -0
  122. data/ext/libmemcached-0.32/libmemcached/memcached_response.c +528 -0
  123. data/ext/libmemcached-0.32/libmemcached/memcached_result.c +57 -0
  124. data/ext/libmemcached-0.32/libmemcached/memcached_result.h +59 -0
  125. data/ext/libmemcached-0.32/libmemcached/memcached_sasl.c +225 -0
  126. data/ext/libmemcached-0.32/libmemcached/memcached_sasl.h +44 -0
  127. data/ext/libmemcached-0.32/libmemcached/memcached_server.c +159 -0
  128. data/ext/libmemcached-0.32/libmemcached/memcached_server.h +93 -0
  129. data/ext/libmemcached-0.32/libmemcached/memcached_stats.c +454 -0
  130. data/ext/libmemcached-0.32/libmemcached/memcached_storage.c +514 -0
  131. data/ext/libmemcached-0.32/libmemcached/memcached_storage.h +107 -0
  132. data/ext/libmemcached-0.32/libmemcached/memcached_strerror.c +92 -0
  133. data/ext/libmemcached-0.32/libmemcached/memcached_string.c +138 -0
  134. data/ext/libmemcached-0.32/libmemcached/memcached_string.h +53 -0
  135. data/ext/libmemcached-0.32/libmemcached/memcached_types.h +44 -0
  136. data/ext/libmemcached-0.32/libmemcached/memcached_util.h +15 -0
  137. data/ext/libmemcached-0.32/libmemcached/memcached_verbosity.c +36 -0
  138. data/ext/libmemcached-0.32/libmemcached/memcached_version.c +112 -0
  139. data/ext/libmemcached-0.32/libmemcached/memcached_watchpoint.h +38 -0
  140. data/ext/libmemcached-0.32/libmemcached/murmur_hash.c +76 -0
  141. data/ext/libmemcached-0.32/libmemcached/visibility.h +51 -0
  142. data/ext/libmemcached-0.32/libmemcachedutil/Makefile.am +11 -0
  143. data/ext/libmemcached-0.32/libmemcachedutil/Makefile.in +602 -0
  144. data/ext/libmemcached-0.32/libmemcachedutil/libmemcachedutil.ver +1 -0
  145. data/ext/libmemcached-0.32/libmemcachedutil/memcached_pool.c +170 -0
  146. data/ext/libmemcached-0.32/m4/ac_cxx_compile_stdcxx_0x.m4 +103 -0
  147. data/ext/libmemcached-0.32/m4/ac_cxx_header_stdcxx_98.m4 +67 -0
  148. data/ext/libmemcached-0.32/m4/acx_pthread.m4 +276 -0
  149. data/ext/libmemcached-0.32/m4/byteorder.m4 +40 -0
  150. data/ext/libmemcached-0.32/m4/deprecated.m4 +17 -0
  151. data/ext/libmemcached-0.32/m4/enable_utillib.m4 +16 -0
  152. data/ext/libmemcached-0.32/m4/extensions.m4 +94 -0
  153. data/ext/libmemcached-0.32/m4/hsieh.m4 +18 -0
  154. data/ext/libmemcached-0.32/m4/lib-prefix.m4 +221 -0
  155. data/ext/libmemcached-0.32/m4/libtool.m4 +7360 -0
  156. data/ext/libmemcached-0.32/m4/ltoptions.m4 +368 -0
  157. data/ext/libmemcached-0.32/m4/ltsugar.m4 +123 -0
  158. data/ext/libmemcached-0.32/m4/ltversion.m4 +23 -0
  159. data/ext/libmemcached-0.32/m4/lt~obsolete.m4 +92 -0
  160. data/ext/libmemcached-0.32/m4/memcached.m4 +30 -0
  161. data/ext/libmemcached-0.32/m4/pandora_64bit.m4 +55 -0
  162. data/ext/libmemcached-0.32/m4/pandora_canonical.m4 +151 -0
  163. data/ext/libmemcached-0.32/m4/pandora_check_compiler_version.m4 +37 -0
  164. data/ext/libmemcached-0.32/m4/pandora_check_cxx_standard.m4 +16 -0
  165. data/ext/libmemcached-0.32/m4/pandora_enable_dtrace.m4 +41 -0
  166. data/ext/libmemcached-0.32/m4/pandora_ensure_gcc_version.m4 +36 -0
  167. data/ext/libmemcached-0.32/m4/pandora_have_better_malloc.m4 +54 -0
  168. data/ext/libmemcached-0.32/m4/pandora_have_sasl.m4 +133 -0
  169. data/ext/libmemcached-0.32/m4/pandora_header_assert.m4 +23 -0
  170. data/ext/libmemcached-0.32/m4/pandora_libtool.m4 +15 -0
  171. data/ext/libmemcached-0.32/m4/pandora_optimize.m4 +79 -0
  172. data/ext/libmemcached-0.32/m4/pandora_shared_ptr.m4 +56 -0
  173. data/ext/libmemcached-0.32/m4/pandora_vc_build.m4 +32 -0
  174. data/ext/libmemcached-0.32/m4/pandora_warnings.m4 +262 -0
  175. data/ext/libmemcached-0.32/m4/pod2man.m4 +7 -0
  176. data/ext/libmemcached-0.32/m4/protocol_binary.m4 +23 -0
  177. data/ext/libmemcached-0.32/m4/setsockopt.m4 +57 -0
  178. data/ext/libmemcached-0.32/m4/visibility.m4 +52 -0
  179. data/ext/libmemcached-0.32/support/Makefile.am +4 -0
  180. data/ext/libmemcached-0.32/support/Makefile.in +485 -0
  181. data/ext/libmemcached-0.32/support/libmemcached-fc.spec.in +105 -0
  182. data/ext/libmemcached-0.32/support/libmemcached.pc.in +10 -0
  183. data/ext/libmemcached-0.32/support/libmemcached.spec +105 -0
  184. data/ext/libmemcached-0.32/support/libmemcached.spec.in +105 -0
  185. data/ext/libmemcached-0.32/support/set_benchmark.sh +5 -0
  186. data/ext/libmemcached-0.32/tests/Makefile.am +105 -0
  187. data/ext/libmemcached-0.32/tests/Makefile.in +748 -0
  188. data/ext/libmemcached-0.32/tests/atomsmasher.c +245 -0
  189. data/ext/libmemcached-0.32/tests/function.c +4781 -0
  190. data/ext/libmemcached-0.32/tests/ketama_test_cases.h +108 -0
  191. data/ext/libmemcached-0.32/tests/output.cmp +7 -0
  192. data/ext/libmemcached-0.32/tests/output.res +7 -0
  193. data/ext/libmemcached-0.32/tests/output2.res +46 -0
  194. data/ext/libmemcached-0.32/tests/plus.cpp +293 -0
  195. data/ext/libmemcached-0.32/tests/r/memcat.res +19 -0
  196. data/ext/libmemcached-0.32/tests/r/memcp.res +27 -0
  197. data/ext/libmemcached-0.32/tests/r/memrm.res +19 -0
  198. data/ext/libmemcached-0.32/tests/r/memslap.res +33 -0
  199. data/ext/libmemcached-0.32/tests/r/memstat.res +33 -0
  200. data/ext/libmemcached-0.32/tests/server.c +118 -0
  201. data/ext/libmemcached-0.32/tests/server.h +25 -0
  202. data/ext/libmemcached-0.32/tests/start.c +16 -0
  203. data/ext/libmemcached-0.32/tests/t/memcat.test +4 -0
  204. data/ext/libmemcached-0.32/tests/t/memcp.test +3 -0
  205. data/ext/libmemcached-0.32/tests/t/memrm.test +3 -0
  206. data/ext/libmemcached-0.32/tests/t/memslap.test +5 -0
  207. data/ext/libmemcached-0.32/tests/t/memstat.test +3 -0
  208. data/ext/libmemcached-0.32/tests/test.c +137 -0
  209. data/ext/libmemcached-0.32/tests/test.h +46 -0
  210. data/ext/libmemcached-0.32/tests/udp.c +76 -0
  211. data/memcached.gemspec +4 -4
  212. data/test/unit/memcached_test.rb +30 -0
  213. metadata +213 -16
  214. data/ext/libmemcached-0.32.tar.gz +0 -0
  215. data/ext/libmemcached-1.patch +0 -270
  216. data/ext/libmemcached-10.patch +0 -12
  217. data/ext/libmemcached-2.patch +0 -116
  218. data/ext/libmemcached-3.patch +0 -8
  219. data/ext/libmemcached-4.patch +0 -40
  220. data/ext/libmemcached-5.patch +0 -832
  221. data/ext/libmemcached-6.patch +0 -20
  222. data/ext/libmemcached-7.patch +0 -2989
  223. data/ext/libmemcached-8.patch +0 -137
  224. data/ext/libmemcached-9.patch +0 -13
  225. data/ext/sasl.patch +0 -29283
Binary file
@@ -1,270 +0,0 @@
1
-
2
- diff --git a/libmemcached-0.32/libmemcached/memcached_response.c b/libmemcached/libmemcached/memcached_response.c
3
- --- a/libmemcached-0.32/libmemcached/memcached_response.c
4
- +++ b/libmemcached/libmemcached/memcached_response.c
5
- @@ -496,6 +496,8 @@
6
- case PROTOCOL_BINARY_RESPONSE_E2BIG:
7
- case PROTOCOL_BINARY_RESPONSE_EINVAL:
8
- case PROTOCOL_BINARY_RESPONSE_NOT_STORED:
9
- + rc= MEMCACHED_NOTSTORED;
10
- + break;
11
- case PROTOCOL_BINARY_RESPONSE_UNKNOWN_COMMAND:
12
- case PROTOCOL_BINARY_RESPONSE_ENOMEM:
13
- default:
14
- diff --git a/libmemcached-0.32/libmemcached/memcached.c b/libmemcached/libmemcached/memcached.c
15
- --- a/libmemcached-0.32/libmemcached/memcached.c
16
- +++ b/libmemcached/libmemcached/memcached.c
17
- @@ -50,6 +50,9 @@ void memcached_free(memcached_st *ptr)
18
- if (ptr->continuum)
19
- ptr->call_free(ptr, ptr->continuum);
20
-
21
- + if (ptr->live_host_indices)
22
- + ptr->call_free(ptr, ptr->live_host_indices);
23
- +
24
- if (ptr->is_allocated)
25
- ptr->call_free(ptr, ptr);
26
- else
27
- diff --git a/libmemcached-0.32/libmemcached/memcached.h b/libmemcached/libmemcached/memcached.h
28
- --- a/libmemcached-0.32/libmemcached/memcached.h
29
- +++ b/libmemcached/libmemcached/memcached.h
30
- @@ -112,6 +112,9 @@ struct memcached_st {
31
- memcached_trigger_delete_key delete_trigger;
32
- char prefix_key[MEMCACHED_PREFIX_KEY_MAX_SIZE];
33
- uint32_t number_of_replicas;
34
- + uint32_t number_of_live_hosts;
35
- + uint32_t *live_host_indices;
36
- + uint32_t live_host_indices_size;
37
- };
38
-
39
- LIBMEMCACHED_API
40
- diff --git a/libmemcached-0.32/libmemcached/memcached_connect.c b/libmemcached/libmemcached/memcached_connect.c
41
- --- a/libmemcached-0.32/libmemcached/memcached_connect.c
42
- +++ b/libmemcached/libmemcached/memcached_connect.c
43
- @@ -273,7 +272,6 @@ static memcached_return network_connect(memcached_server_st *ptr)
44
- (void)fcntl(ptr->fd, F_SETFL, flags & ~O_NONBLOCK);
45
-
46
- WATCHPOINT_ASSERT(ptr->cursor_active == 0);
47
- - ptr->server_failure_counter= 0;
48
- return MEMCACHED_SUCCESS;
49
- }
50
- use = use->ai_next;
51
- @@ -282,21 +280,13 @@ static memcached_return network_connect(memcached_server_st *ptr)
52
-
53
- if (ptr->fd == -1)
54
- {
55
- - /* Failed to connect. schedule next retry */
56
- - if (ptr->root->retry_timeout)
57
- - {
58
- - struct timeval next_time;
59
- -
60
- - if (gettimeofday(&next_time, NULL) == 0)
61
- - ptr->next_retry= next_time.tv_sec + ptr->root->retry_timeout;
62
- - }
63
- - ptr->server_failure_counter+= 1;
64
- + ptr->server_failure_counter ++;
65
- if (ptr->cached_errno == 0)
66
- return MEMCACHED_TIMEOUT;
67
- +
68
- return MEMCACHED_ERRNO; /* The last error should be from connect() */
69
- }
70
-
71
- - ptr->server_failure_counter= 0;
72
- return MEMCACHED_SUCCESS; /* The last error should be from connect() */
73
- }
74
-
75
- @@ -315,7 +305,7 @@ memcached_return memcached_connect(memcached_server_st *ptr)
76
- gettimeofday(&next_time, NULL);
77
-
78
- /* if we've had too many consecutive errors on this server, mark it dead. */
79
- - if (ptr->server_failure_counter > ptr->root->server_failure_limit)
80
- + if (ptr->server_failure_counter >= ptr->root->server_failure_limit)
81
- {
82
- ptr->next_retry= next_time.tv_sec + ptr->root->retry_timeout;
83
- ptr->server_failure_counter= 0;
84
- diff --git a/libmemcached-0.32/libmemcached/memcached_get.h b/libmemcached/libmemcached/memcached_get.h
85
- diff --git a/libmemcached-0.32/libmemcached/memcached_hash.c b/libmemcached/libmemcached/memcached_hash.c
86
- index 129d761..3a7fa55 100644
87
- --- a/libmemcached-0.32/libmemcached/memcached_hash.c
88
- +++ b/libmemcached/libmemcached/memcached_hash.c
89
- @@ -11,6 +11,7 @@ static uint32_t FNV_32_PRIME= 16777619;
90
- /* Prototypes */
91
- static uint32_t internal_generate_hash(const char *key, size_t key_length);
92
- static uint32_t internal_generate_md5(const char *key, size_t key_length);
93
- +uint32_t memcached_live_host_index(memcached_st *ptr, uint32_t num);
94
-
95
- uint32_t memcached_generate_hash_value(const char *key, size_t key_length, memcached_hash hash_algorithm)
96
- {
97
- @@ -146,10 +144,10 @@ static uint32_t dispatch_host(memcached_st *ptr, uint32_t hash)
98
- right= begin;
99
- return right->index;
100
- }
101
- - case MEMCACHED_DISTRIBUTION_MODULA:
102
- - return hash % ptr->number_of_hosts;
103
- + case MEMCACHED_DISTRIBUTION_MODULA:
104
- + return memcached_live_host_index(ptr, hash);
105
- case MEMCACHED_DISTRIBUTION_RANDOM:
106
- - return (uint32_t) random() % ptr->number_of_hosts;
107
- + return memcached_live_host_index(ptr, (uint32_t) random());
108
- default:
109
- WATCHPOINT_ASSERT(0); /* We have added a distribution without extending the logic */
110
- return hash % ptr->number_of_hosts;
111
- @@ -201,6 +199,19 @@ uint32_t memcached_generate_hash(memcached_st *ptr, const char *key, size_t key_
112
- return dispatch_host(ptr, hash);
113
- }
114
-
115
- +uint32_t memcached_live_host_index(memcached_st *ptr, uint32_t num)
116
- +{
117
- + if (memcached_behavior_get(ptr, MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS)) {
118
- + if (ptr->number_of_live_hosts > 0) {
119
- + return ptr->live_host_indices[num % ptr->number_of_live_hosts];
120
- + } else {
121
- + return 0; /* FIXME: we should do something different if every server's dead, but I dunno what. */
122
- + }
123
- + } else {
124
- + return num % ptr->number_of_hosts;
125
- + }
126
- +}
127
- +
128
- static uint32_t internal_generate_hash(const char *key, size_t key_length)
129
- {
130
- const char *ptr= key;
131
- diff --git a/libmemcached-0.32/libmemcached/memcached_hosts.c b/libmemcached/libmemcached/memcached_hosts.c
132
- --- a/libmemcached-0.32/libmemcached/memcached_hosts.c
133
- +++ b/libmemcached/libmemcached/memcached_hosts.c
134
- @@ -7,6 +7,7 @@ static memcached_return server_add(memcached_st *ptr, const char *hostname,
135
- uint32_t weight,
136
- memcached_connection type);
137
- memcached_return update_continuum(memcached_st *ptr);
138
- +memcached_return update_live_host_indices(memcached_st *ptr);
139
-
140
- static int compare_servers(const void *p1, const void *p2)
141
- {
142
- @@ -44,8 +45,12 @@ memcached_return run_distribution(memcached_st *ptr)
143
- case MEMCACHED_DISTRIBUTION_MODULA:
144
- if (ptr->flags & MEM_USE_SORT_HOSTS)
145
- sort_hosts(ptr);
146
- + if (memcached_behavior_get(ptr, MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS))
147
- + update_live_host_indices(ptr);
148
- break;
149
- case MEMCACHED_DISTRIBUTION_RANDOM:
150
- + if (memcached_behavior_get(ptr, MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS))
151
- + update_live_host_indices(ptr);
152
- break;
153
- default:
154
- WATCHPOINT_ASSERT(0); /* We have added a distribution without extending the logic */
155
- @@ -85,6 +90,46 @@ static uint32_t ketama_server_hash(const char *key, unsigned int key_length, int
156
- | (results[0 + alignment * 4] & 0xFF);
157
- }
158
-
159
- +memcached_return update_live_host_indices(memcached_st *ptr)
160
- +{
161
- + uint32_t host_index;
162
- + struct timeval now;
163
- + uint32_t i = 0;
164
- + memcached_server_st *list;
165
- +
166
- + if (gettimeofday(&now, NULL) != 0)
167
- + {
168
- + ptr->cached_errno = errno;
169
- + return MEMCACHED_ERRNO;
170
- + }
171
- +
172
- + if (ptr->live_host_indices == NULL) {
173
- + ptr->live_host_indices = (uint32_t *)ptr->call_malloc(ptr, sizeof(uint32_t) * ptr->number_of_hosts);
174
- + ptr->live_host_indices_size = ptr->number_of_live_hosts;
175
- + }
176
- +
177
- + /* somehow we added some hosts. Shouldn't get here much, if at all. */
178
- + if (ptr->live_host_indices_size < ptr->number_of_hosts ) {
179
- + ptr->live_host_indices = (uint32_t *)ptr->call_realloc(ptr, ptr->live_host_indices, sizeof(uint32_t) * ptr->number_of_hosts);
180
- + ptr->live_host_indices_size = ptr->number_of_live_hosts;
181
- + }
182
- +
183
- + if (ptr->live_host_indices == NULL)
184
- + return MEMCACHED_FAILURE;
185
- +
186
- + list = ptr->hosts;
187
- + for (host_index= 0; host_index < ptr->number_of_hosts; ++host_index)
188
- + {
189
- + if (list[host_index].next_retry <= now.tv_sec) {
190
- + ptr->live_host_indices[i++] = host_index;
191
- + } else if (ptr->next_distribution_rebuild == 0 || list[host_index].next_retry < ptr->next_distribution_rebuild) {
192
- + ptr->next_distribution_rebuild= list[host_index].next_retry;
193
- + }
194
- + }
195
- + ptr->number_of_live_hosts = i;
196
- + return MEMCACHED_SUCCESS;
197
- +}
198
- +
199
- static int continuum_item_cmp(const void *t1, const void *t2)
200
- {
201
- memcached_continuum_item_st *ct1= (memcached_continuum_item_st *)t1;
202
- @@ -111,8 +156,8 @@ memcached_return update_continuum(memcached_st *ptr)
203
- uint32_t pointer_per_server= MEMCACHED_POINTS_PER_SERVER;
204
- uint32_t pointer_per_hash= 1;
205
- uint64_t total_weight= 0;
206
- - uint64_t is_ketama_weighted= 0;
207
- - uint64_t is_auto_ejecting= 0;
208
- + uint32_t is_ketama_weighted= 0;
209
- + uint32_t is_auto_ejecting= 0;
210
- uint32_t points_per_server= 0;
211
- uint32_t live_servers= 0;
212
- struct timeval now;
213
- diff --git a/libmemcached-0.32/libmemcached/memcached_storage.c b/libmemcached/libmemcached/memcached_storage.c
214
- index ecefc56..ee79a7e 100644
215
- --- a/libmemcached-0.32/libmemcached/memcached_storage.c
216
- +++ b/libmemcached/libmemcached/memcached_storage.c
217
- @@ -135,22 +135,16 @@ static inline memcached_return memcached_send(memcached_st *ptr,
218
- }
219
-
220
- if (write_length >= MEMCACHED_DEFAULT_COMMAND_SIZE)
221
- - {
222
- - rc= MEMCACHED_WRITE_FAILURE;
223
- - goto error;
224
- - }
225
- + return MEMCACHED_WRITE_FAILURE;
226
-
227
- /* Send command header */
228
- rc= memcached_do(&ptr->hosts[server_key], buffer, write_length, 0);
229
- if (rc != MEMCACHED_SUCCESS)
230
- - goto error;
231
- + return rc;
232
-
233
- /* Send command body */
234
- if ((sent_length= memcached_io_write(&ptr->hosts[server_key], value, value_length, 0)) == -1)
235
- - {
236
- - rc= MEMCACHED_WRITE_FAILURE;
237
- - goto error;
238
- - }
239
- + return MEMCACHED_WRITE_FAILURE;
240
-
241
- if ((ptr->flags & MEM_BUFFER_REQUESTS) && verb == SET_OP)
242
- to_write= 0;
243
- @@ -158,10 +152,7 @@ static inline memcached_return memcached_send(memcached_st *ptr,
244
- to_write= 1;
245
-
246
- if ((sent_length= memcached_io_write(&ptr->hosts[server_key], "\r\n", 2, to_write)) == -1)
247
- - {
248
- - rc= MEMCACHED_WRITE_FAILURE;
249
- - goto error;
250
- - }
251
- + return MEMCACHED_WRITE_FAILURE;
252
-
253
- if (ptr->flags & MEM_NOREPLY)
254
- return (to_write == 0) ? MEMCACHED_BUFFERED : MEMCACHED_SUCCESS;
255
- @@ -170,15 +161,8 @@ static inline memcached_return memcached_send(memcached_st *ptr,
256
- return MEMCACHED_BUFFERED;
257
-
258
- rc= memcached_response(&ptr->hosts[server_key], buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL);
259
- -
260
- if (rc == MEMCACHED_STORED)
261
- - return MEMCACHED_SUCCESS;
262
- - else
263
- - return rc;
264
- -
265
- -error:
266
- - memcached_io_reset(&ptr->hosts[server_key]);
267
- -
268
- + return MEMCACHED_SUCCESS;
269
- return rc;
270
- }
@@ -1,12 +0,0 @@
1
- diff -uwr a/libmemcached-0.32/libmemcached/memcached_connect.c b/libmemcached-0.32/libmemcached/memcached_connect.c
2
- --- a/libmemcached-0.32/libmemcached/memcached_connect.c 2011-04-25 11:14:16.000000000 -0700
3
- +++ b/libmemcached-0.32/libmemcached/memcached_connect.c 2011-04-25 11:08:49.000000000 -0700
4
- @@ -242,6 +242,8 @@
5
-
6
- if (error != 1 || fds[0].revents & POLLERR)
7
- {
8
- + ptr->cached_errno = 0;
9
- +
10
- if (fds[0].revents & POLLERR)
11
- {
12
- int err;
@@ -1,116 +0,0 @@
1
- diff --git a/libmemcached-0.32/libmemcached/memcached.h libmemcached/libmemcached/memcached.h
2
- --- a/libmemcached-0.32/libmemcached/memcached.h
3
- +++ b/libmemcached/libmemcached/memcached.h
4
- @@ -119,6 +119,7 @@
5
- #ifdef LIBMEMCACHED_WITH_SASL_SUPPORT
6
- const sasl_callback_t *sasl_callbacks;
7
- #endif
8
- + int last_server_key;
9
- };
10
-
11
- LIBMEMCACHED_API
12
- diff --git a/libmemcached-0.32/libmemcached/memcached_get.c libmemcached/libmemcached/memcached_get.c
13
- --- a/libmemcached-0.32/libmemcached/memcached_get.c
14
- +++ b/libmemcached/libmemcached/memcached_get.c
15
- @@ -235,6 +235,8 @@
16
- rc= MEMCACHED_SOME_ERRORS;
17
- continue;
18
- }
19
- +
20
- + ptr->last_server_key = server_key;
21
- }
22
-
23
- /*
24
- @@ -256,6 +258,74 @@
25
- return rc;
26
- }
27
-
28
- +
29
- +char *memcached_get_from_last(memcached_st *ptr,
30
- + const char *key,
31
- + size_t key_length,
32
- + size_t *value_length,
33
- + uint32_t *flags,
34
- + memcached_return *error)
35
- +{
36
- + memcached_return rc = MEMCACHED_NOTFOUND;
37
- + char *value = NULL;
38
- +
39
- + if (memcached_server_response_count(&ptr->hosts[ptr->last_server_key]) == 0) {
40
- + *error = memcached_connect(&ptr->hosts[ptr->last_server_key]);
41
- +
42
- + if (*error != MEMCACHED_SUCCESS) {
43
- + return value;
44
- + }
45
- +
46
- + if ((memcached_io_write(&ptr->hosts[ptr->last_server_key], "get ", 4, 0)) == -1) {
47
- + *error = MEMCACHED_SOME_ERRORS;
48
- + return value;
49
- + }
50
- + WATCHPOINT_ASSERT(ptr->hosts[ptr->last_server_key].cursor_active == 0);
51
- + memcached_server_response_increment(&ptr->hosts[ptr->last_server_key]);
52
- + WATCHPOINT_ASSERT(ptr->hosts[ptr->last_server_key].cursor_active == 1);
53
- + }
54
- +
55
- + /* Only called when we have a prefix key */
56
- + if (ptr->prefix_key[0] != 0) {
57
- + if ((memcached_io_write(&ptr->hosts[ptr->last_server_key], ptr->prefix_key, ptr->prefix_key_length, 0)) == -1) {
58
- + memcached_server_response_reset(&ptr->hosts[ptr->last_server_key]);
59
- + *error = MEMCACHED_SOME_ERRORS;
60
- + return value;
61
- + }
62
- + }
63
- +
64
- + if ((memcached_io_write(&ptr->hosts[ptr->last_server_key], key, key_length, 0)) == -1) {
65
- + memcached_server_response_reset(&ptr->hosts[ptr->last_server_key]);
66
- + *error = MEMCACHED_SOME_ERRORS;
67
- + return value;
68
- + }
69
- +
70
- + if ((memcached_io_write(&ptr->hosts[ptr->last_server_key], "\r\n", 2, 1)) == -1) {
71
- + memcached_server_response_reset(&ptr->hosts[ptr->last_server_key]);
72
- + *error = MEMCACHED_SOME_ERRORS;
73
- + return value;
74
- + }
75
- +
76
- + value = memcached_fetch(ptr, NULL, NULL, value_length, flags, error);
77
- +
78
- + /* This is for historical reasons */
79
- + if (*error == MEMCACHED_END)
80
- + *error = MEMCACHED_NOTFOUND;
81
- +
82
- + if (value != NULL) {
83
- + size_t dummy_length;
84
- + uint32_t dummy_flags;
85
- + memcached_return dummy_error;
86
- +
87
- + (void)memcached_fetch(ptr, NULL, NULL,
88
- + &dummy_length, &dummy_flags,
89
- + &dummy_error);
90
- + WATCHPOINT_ASSERT(dummy_length == 0);
91
- + }
92
- +
93
- + return value;
94
- +}
95
- +
96
- static memcached_return simple_binary_mget(memcached_st *ptr,
97
- unsigned int master_server_key,
98
- bool is_master_key_set,
99
- diff --git a/libmemcached-0.32/libmemcached/memcached_get.h libmemcached/libmemcached/memcached_get.h
100
- --- a/libmemcached-0.32/libmemcached/memcached_get.h
101
- +++ b/libmemcached/libmemcached/memcached_get.h
102
- @@ -53,7 +53,13 @@
103
- memcached_result_st *result,
104
- memcached_return *error);
105
-
106
- -
107
- +LIBMEMCACHED_API
108
- +char *memcached_get_from_last(memcached_st *ptr,
109
- + const char *key,
110
- + size_t key_length,
111
- + size_t *value_length,
112
- + uint32_t *flags,
113
- + memcached_return *error);
114
-
115
- #ifdef __cplusplus
116
- }
@@ -1,8 +0,0 @@
1
- diff --git a/libmemcached-0.32/libmemcached/memcached_storage.c libmemcached/libmemcached/memcached_storage.c
2
- --- a/libmemcached-0.32/libmemcached/memcached_storage.c
3
- +++ b/libmemcached/libmemcached/memcached_storage.c
4
- 149c149,150
5
- < if ((ptr->flags & MEM_BUFFER_REQUESTS) && verb == SET_OP)
6
- ---
7
- > if ((ptr->flags & MEM_BUFFER_REQUESTS) &&
8
- > (verb == SET_OP || verb == PREPEND_OP || verb == APPEND_OP))
@@ -1,40 +0,0 @@
1
- diff --git a/libmemcached-0.32/clients/utilities.c b/libmemcached-0.32/clients/utilities.c
2
- --- a/libmemcached-0.32/clients/utilities.c
3
- +++ b/libmemcached-0.32/clients/utilities.c
4
- @@ -99,6 +99,8 @@ void process_hash_option(memcached_st *memc, char *opt_hash)
5
- set= MEMCACHED_HASH_FNV1_32;
6
- else if (!strcasecmp(opt_hash, "FNV1A_32"))
7
- set= MEMCACHED_HASH_FNV1A_32;
8
- + else if (!strcasecmp(opt_hash, "NONE"))
9
- + set= MEMCACHED_HASH_NONE;
10
- else
11
- {
12
- fprintf(stderr, "hash: type not recognized %s\n", opt_hash);
13
- diff --git a/libmemcached-0.32/libmemcached/memcached_constants.h b/libmemcached-0.32/libmemcached/memcached_constants.h
14
- --- a/libmemcached-0.32/libmemcached/memcached_constants.h
15
- +++ b/libmemcached-0.32/libmemcached/memcached_constants.h
16
- @@ -132,7 +132,8 @@ typedef enum {
17
- MEMCACHED_HASH_FNV1A_32,
18
- MEMCACHED_HASH_HSIEH,
19
- MEMCACHED_HASH_MURMUR,
20
- - MEMCACHED_HASH_JENKINS
21
- + MEMCACHED_HASH_JENKINS,
22
- + MEMCACHED_HASH_NONE
23
- } memcached_hash;
24
-
25
- typedef enum {
26
- diff --git a/libmemcached-0.32/libmemcached/memcached_hash.c b/libmemcached-0.32/libmemcached/memcached_hash.c
27
- --- a/libmemcached-0.32/libmemcached/memcached_hash.c
28
- +++ b/libmemcached-0.32/libmemcached/memcached_hash.c
29
- @@ -96,6 +96,11 @@ uint32_t memcached_generate_hash_value(const char *key, size_t key_length, memca
30
- hash=jenkins_hash(key, key_length, 13);
31
- break;
32
- }
33
- + case MEMCACHED_HASH_NONE:
34
- + {
35
- + hash= 1;
36
- + break;
37
- + }
38
- default:
39
- {
40
- WATCHPOINT_ASSERT(hash_algorithm);