couchbase-memcached 1.2.8

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.
Files changed (539) hide show
  1. data.tar.gz.sig +2 -0
  2. data/BENCHMARKS +134 -0
  3. data/CHANGELOG +127 -0
  4. data/LICENSE +184 -0
  5. data/Manifest +535 -0
  6. data/README +118 -0
  7. data/Rakefile +83 -0
  8. data/TODO +4 -0
  9. data/couchbase-memcached.gemspec +33 -0
  10. data/ext/extconf-make.rb +25 -0
  11. data/ext/extconf.rb +91 -0
  12. data/ext/libmemcached-0.50/AUTHORS +11 -0
  13. data/ext/libmemcached-0.50/COPYING +33 -0
  14. data/ext/libmemcached-0.50/ChangeLog +392 -0
  15. data/ext/libmemcached-0.50/Makefile.am +114 -0
  16. data/ext/libmemcached-0.50/Makefile.in +4232 -0
  17. data/ext/libmemcached-0.50/NEWS +1 -0
  18. data/ext/libmemcached-0.50/README +43 -0
  19. data/ext/libmemcached-0.50/README.FIRST +31 -0
  20. data/ext/libmemcached-0.50/README.win32 +25 -0
  21. data/ext/libmemcached-0.50/THANKS +14 -0
  22. data/ext/libmemcached-0.50/TODO +11 -0
  23. data/ext/libmemcached-0.50/aclocal.m4 +1077 -0
  24. data/ext/libmemcached-0.50/clients/client_options.h +45 -0
  25. data/ext/libmemcached-0.50/clients/execute.cc +131 -0
  26. data/ext/libmemcached-0.50/clients/execute.h +30 -0
  27. data/ext/libmemcached-0.50/clients/generator.cc +96 -0
  28. data/ext/libmemcached-0.50/clients/generator.h +36 -0
  29. data/ext/libmemcached-0.50/clients/include.am +116 -0
  30. data/ext/libmemcached-0.50/clients/memaslap.c +908 -0
  31. data/ext/libmemcached-0.50/clients/memcapable.cc +2094 -0
  32. data/ext/libmemcached-0.50/clients/memcat.cc +242 -0
  33. data/ext/libmemcached-0.50/clients/memcp.cc +317 -0
  34. data/ext/libmemcached-0.50/clients/memdump.cc +183 -0
  35. data/ext/libmemcached-0.50/clients/memerror.cc +102 -0
  36. data/ext/libmemcached-0.50/clients/memflush.cc +154 -0
  37. data/ext/libmemcached-0.50/clients/memparse.cc +68 -0
  38. data/ext/libmemcached-0.50/clients/memrm.cc +177 -0
  39. data/ext/libmemcached-0.50/clients/memslap.cc +495 -0
  40. data/ext/libmemcached-0.50/clients/memstat.cc +349 -0
  41. data/ext/libmemcached-0.50/clients/ms_atomic.h +69 -0
  42. data/ext/libmemcached-0.50/clients/ms_conn.c +3413 -0
  43. data/ext/libmemcached-0.50/clients/ms_conn.h +241 -0
  44. data/ext/libmemcached-0.50/clients/ms_memslap.h +132 -0
  45. data/ext/libmemcached-0.50/clients/ms_setting.c +1068 -0
  46. data/ext/libmemcached-0.50/clients/ms_setting.h +181 -0
  47. data/ext/libmemcached-0.50/clients/ms_sigsegv.c +126 -0
  48. data/ext/libmemcached-0.50/clients/ms_sigsegv.h +34 -0
  49. data/ext/libmemcached-0.50/clients/ms_stats.c +307 -0
  50. data/ext/libmemcached-0.50/clients/ms_stats.h +69 -0
  51. data/ext/libmemcached-0.50/clients/ms_task.c +1114 -0
  52. data/ext/libmemcached-0.50/clients/ms_task.h +94 -0
  53. data/ext/libmemcached-0.50/clients/ms_thread.c +351 -0
  54. data/ext/libmemcached-0.50/clients/ms_thread.h +78 -0
  55. data/ext/libmemcached-0.50/clients/utilities.cc +231 -0
  56. data/ext/libmemcached-0.50/clients/utilities.h +64 -0
  57. data/ext/libmemcached-0.50/config.h.in +647 -0
  58. data/ext/libmemcached-0.50/config/autorun.sh +126 -0
  59. data/ext/libmemcached-0.50/config/compile +143 -0
  60. data/ext/libmemcached-0.50/config/config.guess +1517 -0
  61. data/ext/libmemcached-0.50/config/config.rpath +666 -0
  62. data/ext/libmemcached-0.50/config/config.sub +1760 -0
  63. data/ext/libmemcached-0.50/config/depcomp +630 -0
  64. data/ext/libmemcached-0.50/config/install-sh +520 -0
  65. data/ext/libmemcached-0.50/config/ltmain.sh +9642 -0
  66. data/ext/libmemcached-0.50/config/missing +376 -0
  67. data/ext/libmemcached-0.50/config/pandora-plugin +752 -0
  68. data/ext/libmemcached-0.50/config/uncrustify.cfg +1112 -0
  69. data/ext/libmemcached-0.50/configure +27103 -0
  70. data/ext/libmemcached-0.50/configure.ac +186 -0
  71. data/ext/libmemcached-0.50/docs/conf.py.in +354 -0
  72. data/ext/libmemcached-0.50/docs/include.am +240 -0
  73. data/ext/libmemcached-0.50/docs/man/hashkit_clone.3 +88 -0
  74. data/ext/libmemcached-0.50/docs/man/hashkit_crc32.3 +105 -0
  75. data/ext/libmemcached-0.50/docs/man/hashkit_create.3 +88 -0
  76. data/ext/libmemcached-0.50/docs/man/hashkit_fnv1_32.3 +105 -0
  77. data/ext/libmemcached-0.50/docs/man/hashkit_fnv1_64.3 +105 -0
  78. data/ext/libmemcached-0.50/docs/man/hashkit_fnv1a_32.3 +105 -0
  79. data/ext/libmemcached-0.50/docs/man/hashkit_fnv1a_64.3 +105 -0
  80. data/ext/libmemcached-0.50/docs/man/hashkit_free.3 +88 -0
  81. data/ext/libmemcached-0.50/docs/man/hashkit_functions.3 +105 -0
  82. data/ext/libmemcached-0.50/docs/man/hashkit_hsieh.3 +105 -0
  83. data/ext/libmemcached-0.50/docs/man/hashkit_is_allocated.3 +88 -0
  84. data/ext/libmemcached-0.50/docs/man/hashkit_jenkins.3 +105 -0
  85. data/ext/libmemcached-0.50/docs/man/hashkit_md5.3 +105 -0
  86. data/ext/libmemcached-0.50/docs/man/hashkit_murmur.3 +105 -0
  87. data/ext/libmemcached-0.50/docs/man/hashkit_value.3 +66 -0
  88. data/ext/libmemcached-0.50/docs/man/libhashkit.3 +57 -0
  89. data/ext/libmemcached-0.50/docs/man/libmemcached.3 +208 -0
  90. data/ext/libmemcached-0.50/docs/man/libmemcached_check_configuration.3 +293 -0
  91. data/ext/libmemcached-0.50/docs/man/libmemcached_configuration.3 +293 -0
  92. data/ext/libmemcached-0.50/docs/man/libmemcached_examples.3 +144 -0
  93. data/ext/libmemcached-0.50/docs/man/libmemcachedutil.3 +68 -0
  94. data/ext/libmemcached-0.50/docs/man/memaslap.1 +1222 -0
  95. data/ext/libmemcached-0.50/docs/man/memcached.3 +293 -0
  96. data/ext/libmemcached-0.50/docs/man/memcached_add.3 +132 -0
  97. data/ext/libmemcached-0.50/docs/man/memcached_add_by_key.3 +132 -0
  98. data/ext/libmemcached-0.50/docs/man/memcached_analyze.3 +77 -0
  99. data/ext/libmemcached-0.50/docs/man/memcached_append.3 +111 -0
  100. data/ext/libmemcached-0.50/docs/man/memcached_append_by_key.3 +111 -0
  101. data/ext/libmemcached-0.50/docs/man/memcached_behavior_get.3 +333 -0
  102. data/ext/libmemcached-0.50/docs/man/memcached_behavior_set.3 +333 -0
  103. data/ext/libmemcached-0.50/docs/man/memcached_callback_get.3 +159 -0
  104. data/ext/libmemcached-0.50/docs/man/memcached_callback_set.3 +159 -0
  105. data/ext/libmemcached-0.50/docs/man/memcached_cas.3 +91 -0
  106. data/ext/libmemcached-0.50/docs/man/memcached_cas_by_key.3 +91 -0
  107. data/ext/libmemcached-0.50/docs/man/memcached_clone.3 +99 -0
  108. data/ext/libmemcached-0.50/docs/man/memcached_create.3 +99 -0
  109. data/ext/libmemcached-0.50/docs/man/memcached_decrement.3 +124 -0
  110. data/ext/libmemcached-0.50/docs/man/memcached_decrement_with_initial.3 +124 -0
  111. data/ext/libmemcached-0.50/docs/man/memcached_delete.3 +83 -0
  112. data/ext/libmemcached-0.50/docs/man/memcached_delete_by_key.3 +83 -0
  113. data/ext/libmemcached-0.50/docs/man/memcached_destroy_sasl_auth_data.3 +95 -0
  114. data/ext/libmemcached-0.50/docs/man/memcached_dump.3 +77 -0
  115. data/ext/libmemcached-0.50/docs/man/memcached_fetch.3 +174 -0
  116. data/ext/libmemcached-0.50/docs/man/memcached_fetch_execute.3 +174 -0
  117. data/ext/libmemcached-0.50/docs/man/memcached_fetch_result.3 +174 -0
  118. data/ext/libmemcached-0.50/docs/man/memcached_flush_buffers.3 +72 -0
  119. data/ext/libmemcached-0.50/docs/man/memcached_free.3 +99 -0
  120. data/ext/libmemcached-0.50/docs/man/memcached_generate_hash.3 +85 -0
  121. data/ext/libmemcached-0.50/docs/man/memcached_generate_hash_value.3 +85 -0
  122. data/ext/libmemcached-0.50/docs/man/memcached_get.3 +174 -0
  123. data/ext/libmemcached-0.50/docs/man/memcached_get_by_key.3 +174 -0
  124. data/ext/libmemcached-0.50/docs/man/memcached_get_memory_allocators.3 +111 -0
  125. data/ext/libmemcached-0.50/docs/man/memcached_get_sasl_callbacks.3 +95 -0
  126. data/ext/libmemcached-0.50/docs/man/memcached_get_user_data.3 +79 -0
  127. data/ext/libmemcached-0.50/docs/man/memcached_increment.3 +124 -0
  128. data/ext/libmemcached-0.50/docs/man/memcached_increment_with_initial.3 +124 -0
  129. data/ext/libmemcached-0.50/docs/man/memcached_lib_version.3 +76 -0
  130. data/ext/libmemcached-0.50/docs/man/memcached_mget.3 +174 -0
  131. data/ext/libmemcached-0.50/docs/man/memcached_mget_by_key.3 +174 -0
  132. data/ext/libmemcached-0.50/docs/man/memcached_mget_execute.3 +174 -0
  133. data/ext/libmemcached-0.50/docs/man/memcached_mget_execute_by_key.3 +174 -0
  134. data/ext/libmemcached-0.50/docs/man/memcached_pool_behavior_get.3 +139 -0
  135. data/ext/libmemcached-0.50/docs/man/memcached_pool_behavior_set.3 +139 -0
  136. data/ext/libmemcached-0.50/docs/man/memcached_pool_create.3 +139 -0
  137. data/ext/libmemcached-0.50/docs/man/memcached_pool_destroy.3 +139 -0
  138. data/ext/libmemcached-0.50/docs/man/memcached_pool_pop.3 +139 -0
  139. data/ext/libmemcached-0.50/docs/man/memcached_pool_push.3 +139 -0
  140. data/ext/libmemcached-0.50/docs/man/memcached_pool_st.3 +139 -0
  141. data/ext/libmemcached-0.50/docs/man/memcached_prepend.3 +111 -0
  142. data/ext/libmemcached-0.50/docs/man/memcached_prepend_by_key.3 +111 -0
  143. data/ext/libmemcached-0.50/docs/man/memcached_quit.3 +74 -0
  144. data/ext/libmemcached-0.50/docs/man/memcached_replace.3 +132 -0
  145. data/ext/libmemcached-0.50/docs/man/memcached_replace_by_key.3 +132 -0
  146. data/ext/libmemcached-0.50/docs/man/memcached_sasl_set_auth_data.3 +95 -0
  147. data/ext/libmemcached-0.50/docs/man/memcached_server_add.3 +141 -0
  148. data/ext/libmemcached-0.50/docs/man/memcached_server_count.3 +141 -0
  149. data/ext/libmemcached-0.50/docs/man/memcached_server_cursor.3 +141 -0
  150. data/ext/libmemcached-0.50/docs/man/memcached_server_list.3 +141 -0
  151. data/ext/libmemcached-0.50/docs/man/memcached_server_list_append.3 +111 -0
  152. data/ext/libmemcached-0.50/docs/man/memcached_server_list_count.3 +111 -0
  153. data/ext/libmemcached-0.50/docs/man/memcached_server_list_free.3 +111 -0
  154. data/ext/libmemcached-0.50/docs/man/memcached_server_push.3 +141 -0
  155. data/ext/libmemcached-0.50/docs/man/memcached_servers_parse.3 +111 -0
  156. data/ext/libmemcached-0.50/docs/man/memcached_set.3 +132 -0
  157. data/ext/libmemcached-0.50/docs/man/memcached_set_by_key.3 +132 -0
  158. data/ext/libmemcached-0.50/docs/man/memcached_set_memory_allocators.3 +111 -0
  159. data/ext/libmemcached-0.50/docs/man/memcached_set_sasl_callbacks.3 +95 -0
  160. data/ext/libmemcached-0.50/docs/man/memcached_set_user_data.3 +79 -0
  161. data/ext/libmemcached-0.50/docs/man/memcached_stat.3 +116 -0
  162. data/ext/libmemcached-0.50/docs/man/memcached_stat_execute.3 +116 -0
  163. data/ext/libmemcached-0.50/docs/man/memcached_stat_get_keys.3 +116 -0
  164. data/ext/libmemcached-0.50/docs/man/memcached_stat_get_value.3 +116 -0
  165. data/ext/libmemcached-0.50/docs/man/memcached_stat_servername.3 +116 -0
  166. data/ext/libmemcached-0.50/docs/man/memcached_strerror.3 +69 -0
  167. data/ext/libmemcached-0.50/docs/man/memcached_verbosity.3 +66 -0
  168. data/ext/libmemcached-0.50/docs/man/memcached_version.3 +76 -0
  169. data/ext/libmemcached-0.50/docs/man/memcapable.1 +92 -0
  170. data/ext/libmemcached-0.50/docs/man/memcat.1 +71 -0
  171. data/ext/libmemcached-0.50/docs/man/memcp.1 +77 -0
  172. data/ext/libmemcached-0.50/docs/man/memdump.1 +66 -0
  173. data/ext/libmemcached-0.50/docs/man/memerror.1 +65 -0
  174. data/ext/libmemcached-0.50/docs/man/memflush.1 +73 -0
  175. data/ext/libmemcached-0.50/docs/man/memrm.1 +72 -0
  176. data/ext/libmemcached-0.50/docs/man/memslap.1 +59 -0
  177. data/ext/libmemcached-0.50/docs/man/memstat.1 +70 -0
  178. data/ext/libmemcached-0.50/example/include.am +24 -0
  179. data/ext/libmemcached-0.50/example/interface_v0.c +594 -0
  180. data/ext/libmemcached-0.50/example/interface_v1.c +411 -0
  181. data/ext/libmemcached-0.50/example/memcached_light.c +474 -0
  182. data/ext/libmemcached-0.50/example/memcached_light.h +7 -0
  183. data/ext/libmemcached-0.50/example/storage.c +172 -0
  184. data/ext/libmemcached-0.50/example/storage.h +27 -0
  185. data/ext/libmemcached-0.50/example/storage_innodb.c +535 -0
  186. data/ext/libmemcached-0.50/libhashkit/algorithm.cc +69 -0
  187. data/ext/libmemcached-0.50/libhashkit/algorithm.h +96 -0
  188. data/ext/libmemcached-0.50/libhashkit/behavior.cc +9 -0
  189. data/ext/libmemcached-0.50/libhashkit/behavior.h +26 -0
  190. data/ext/libmemcached-0.50/libhashkit/common.h +33 -0
  191. data/ext/libmemcached-0.50/libhashkit/configure.h.in +19 -0
  192. data/ext/libmemcached-0.50/libhashkit/crc32.cc +86 -0
  193. data/ext/libmemcached-0.50/libhashkit/digest.cc +62 -0
  194. data/ext/libmemcached-0.50/libhashkit/digest.h +30 -0
  195. data/ext/libmemcached-0.50/libhashkit/fnv.cc +75 -0
  196. data/ext/libmemcached-0.50/libhashkit/function.cc +156 -0
  197. data/ext/libmemcached-0.50/libhashkit/function.h +44 -0
  198. data/ext/libmemcached-0.50/libhashkit/hashkit.cc +100 -0
  199. data/ext/libmemcached-0.50/libhashkit/hashkit.h +95 -0
  200. data/ext/libmemcached-0.50/libhashkit/hashkit.hpp +97 -0
  201. data/ext/libmemcached-0.50/libhashkit/hsieh.cc +70 -0
  202. data/ext/libmemcached-0.50/libhashkit/include.am +69 -0
  203. data/ext/libmemcached-0.50/libhashkit/jenkins.cc +214 -0
  204. data/ext/libmemcached-0.50/libhashkit/ketama.cc +164 -0
  205. data/ext/libmemcached-0.50/libhashkit/md5.cc +367 -0
  206. data/ext/libmemcached-0.50/libhashkit/murmur.cc +77 -0
  207. data/ext/libmemcached-0.50/libhashkit/one_at_a_time.cc +34 -0
  208. data/ext/libmemcached-0.50/libhashkit/str_algorithm.cc +58 -0
  209. data/ext/libmemcached-0.50/libhashkit/str_algorithm.h +48 -0
  210. data/ext/libmemcached-0.50/libhashkit/strerror.cc +25 -0
  211. data/ext/libmemcached-0.50/libhashkit/strerror.h +23 -0
  212. data/ext/libmemcached-0.50/libhashkit/types.h +90 -0
  213. data/ext/libmemcached-0.50/libhashkit/visibility.h +48 -0
  214. data/ext/libmemcached-0.50/libmemcached/allocators.cc +119 -0
  215. data/ext/libmemcached-0.50/libmemcached/allocators.h +87 -0
  216. data/ext/libmemcached-0.50/libmemcached/analyze.cc +110 -0
  217. data/ext/libmemcached-0.50/libmemcached/analyze.h +66 -0
  218. data/ext/libmemcached-0.50/libmemcached/array.c +128 -0
  219. data/ext/libmemcached-0.50/libmemcached/array.h +75 -0
  220. data/ext/libmemcached-0.50/libmemcached/auto.cc +383 -0
  221. data/ext/libmemcached-0.50/libmemcached/auto.h +111 -0
  222. data/ext/libmemcached-0.50/libmemcached/basic_string.h +55 -0
  223. data/ext/libmemcached-0.50/libmemcached/behavior.cc +590 -0
  224. data/ext/libmemcached-0.50/libmemcached/behavior.h +86 -0
  225. data/ext/libmemcached-0.50/libmemcached/byteorder.cc +90 -0
  226. data/ext/libmemcached-0.50/libmemcached/byteorder.h +52 -0
  227. data/ext/libmemcached-0.50/libmemcached/callback.cc +160 -0
  228. data/ext/libmemcached-0.50/libmemcached/callback.h +61 -0
  229. data/ext/libmemcached-0.50/libmemcached/common.h +182 -0
  230. data/ext/libmemcached-0.50/libmemcached/configure.h.in +52 -0
  231. data/ext/libmemcached-0.50/libmemcached/connect.cc +626 -0
  232. data/ext/libmemcached-0.50/libmemcached/constants.h +167 -0
  233. data/ext/libmemcached-0.50/libmemcached/delete.cc +266 -0
  234. data/ext/libmemcached-0.50/libmemcached/delete.h +57 -0
  235. data/ext/libmemcached-0.50/libmemcached/do.cc +100 -0
  236. data/ext/libmemcached-0.50/libmemcached/do.hpp +49 -0
  237. data/ext/libmemcached-0.50/libmemcached/dump.cc +107 -0
  238. data/ext/libmemcached-0.50/libmemcached/dump.h +51 -0
  239. data/ext/libmemcached-0.50/libmemcached/error.cc +419 -0
  240. data/ext/libmemcached-0.50/libmemcached/error.h +61 -0
  241. data/ext/libmemcached-0.50/libmemcached/error.hpp +87 -0
  242. data/ext/libmemcached-0.50/libmemcached/exception.hpp +63 -0
  243. data/ext/libmemcached-0.50/libmemcached/fetch.cc +267 -0
  244. data/ext/libmemcached-0.50/libmemcached/fetch.h +53 -0
  245. data/ext/libmemcached-0.50/libmemcached/flush.cc +149 -0
  246. data/ext/libmemcached-0.50/libmemcached/flush.h +49 -0
  247. data/ext/libmemcached-0.50/libmemcached/flush_buffers.cc +66 -0
  248. data/ext/libmemcached-0.50/libmemcached/flush_buffers.h +49 -0
  249. data/ext/libmemcached-0.50/libmemcached/get.cc +842 -0
  250. data/ext/libmemcached-0.50/libmemcached/get.h +135 -0
  251. data/ext/libmemcached-0.50/libmemcached/hash.cc +178 -0
  252. data/ext/libmemcached-0.50/libmemcached/hash.h +68 -0
  253. data/ext/libmemcached-0.50/libmemcached/hosts.cc +516 -0
  254. data/ext/libmemcached-0.50/libmemcached/include.am +183 -0
  255. data/ext/libmemcached-0.50/libmemcached/initialize_query.cc +70 -0
  256. data/ext/libmemcached-0.50/libmemcached/initialize_query.h +51 -0
  257. data/ext/libmemcached-0.50/libmemcached/internal.h +46 -0
  258. data/ext/libmemcached-0.50/libmemcached/io.cc +920 -0
  259. data/ext/libmemcached-0.50/libmemcached/io.h +119 -0
  260. data/ext/libmemcached-0.50/libmemcached/is.h +48 -0
  261. data/ext/libmemcached-0.50/libmemcached/key.cc +23 -0
  262. data/ext/libmemcached-0.50/libmemcached/libmemcached_probes.d +30 -0
  263. data/ext/libmemcached-0.50/libmemcached/libmemcached_probes.h +118 -0
  264. data/ext/libmemcached-0.50/libmemcached/memcached.cc +437 -0
  265. data/ext/libmemcached-0.50/libmemcached/memcached.h +214 -0
  266. data/ext/libmemcached-0.50/libmemcached/memcached.hpp +799 -0
  267. data/ext/libmemcached-0.50/libmemcached/memcached/README.txt +7 -0
  268. data/ext/libmemcached-0.50/libmemcached/memcached/protocol_binary.h +726 -0
  269. data/ext/libmemcached-0.50/libmemcached/memcached/vbucket.h +26 -0
  270. data/ext/libmemcached-0.50/libmemcached/memcached_util.h +44 -0
  271. data/ext/libmemcached-0.50/libmemcached/memory.h +79 -0
  272. data/ext/libmemcached-0.50/libmemcached/options.cc +178 -0
  273. data/ext/libmemcached-0.50/libmemcached/options.h +49 -0
  274. data/ext/libmemcached-0.50/libmemcached/options.hpp +56 -0
  275. data/ext/libmemcached-0.50/libmemcached/options/context.h +151 -0
  276. data/ext/libmemcached-0.50/libmemcached/options/include.am +19 -0
  277. data/ext/libmemcached-0.50/libmemcached/options/parser.am +0 -0
  278. data/ext/libmemcached-0.50/libmemcached/options/parser.cc +2324 -0
  279. data/ext/libmemcached-0.50/libmemcached/options/parser.h +122 -0
  280. data/ext/libmemcached-0.50/libmemcached/options/scanner.cc +3203 -0
  281. data/ext/libmemcached-0.50/libmemcached/options/scanner.h +479 -0
  282. data/ext/libmemcached-0.50/libmemcached/options/server.h +60 -0
  283. data/ext/libmemcached-0.50/libmemcached/options/symbol.h +57 -0
  284. data/ext/libmemcached-0.50/libmemcached/parse.cc +110 -0
  285. data/ext/libmemcached-0.50/libmemcached/parse.h +23 -0
  286. data/ext/libmemcached-0.50/libmemcached/platform.h +56 -0
  287. data/ext/libmemcached-0.50/libmemcached/prefix_key.cc +65 -0
  288. data/ext/libmemcached-0.50/libmemcached/prefix_key.h +49 -0
  289. data/ext/libmemcached-0.50/libmemcached/protocol/ascii_handler.c +963 -0
  290. data/ext/libmemcached-0.50/libmemcached/protocol/ascii_handler.h +40 -0
  291. data/ext/libmemcached-0.50/libmemcached/protocol/binary_handler.c +1121 -0
  292. data/ext/libmemcached-0.50/libmemcached/protocol/binary_handler.h +47 -0
  293. data/ext/libmemcached-0.50/libmemcached/protocol/cache.c +149 -0
  294. data/ext/libmemcached-0.50/libmemcached/protocol/cache.h +116 -0
  295. data/ext/libmemcached-0.50/libmemcached/protocol/callback.h +418 -0
  296. data/ext/libmemcached-0.50/libmemcached/protocol/common.h +163 -0
  297. data/ext/libmemcached-0.50/libmemcached/protocol/include.am +26 -0
  298. data/ext/libmemcached-0.50/libmemcached/protocol/pedantic.c +202 -0
  299. data/ext/libmemcached-0.50/libmemcached/protocol/protocol_handler.c +365 -0
  300. data/ext/libmemcached-0.50/libmemcached/protocol_handler.h +215 -0
  301. data/ext/libmemcached-0.50/libmemcached/purge.cc +90 -0
  302. data/ext/libmemcached-0.50/libmemcached/quit.cc +139 -0
  303. data/ext/libmemcached-0.50/libmemcached/quit.h +55 -0
  304. data/ext/libmemcached-0.50/libmemcached/response.cc +619 -0
  305. data/ext/libmemcached-0.50/libmemcached/response.h +57 -0
  306. data/ext/libmemcached-0.50/libmemcached/result.cc +173 -0
  307. data/ext/libmemcached-0.50/libmemcached/result.h +100 -0
  308. data/ext/libmemcached-0.50/libmemcached/return.h +98 -0
  309. data/ext/libmemcached-0.50/libmemcached/sasl.c +408 -0
  310. data/ext/libmemcached-0.50/libmemcached/sasl.h +86 -0
  311. data/ext/libmemcached-0.50/libmemcached/server.cc +351 -0
  312. data/ext/libmemcached-0.50/libmemcached/server.h +169 -0
  313. data/ext/libmemcached-0.50/libmemcached/server_list.cc +88 -0
  314. data/ext/libmemcached-0.50/libmemcached/server_list.h +77 -0
  315. data/ext/libmemcached-0.50/libmemcached/stats.cc +623 -0
  316. data/ext/libmemcached-0.50/libmemcached/stats.h +96 -0
  317. data/ext/libmemcached-0.50/libmemcached/storage.cc +567 -0
  318. data/ext/libmemcached-0.50/libmemcached/storage.h +133 -0
  319. data/ext/libmemcached-0.50/libmemcached/strerror.cc +189 -0
  320. data/ext/libmemcached-0.50/libmemcached/strerror.h +50 -0
  321. data/ext/libmemcached-0.50/libmemcached/string.cc +253 -0
  322. data/ext/libmemcached-0.50/libmemcached/string.h +121 -0
  323. data/ext/libmemcached-0.50/libmemcached/touch.cc +106 -0
  324. data/ext/libmemcached-0.50/libmemcached/touch.h +59 -0
  325. data/ext/libmemcached-0.50/libmemcached/types.h +117 -0
  326. data/ext/libmemcached-0.50/libmemcached/util.h +40 -0
  327. data/ext/libmemcached-0.50/libmemcached/util/flush.cc +61 -0
  328. data/ext/libmemcached-0.50/libmemcached/util/flush.h +50 -0
  329. data/ext/libmemcached-0.50/libmemcached/util/include.am +34 -0
  330. data/ext/libmemcached-0.50/libmemcached/util/ping.cc +62 -0
  331. data/ext/libmemcached-0.50/libmemcached/util/ping.h +49 -0
  332. data/ext/libmemcached-0.50/libmemcached/util/pool.cc +392 -0
  333. data/ext/libmemcached-0.50/libmemcached/util/pool.h +78 -0
  334. data/ext/libmemcached-0.50/libmemcached/util/version.cc +87 -0
  335. data/ext/libmemcached-0.50/libmemcached/util/version.h +53 -0
  336. data/ext/libmemcached-0.50/libmemcached/verbosity.cc +97 -0
  337. data/ext/libmemcached-0.50/libmemcached/verbosity.h +50 -0
  338. data/ext/libmemcached-0.50/libmemcached/version.cc +214 -0
  339. data/ext/libmemcached-0.50/libmemcached/version.h +52 -0
  340. data/ext/libmemcached-0.50/libmemcached/virtual_bucket.c +118 -0
  341. data/ext/libmemcached-0.50/libmemcached/virtual_bucket.h +59 -0
  342. data/ext/libmemcached-0.50/libmemcached/visibility.h +51 -0
  343. data/ext/libmemcached-0.50/libmemcached/watchpoint.h +110 -0
  344. data/ext/libmemcached-0.50/libtest/callbacks.h +21 -0
  345. data/ext/libmemcached-0.50/libtest/collection.h +19 -0
  346. data/ext/libmemcached-0.50/libtest/common.h +50 -0
  347. data/ext/libmemcached-0.50/libtest/core.h +11 -0
  348. data/ext/libmemcached-0.50/libtest/error.h +18 -0
  349. data/ext/libmemcached-0.50/libtest/failed.h +52 -0
  350. data/ext/libmemcached-0.50/libtest/framework.cc +57 -0
  351. data/ext/libmemcached-0.50/libtest/framework.h +137 -0
  352. data/ext/libmemcached-0.50/libtest/get.h +22 -0
  353. data/ext/libmemcached-0.50/libtest/include.am +52 -0
  354. data/ext/libmemcached-0.50/libtest/runner.h +19 -0
  355. data/ext/libmemcached-0.50/libtest/server.c +355 -0
  356. data/ext/libmemcached-0.50/libtest/server.h +43 -0
  357. data/ext/libmemcached-0.50/libtest/stats.h +30 -0
  358. data/ext/libmemcached-0.50/libtest/strerror.h +14 -0
  359. data/ext/libmemcached-0.50/libtest/test.cc +319 -0
  360. data/ext/libmemcached-0.50/libtest/test.h +162 -0
  361. data/ext/libmemcached-0.50/libtest/test.hpp +46 -0
  362. data/ext/libmemcached-0.50/libtest/visibility.h +69 -0
  363. data/ext/libmemcached-0.50/m4/ac_cxx_header_stdcxx_98.m4 +83 -0
  364. data/ext/libmemcached-0.50/m4/acx_pthread.m4 +271 -0
  365. data/ext/libmemcached-0.50/m4/byteorder.m4 +19 -0
  366. data/ext/libmemcached-0.50/m4/deprecated.m4 +17 -0
  367. data/ext/libmemcached-0.50/m4/eagain.m4 +28 -0
  368. data/ext/libmemcached-0.50/m4/enable_utillib.m4 +16 -0
  369. data/ext/libmemcached-0.50/m4/gettext.m4 +379 -0
  370. data/ext/libmemcached-0.50/m4/hsieh.m4 +18 -0
  371. data/ext/libmemcached-0.50/m4/iconv.m4 +214 -0
  372. data/ext/libmemcached-0.50/m4/lib-ld.m4 +110 -0
  373. data/ext/libmemcached-0.50/m4/lib-link.m4 +767 -0
  374. data/ext/libmemcached-0.50/m4/lib-prefix.m4 +221 -0
  375. data/ext/libmemcached-0.50/m4/libtool.m4 +7851 -0
  376. data/ext/libmemcached-0.50/m4/ltoptions.m4 +369 -0
  377. data/ext/libmemcached-0.50/m4/ltsugar.m4 +123 -0
  378. data/ext/libmemcached-0.50/m4/ltversion.m4 +23 -0
  379. data/ext/libmemcached-0.50/m4/lt~obsolete.m4 +98 -0
  380. data/ext/libmemcached-0.50/m4/memaslap.m4 +9 -0
  381. data/ext/libmemcached-0.50/m4/memcached.m4 +31 -0
  382. data/ext/libmemcached-0.50/m4/murmur.m4 +18 -0
  383. data/ext/libmemcached-0.50/m4/pandora_64bit.m4 +60 -0
  384. data/ext/libmemcached-0.50/m4/pandora_bison.m4 +33 -0
  385. data/ext/libmemcached-0.50/m4/pandora_canonical.m4 +418 -0
  386. data/ext/libmemcached-0.50/m4/pandora_check_compiler_version.m4 +37 -0
  387. data/ext/libmemcached-0.50/m4/pandora_check_cxx_standard.m4 +23 -0
  388. data/ext/libmemcached-0.50/m4/pandora_cinttypes.m4 +39 -0
  389. data/ext/libmemcached-0.50/m4/pandora_clock_gettime.m4 +15 -0
  390. data/ext/libmemcached-0.50/m4/pandora_compile_stdcxx_0x.m4 +103 -0
  391. data/ext/libmemcached-0.50/m4/pandora_cstdint.m4 +38 -0
  392. data/ext/libmemcached-0.50/m4/pandora_cxx_demangle.m4 +27 -0
  393. data/ext/libmemcached-0.50/m4/pandora_enable_dtrace.m4 +60 -0
  394. data/ext/libmemcached-0.50/m4/pandora_ensure_gcc_version.m4 +62 -0
  395. data/ext/libmemcached-0.50/m4/pandora_extensions.m4 +16 -0
  396. data/ext/libmemcached-0.50/m4/pandora_fdatasync.m4 +25 -0
  397. data/ext/libmemcached-0.50/m4/pandora_flex.m4 +33 -0
  398. data/ext/libmemcached-0.50/m4/pandora_have_better_malloc.m4 +66 -0
  399. data/ext/libmemcached-0.50/m4/pandora_have_boost.m4 +93 -0
  400. data/ext/libmemcached-0.50/m4/pandora_have_gcc_atomics.m4 +37 -0
  401. data/ext/libmemcached-0.50/m4/pandora_have_innodb.m4 +41 -0
  402. data/ext/libmemcached-0.50/m4/pandora_have_libaio.m4 +56 -0
  403. data/ext/libmemcached-0.50/m4/pandora_have_libavahi.m4 +41 -0
  404. data/ext/libmemcached-0.50/m4/pandora_have_libbdb.m4 +40 -0
  405. data/ext/libmemcached-0.50/m4/pandora_have_libboost_date_time.m4 +46 -0
  406. data/ext/libmemcached-0.50/m4/pandora_have_libboost_filesystem.m4 +47 -0
  407. data/ext/libmemcached-0.50/m4/pandora_have_libboost_iostreams.m4 +49 -0
  408. data/ext/libmemcached-0.50/m4/pandora_have_libboost_options.m4 +47 -0
  409. data/ext/libmemcached-0.50/m4/pandora_have_libboost_regex.m4 +54 -0
  410. data/ext/libmemcached-0.50/m4/pandora_have_libboost_test.m4 +45 -0
  411. data/ext/libmemcached-0.50/m4/pandora_have_libboost_thread.m4 +54 -0
  412. data/ext/libmemcached-0.50/m4/pandora_have_libcassandra.m4 +44 -0
  413. data/ext/libmemcached-0.50/m4/pandora_have_libcurl.m4 +62 -0
  414. data/ext/libmemcached-0.50/m4/pandora_have_libdl.m4 +51 -0
  415. data/ext/libmemcached-0.50/m4/pandora_have_libdrizzle.m4 +61 -0
  416. data/ext/libmemcached-0.50/m4/pandora_have_libevent.m4 +66 -0
  417. data/ext/libmemcached-0.50/m4/pandora_have_libgearman.m4 +41 -0
  418. data/ext/libmemcached-0.50/m4/pandora_have_libgtest.m4 +47 -0
  419. data/ext/libmemcached-0.50/m4/pandora_have_libhaildb.m4 +43 -0
  420. data/ext/libmemcached-0.50/m4/pandora_have_libhashkit.m4 +42 -0
  421. data/ext/libmemcached-0.50/m4/pandora_have_libinnodb.m4 +64 -0
  422. data/ext/libmemcached-0.50/m4/pandora_have_libldap.m4 +73 -0
  423. data/ext/libmemcached-0.50/m4/pandora_have_libmemcached.m4 +106 -0
  424. data/ext/libmemcached-0.50/m4/pandora_have_libmysqlclient.m4 +146 -0
  425. data/ext/libmemcached-0.50/m4/pandora_have_libndbclient.m4 +80 -0
  426. data/ext/libmemcached-0.50/m4/pandora_have_libpcre.m4 +73 -0
  427. data/ext/libmemcached-0.50/m4/pandora_have_libpq.m4 +46 -0
  428. data/ext/libmemcached-0.50/m4/pandora_have_libpqxx.m4 +44 -0
  429. data/ext/libmemcached-0.50/m4/pandora_have_libsqlite3.m4 +42 -0
  430. data/ext/libmemcached-0.50/m4/pandora_have_libtokyocabinet.m4 +54 -0
  431. data/ext/libmemcached-0.50/m4/pandora_have_libuuid.m4 +55 -0
  432. data/ext/libmemcached-0.50/m4/pandora_have_libvbucket.m4 +40 -0
  433. data/ext/libmemcached-0.50/m4/pandora_have_libxml2.m4 +52 -0
  434. data/ext/libmemcached-0.50/m4/pandora_have_libz.m4 +51 -0
  435. data/ext/libmemcached-0.50/m4/pandora_have_protobuf.m4 +82 -0
  436. data/ext/libmemcached-0.50/m4/pandora_have_sasl.m4 +133 -0
  437. data/ext/libmemcached-0.50/m4/pandora_have_thrift.m4 +45 -0
  438. data/ext/libmemcached-0.50/m4/pandora_header_assert.m4 +23 -0
  439. data/ext/libmemcached-0.50/m4/pandora_header_stdcxx_98.m4 +83 -0
  440. data/ext/libmemcached-0.50/m4/pandora_intltool.m4 +225 -0
  441. data/ext/libmemcached-0.50/m4/pandora_libtool.m4 +25 -0
  442. data/ext/libmemcached-0.50/m4/pandora_optimize.m4 +75 -0
  443. data/ext/libmemcached-0.50/m4/pandora_platform.m4 +117 -0
  444. data/ext/libmemcached-0.50/m4/pandora_plugins.m4 +62 -0
  445. data/ext/libmemcached-0.50/m4/pandora_print_callstack.m4 +61 -0
  446. data/ext/libmemcached-0.50/m4/pandora_pthread.m4 +258 -0
  447. data/ext/libmemcached-0.50/m4/pandora_python3_devel.m4 +236 -0
  448. data/ext/libmemcached-0.50/m4/pandora_run_cpplint.m4 +8 -0
  449. data/ext/libmemcached-0.50/m4/pandora_sasl.m4 +133 -0
  450. data/ext/libmemcached-0.50/m4/pandora_shared_ptr.m4 +59 -0
  451. data/ext/libmemcached-0.50/m4/pandora_stack_direction.m4 +39 -0
  452. data/ext/libmemcached-0.50/m4/pandora_stl_hash.m4 +94 -0
  453. data/ext/libmemcached-0.50/m4/pandora_swig.m4 +39 -0
  454. data/ext/libmemcached-0.50/m4/pandora_use_pipe.m4 +36 -0
  455. data/ext/libmemcached-0.50/m4/pandora_vc_build.m4 +168 -0
  456. data/ext/libmemcached-0.50/m4/pandora_version.m4 +11 -0
  457. data/ext/libmemcached-0.50/m4/pandora_visibility.m4 +75 -0
  458. data/ext/libmemcached-0.50/m4/pandora_warnings.m4 +447 -0
  459. data/ext/libmemcached-0.50/m4/pandora_with_gettext.m4 +44 -0
  460. data/ext/libmemcached-0.50/m4/pandora_with_lua.m4 +55 -0
  461. data/ext/libmemcached-0.50/m4/pandora_with_memcached.m4 +41 -0
  462. data/ext/libmemcached-0.50/m4/pandora_with_perl.m4 +81 -0
  463. data/ext/libmemcached-0.50/m4/pandora_with_php.m4 +56 -0
  464. data/ext/libmemcached-0.50/m4/pandora_with_python.m4 +37 -0
  465. data/ext/libmemcached-0.50/m4/pandora_with_python3.m4 +44 -0
  466. data/ext/libmemcached-0.50/m4/pandora_with_r.m4 +33 -0
  467. data/ext/libmemcached-0.50/m4/pandora_with_ruby.m4 +79 -0
  468. data/ext/libmemcached-0.50/m4/pandora_with_valgrind.m4 +17 -0
  469. data/ext/libmemcached-0.50/m4/pkg.m4 +157 -0
  470. data/ext/libmemcached-0.50/m4/po.m4 +449 -0
  471. data/ext/libmemcached-0.50/m4/progtest.m4 +92 -0
  472. data/ext/libmemcached-0.50/m4/protocol_binary.m4 +36 -0
  473. data/ext/libmemcached-0.50/m4/setsockopt.m4 +73 -0
  474. data/ext/libmemcached-0.50/m4/socket_send_flags.m4 +66 -0
  475. data/ext/libmemcached-0.50/poll/include.am +8 -0
  476. data/ext/libmemcached-0.50/poll/poll.c +77 -0
  477. data/ext/libmemcached-0.50/poll/poll.h +45 -0
  478. data/ext/libmemcached-0.50/support/include.am +11 -0
  479. data/ext/libmemcached-0.50/support/libmemcached-fc.spec.in +105 -0
  480. data/ext/libmemcached-0.50/support/libmemcached.pc.in +10 -0
  481. data/ext/libmemcached-0.50/support/libmemcached.spec.in +281 -0
  482. data/ext/libmemcached-0.50/support/set_benchmark.sh +5 -0
  483. data/ext/libmemcached-0.50/tests/atomsmasher.cc +295 -0
  484. data/ext/libmemcached-0.50/tests/basic.cc +134 -0
  485. data/ext/libmemcached-0.50/tests/basic.h +66 -0
  486. data/ext/libmemcached-0.50/tests/cpp_example.cc +195 -0
  487. data/ext/libmemcached-0.50/tests/deprecated.cc +72 -0
  488. data/ext/libmemcached-0.50/tests/deprecated.h +49 -0
  489. data/ext/libmemcached-0.50/tests/error_conditions.cc +63 -0
  490. data/ext/libmemcached-0.50/tests/error_conditions.h +48 -0
  491. data/ext/libmemcached-0.50/tests/hash_plus.cc +225 -0
  492. data/ext/libmemcached-0.50/tests/hash_results.h +127 -0
  493. data/ext/libmemcached-0.50/tests/hashkit_functions.cc +619 -0
  494. data/ext/libmemcached-0.50/tests/include.am +342 -0
  495. data/ext/libmemcached-0.50/tests/ketama_test_cases.h +121 -0
  496. data/ext/libmemcached-0.50/tests/ketama_test_cases_spy.h +118 -0
  497. data/ext/libmemcached-0.50/tests/libmemcached_world.h +205 -0
  498. data/ext/libmemcached-0.50/tests/mem_functions.cc +6648 -0
  499. data/ext/libmemcached-0.50/tests/mem_udp.cc +510 -0
  500. data/ext/libmemcached-0.50/tests/output_plus.res +5 -0
  501. data/ext/libmemcached-0.50/tests/parser.cc +599 -0
  502. data/ext/libmemcached-0.50/tests/parser.h +109 -0
  503. data/ext/libmemcached-0.50/tests/plus.cpp +240 -0
  504. data/ext/libmemcached-0.50/tests/pool.cc +78 -0
  505. data/ext/libmemcached-0.50/tests/pool.h +49 -0
  506. data/ext/libmemcached-0.50/tests/print.cc +58 -0
  507. data/ext/libmemcached-0.50/tests/print.h +51 -0
  508. data/ext/libmemcached-0.50/tests/replication.cc +333 -0
  509. data/ext/libmemcached-0.50/tests/replication.h +64 -0
  510. data/ext/libmemcached-0.50/tests/start.cc +29 -0
  511. data/ext/libmemcached-0.50/tests/string.cc +174 -0
  512. data/ext/libmemcached-0.50/tests/string.h +67 -0
  513. data/ext/libmemcached-0.50/tests/virtual_buckets.cc +143 -0
  514. data/ext/libmemcached-0.50/tests/virtual_buckets.h +51 -0
  515. data/ext/libmemcached-0.50/win32/include.am +11 -0
  516. data/ext/libmemcached-0.50/win32/wrappers.h +55 -0
  517. data/ext/rlibmemcached.i +263 -0
  518. data/ext/rlibmemcached_wrap.c +16732 -0
  519. data/lib/memcached.rb +32 -0
  520. data/lib/memcached/auth.rb +16 -0
  521. data/lib/memcached/behaviors.rb +77 -0
  522. data/lib/memcached/exceptions.rb +84 -0
  523. data/lib/memcached/experimental.rb +48 -0
  524. data/lib/memcached/memcached.rb +660 -0
  525. data/lib/memcached/rails.rb +133 -0
  526. data/test/profile/benchmark.rb +245 -0
  527. data/test/profile/c_profiler.rb +14 -0
  528. data/test/profile/exercise.rb +185 -0
  529. data/test/profile/rb_profiler.rb +21 -0
  530. data/test/profile/valgrind.rb +10 -0
  531. data/test/setup.rb +30 -0
  532. data/test/teardown.rb +0 -0
  533. data/test/test_helper.rb +19 -0
  534. data/test/unit/binding_test.rb +8 -0
  535. data/test/unit/memcached_experimental_test.rb +274 -0
  536. data/test/unit/memcached_test.rb +1293 -0
  537. data/test/unit/rails_test.rb +122 -0
  538. metadata +650 -0
  539. metadata.gz.sig +0 -0
@@ -0,0 +1,119 @@
1
+ /* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
2
+ *
3
+ * LibMemcached
4
+ *
5
+ * Copyright (C) 2011 Data Differential, http://datadifferential.com/
6
+ * Copyright (C) 2006-2009 Brian Aker
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions are
11
+ * met:
12
+ *
13
+ * * Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ *
16
+ * * Redistributions in binary form must reproduce the above
17
+ * copyright notice, this list of conditions and the following disclaimer
18
+ * in the documentation and/or other materials provided with the
19
+ * distribution.
20
+ *
21
+ * * The names of its contributors may not be used to endorse or
22
+ * promote products derived from this software without specific prior
23
+ * written permission.
24
+ *
25
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
+ *
37
+ */
38
+
39
+ #pragma once
40
+
41
+ #include <libmemcached/memcached.h>
42
+
43
+ #define MAX_UDP_DATAGRAM_LENGTH 1400
44
+ #define UDP_DATAGRAM_HEADER_LENGTH 8
45
+ #define UDP_REQUEST_ID_MSG_SIG_DIGITS 10
46
+ #define UDP_REQUEST_ID_THREAD_MASK 0xFFFF << UDP_REQUEST_ID_MSG_SIG_DIGITS
47
+ #define get_udp_datagram_request_id(A) ntohs((A)->request_id)
48
+ #define get_udp_datagram_seq_num(A) ntohs((A)->sequence_number)
49
+ #define get_udp_datagram_num_datagrams(A) ntohs((A)->num_datagrams)
50
+ #define get_msg_num_from_request_id(A) ( (A) & (~(UDP_REQUEST_ID_THREAD_MASK)) )
51
+ #define get_thread_id_from_request_id(A) ( (A) & (UDP_REQUEST_ID_THREAD_MASK) ) >> UDP_REQUEST_ID_MSG_SIG_DIGITS
52
+ #define generate_udp_request_thread_id(A) (A) << UDP_REQUEST_ID_MSG_SIG_DIGITS
53
+ #define UDP_REQUEST_ID_MAX_THREAD_ID get_thread_id_from_request_id(0xFFFF)
54
+
55
+ struct udp_datagram_header_st
56
+ {
57
+ uint16_t request_id;
58
+ uint16_t sequence_number;
59
+ uint16_t num_datagrams;
60
+ uint16_t reserved;
61
+ };
62
+
63
+ struct libmemcached_io_vector_st
64
+ {
65
+ size_t length;
66
+ const void *buffer;
67
+ };
68
+
69
+ #ifdef __cplusplus
70
+ extern "C" {
71
+ #endif
72
+
73
+ LIBMEMCACHED_LOCAL
74
+ memcached_return_t memcached_io_wait_for_write(memcached_server_write_instance_st ptr);
75
+
76
+ LIBMEMCACHED_LOCAL
77
+ ssize_t memcached_io_writev(memcached_server_write_instance_st ptr,
78
+ const struct libmemcached_io_vector_st *vector,
79
+ size_t number_of, bool with_flush);
80
+
81
+ LIBMEMCACHED_LOCAL
82
+ ssize_t memcached_io_write(memcached_server_write_instance_st ptr,
83
+ const void *buffer, size_t length, bool with_flush);
84
+
85
+ LIBMEMCACHED_LOCAL
86
+ void memcached_io_reset(memcached_server_write_instance_st ptr);
87
+
88
+ LIBMEMCACHED_LOCAL
89
+ memcached_return_t memcached_io_read(memcached_server_write_instance_st ptr,
90
+ void *buffer, size_t length, ssize_t *nread);
91
+
92
+ /* Read a line (terminated by '\n') into the buffer */
93
+ LIBMEMCACHED_LOCAL
94
+ memcached_return_t memcached_io_readline(memcached_server_write_instance_st ptr,
95
+ char *buffer_ptr,
96
+ size_t size);
97
+
98
+ LIBMEMCACHED_LOCAL
99
+ void memcached_io_close(memcached_server_write_instance_st ptr);
100
+
101
+ /* Read n bytes of data from the server and store them in dta */
102
+ LIBMEMCACHED_LOCAL
103
+ memcached_return_t memcached_safe_read(memcached_server_write_instance_st ptr,
104
+ void *dta,
105
+ size_t size);
106
+
107
+ LIBMEMCACHED_LOCAL
108
+ memcached_return_t memcached_io_init_udp_header(memcached_server_write_instance_st ptr,
109
+ uint16_t thread_id);
110
+
111
+ LIBMEMCACHED_LOCAL
112
+ memcached_server_write_instance_st memcached_io_get_readable_server(memcached_st *memc);
113
+
114
+ LIBMEMCACHED_LOCAL
115
+ memcached_return_t memcached_io_slurp(memcached_server_write_instance_st ptr);
116
+
117
+ #ifdef __cplusplus
118
+ }
119
+ #endif
@@ -0,0 +1,48 @@
1
+ /* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
2
+ *
3
+ * LibMemcached
4
+ *
5
+ * Copyright (C) 2011 Data Differential, http://datadifferential.com/
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions are
10
+ * met:
11
+ *
12
+ * * Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ *
15
+ * * Redistributions in binary form must reproduce the above
16
+ * copyright notice, this list of conditions and the following disclaimer
17
+ * in the documentation and/or other materials provided with the
18
+ * distribution.
19
+ *
20
+ * * The names of its contributors may not be used to endorse or
21
+ * promote products derived from this software without specific prior
22
+ * written permission.
23
+ *
24
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
+ *
36
+ */
37
+
38
+ #pragma once
39
+
40
+ /* These are private */
41
+ #define memcached_is_allocated(__object) ((__object)->options.is_allocated)
42
+ #define memcached_is_initialized(__object) ((__object)->options.is_initialized)
43
+ #define memcached_is_purging(__object) ((__object)->state.is_purging)
44
+ #define memcached_is_processing_input(__object) ((__object)->state.is_processing_input)
45
+ #define memcached_set_purging(__object, __value) ((__object)->state.is_purging= (__value))
46
+ #define memcached_set_processing_input(__object, __value) ((__object)->state.is_processing_input= (__value))
47
+ #define memcached_set_initialized(__object, __value) ((__object)->options.is_initialized(= (__value))
48
+ #define memcached_set_allocated(__object, __value) ((__object)->options.is_allocated= (__value))
@@ -0,0 +1,23 @@
1
+ #include "common.h"
2
+
3
+ memcached_return_t memcached_key_test(const char * const *keys,
4
+ const size_t *key_length,
5
+ size_t number_of_keys)
6
+ {
7
+ for (uint32_t x= 0; x < number_of_keys; x++)
8
+ {
9
+ memcached_return_t rc;
10
+ rc= memcached_validate_key_length(*(key_length + x), false);
11
+ if (rc != MEMCACHED_SUCCESS)
12
+ return rc;
13
+
14
+ for (size_t y= 0; y < *(key_length + x); y++)
15
+ {
16
+ if ((isgraph(keys[x][y])) == 0)
17
+ return MEMCACHED_BAD_KEY_PROVIDED;
18
+ }
19
+ }
20
+
21
+ return MEMCACHED_SUCCESS;
22
+ }
23
+
@@ -0,0 +1,30 @@
1
+ provider libmemcached {
2
+ probe memcached_delete_start();
3
+ probe memcached_delete_end();
4
+ probe memcached_increment_with_initial_start();
5
+ probe memcached_increment_with_initial_end();
6
+ probe memcached_decrement_with_initial_start();
7
+ probe memcached_decrement_with_initial_end();
8
+ probe memcached_increment_start();
9
+ probe memcached_increment_end();
10
+ probe memcached_decrement_start();
11
+ probe memcached_decrement_end();
12
+ probe memcached_flush_start();
13
+ probe memcached_flush_end();
14
+ probe memcached_set_start();
15
+ probe memcached_set_end();
16
+ probe memcached_add_start();
17
+ probe memcached_add_end();
18
+ probe memcached_replace_start();
19
+ probe memcached_replace_end();
20
+ probe memcached_get_start();
21
+ probe memcached_get_end();
22
+ probe memcached_touch_start();
23
+ probe memcached_touch_end();
24
+ probe memcached_mget_start();
25
+ probe memcached_mget_end();
26
+ probe memcached_connect_start();
27
+ probe memcached_connect_end();
28
+ probe memcached_server_add_start();
29
+ probe memcached_server_add_end();
30
+ };
@@ -0,0 +1,118 @@
1
+ /* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
2
+ *
3
+ * Libmemcached library
4
+ *
5
+ * Copyright (C) 2011 Data Differential, http://datadifferential.com/
6
+ * Copyright (C) 2006-2009 Brian Aker All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions are
10
+ * met:
11
+ *
12
+ * * Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ *
15
+ * * Redistributions in binary form must reproduce the above
16
+ * copyright notice, this list of conditions and the following disclaimer
17
+ * in the documentation and/or other materials provided with the
18
+ * distribution.
19
+ *
20
+ * * The names of its contributors may not be used to endorse or
21
+ * promote products derived from this software without specific prior
22
+ * written permission.
23
+ *
24
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
+ *
36
+ */
37
+
38
+ #pragma once
39
+
40
+
41
+ /*
42
+ * This file contains the definition of the various probes supported by
43
+ * libmemcached. Currently it only support DTRACE, but just create an
44
+ * implementation of the following macros to create your own sort of
45
+ * probing :)
46
+ */
47
+
48
+ #ifdef HAVE_DTRACE
49
+ /*
50
+ * Create the DTrace probes on the system using it (to support both Solaris
51
+ * and MacOS X
52
+ */
53
+ #include "libmemcached/dtrace_probes.h"
54
+
55
+ #else
56
+ /*
57
+ * Provide dummy macros so that we don't need to clutter the code with
58
+ * ifdefs when we want to use the probes.
59
+ */
60
+
61
+ #define LIBMEMCACHED_MEMCACHED_ADD_END()
62
+ #define LIBMEMCACHED_MEMCACHED_ADD_END_ENABLED() (0)
63
+ #define LIBMEMCACHED_MEMCACHED_ADD_START()
64
+ #define LIBMEMCACHED_MEMCACHED_ADD_START_ENABLED() (0)
65
+ #define LIBMEMCACHED_MEMCACHED_CONNECT_END()
66
+ #define LIBMEMCACHED_MEMCACHED_CONNECT_END_ENABLED() (0)
67
+ #define LIBMEMCACHED_MEMCACHED_CONNECT_START()
68
+ #define LIBMEMCACHED_MEMCACHED_CONNECT_START_ENABLED() (0)
69
+ #define LIBMEMCACHED_MEMCACHED_DECREMENT_END()
70
+ #define LIBMEMCACHED_MEMCACHED_DECREMENT_END_ENABLED() (0)
71
+ #define LIBMEMCACHED_MEMCACHED_DECREMENT_START()
72
+ #define LIBMEMCACHED_MEMCACHED_DECREMENT_START_ENABLED() (0)
73
+ #define LIBMEMCACHED_MEMCACHED_DECREMENT_WITH_INITIAL_END()
74
+ #define LIBMEMCACHED_MEMCACHED_DECREMENT_WITH_INITIAL_END_ENABLED() (0)
75
+ #define LIBMEMCACHED_MEMCACHED_DECREMENT_WITH_INITIAL_START()
76
+ #define LIBMEMCACHED_MEMCACHED_DECREMENT_WITH_INITIAL_START_ENABLED() (0)
77
+ #define LIBMEMCACHED_MEMCACHED_DELETE_END()
78
+ #define LIBMEMCACHED_MEMCACHED_DELETE_END_ENABLED() (0)
79
+ #define LIBMEMCACHED_MEMCACHED_DELETE_START()
80
+ #define LIBMEMCACHED_MEMCACHED_DELETE_START_ENABLED() (0)
81
+ #define LIBMEMCACHED_MEMCACHED_FLUSH_END()
82
+ #define LIBMEMCACHED_MEMCACHED_FLUSH_END_ENABLED() (0)
83
+ #define LIBMEMCACHED_MEMCACHED_FLUSH_START()
84
+ #define LIBMEMCACHED_MEMCACHED_FLUSH_START_ENABLED() (0)
85
+ #define LIBMEMCACHED_MEMCACHED_GET_END()
86
+ #define LIBMEMCACHED_MEMCACHED_GET_END_ENABLED() (0)
87
+ #define LIBMEMCACHED_MEMCACHED_GET_START()
88
+ #define LIBMEMCACHED_MEMCACHED_GET_START_ENABLED() (0)
89
+ #define LIBMEMCACHED_MEMCACHED_TOUCH_END()
90
+ #define LIBMEMCACHED_MEMCACHED_TOUCH_END_ENABLED() (0)
91
+ #define LIBMEMCACHED_MEMCACHED_TOUCH_START()
92
+ #define LIBMEMCACHED_MEMCACHED_TOUCH_START_ENABLED() (0)
93
+ #define LIBMEMCACHED_MEMCACHED_INCREMENT_END()
94
+ #define LIBMEMCACHED_MEMCACHED_INCREMENT_END_ENABLED() (0)
95
+ #define LIBMEMCACHED_MEMCACHED_INCREMENT_START()
96
+ #define LIBMEMCACHED_MEMCACHED_INCREMENT_START_ENABLED() (0)
97
+ #define LIBMEMCACHED_MEMCACHED_INCREMENT_WITH_INITIAL_END()
98
+ #define LIBMEMCACHED_MEMCACHED_INCREMENT_WITH_INITIAL_END_ENABLED() (0)
99
+ #define LIBMEMCACHED_MEMCACHED_INCREMENT_WITH_INITIAL_START()
100
+ #define LIBMEMCACHED_MEMCACHED_INCREMENT_WITH_INITIAL_START_ENABLED() (0)
101
+ #define LIBMEMCACHED_MEMCACHED_MGET_END()
102
+ #define LIBMEMCACHED_MEMCACHED_MGET_END_ENABLED() (0)
103
+ #define LIBMEMCACHED_MEMCACHED_MGET_START()
104
+ #define LIBMEMCACHED_MEMCACHED_MGET_START_ENABLED() (0)
105
+ #define LIBMEMCACHED_MEMCACHED_REPLACE_END()
106
+ #define LIBMEMCACHED_MEMCACHED_REPLACE_END_ENABLED() (0)
107
+ #define LIBMEMCACHED_MEMCACHED_REPLACE_START()
108
+ #define LIBMEMCACHED_MEMCACHED_REPLACE_START_ENABLED() (0)
109
+ #define LIBMEMCACHED_MEMCACHED_SERVER_ADD_END()
110
+ #define LIBMEMCACHED_MEMCACHED_SERVER_ADD_END_ENABLED() (0)
111
+ #define LIBMEMCACHED_MEMCACHED_SERVER_ADD_START()
112
+ #define LIBMEMCACHED_MEMCACHED_SERVER_ADD_START_ENABLED() (0)
113
+ #define LIBMEMCACHED_MEMCACHED_SET_END()
114
+ #define LIBMEMCACHED_MEMCACHED_SET_END_ENABLED() (0)
115
+ #define LIBMEMCACHED_MEMCACHED_SET_START()
116
+ #define LIBMEMCACHED_MEMCACHED_SET_START_ENABLED() (0)
117
+
118
+ #endif
@@ -0,0 +1,437 @@
1
+ /* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
2
+ *
3
+ * Libmemcached library
4
+ *
5
+ * Copyright (C) 2011 Data Differential, http://datadifferential.com/
6
+ * Copyright (C) 2006-2009 Brian Aker All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions are
10
+ * met:
11
+ *
12
+ * * Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ *
15
+ * * Redistributions in binary form must reproduce the above
16
+ * copyright notice, this list of conditions and the following disclaimer
17
+ * in the documentation and/or other materials provided with the
18
+ * distribution.
19
+ *
20
+ * * The names of its contributors may not be used to endorse or
21
+ * promote products derived from this software without specific prior
22
+ * written permission.
23
+ *
24
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
+ *
36
+ */
37
+
38
+ #include <libmemcached/common.h>
39
+
40
+ #include <libmemcached/options.hpp>
41
+ #include <libmemcached/virtual_bucket.h>
42
+
43
+ #if 0
44
+ static const memcached_st global_copy= {
45
+ .state= {
46
+ .is_purging= false, // .is_purging
47
+ .is_processing_input= false, // is_processing_input
48
+ .is_time_for_rebuild= false,
49
+ },
50
+ .flags= {
51
+ .auto_eject_hosts= false,
52
+ .binary_protocol= false,
53
+ .buffer_requests= false,
54
+ .hash_with_prefix_key= false,
55
+ .no_block= false,
56
+ .no_reply= false,
57
+ .randomize_replica_read= false,
58
+ .support_cas= false,
59
+ .tcp_nodelay= false,
60
+ .use_sort_hosts= false,
61
+ .use_udp= false,
62
+ .verify_key= false,
63
+ .tcp_keepalive= false,
64
+ },
65
+ };
66
+ #endif
67
+
68
+ static inline bool _memcached_init(memcached_st *self)
69
+ {
70
+ self->state.is_purging= false;
71
+ self->state.is_processing_input= false;
72
+ self->state.is_time_for_rebuild= false;
73
+
74
+ self->flags.auto_eject_hosts= false;
75
+ self->flags.binary_protocol= false;
76
+ self->flags.buffer_requests= false;
77
+ self->flags.hash_with_prefix_key= false;
78
+ self->flags.no_block= false;
79
+ self->flags.no_reply= false;
80
+ self->flags.randomize_replica_read= false;
81
+ self->flags.support_cas= false;
82
+ self->flags.tcp_nodelay= false;
83
+ self->flags.use_sort_hosts= false;
84
+ self->flags.use_udp= false;
85
+ self->flags.verify_key= false;
86
+ self->flags.tcp_keepalive= false;
87
+
88
+ self->virtual_bucket= NULL;
89
+
90
+ self->distribution= MEMCACHED_DISTRIBUTION_MODULA;
91
+
92
+ if (not hashkit_create(&self->hashkit))
93
+ return false;
94
+
95
+ self->ketama.continuum= NULL;
96
+ self->ketama.continuum_count= 0;
97
+ self->ketama.continuum_points_counter= 0;
98
+ self->ketama.next_distribution_rebuild= 0;
99
+ self->ketama.weighted= false;
100
+
101
+ self->number_of_hosts= 0;
102
+ self->servers= NULL;
103
+ self->last_disconnected_server= NULL;
104
+
105
+ self->snd_timeout= 0;
106
+ self->rcv_timeout= 0;
107
+ self->server_failure_limit= 0;
108
+ self->query_id= 1; // 0 is considered invalid
109
+
110
+ /* TODO, Document why we picked these defaults */
111
+ self->io_msg_watermark= 500;
112
+ self->io_bytes_watermark= 65 * 1024;
113
+
114
+ self->tcp_keepidle= 0;
115
+
116
+ self->io_key_prefetch= 0;
117
+ self->poll_timeout= MEMCACHED_DEFAULT_TIMEOUT;
118
+ self->connect_timeout= MEMCACHED_DEFAULT_CONNECT_TIMEOUT;
119
+ self->retry_timeout= 0;
120
+
121
+ self->send_size= -1;
122
+ self->recv_size= -1;
123
+
124
+ self->user_data= NULL;
125
+ self->number_of_replicas= 0;
126
+
127
+ self->allocators= memcached_allocators_return_default();
128
+
129
+ self->on_clone= NULL;
130
+ self->on_cleanup= NULL;
131
+ self->get_key_failure= NULL;
132
+ self->delete_trigger= NULL;
133
+ self->callbacks= NULL;
134
+ self->sasl.callbacks= NULL;
135
+ self->sasl.is_allocated= false;
136
+
137
+ self->error_messages= NULL;
138
+ self->prefix_key= NULL;
139
+ self->configure.initial_pool_size= 1;
140
+ self->configure.max_pool_size= 1;
141
+ self->configure.version= -1;
142
+ self->configure.filename= NULL;
143
+
144
+ return true;
145
+ }
146
+
147
+ static void _free(memcached_st *ptr, bool release_st)
148
+ {
149
+ /* If we have anything open, lets close it now */
150
+ send_quit(ptr);
151
+ memcached_server_list_free(memcached_server_list(ptr));
152
+ memcached_result_free(&ptr->result);
153
+
154
+ memcached_virtual_bucket_free(ptr);
155
+
156
+ memcached_server_free(ptr->last_disconnected_server);
157
+
158
+ if (ptr->on_cleanup)
159
+ ptr->on_cleanup(ptr);
160
+
161
+ libmemcached_free(ptr, ptr->ketama.continuum);
162
+
163
+ memcached_array_free(ptr->prefix_key);
164
+ ptr->prefix_key= NULL;
165
+
166
+ memcached_error_free(ptr);
167
+
168
+ if (ptr->sasl.callbacks)
169
+ {
170
+ #ifdef LIBMEMCACHED_WITH_SASL_SUPPORT
171
+ memcached_destroy_sasl_auth_data(ptr);
172
+ #endif
173
+ }
174
+
175
+ if (release_st)
176
+ {
177
+ memcached_array_free(ptr->configure.filename);
178
+ ptr->configure.filename= NULL;
179
+ }
180
+
181
+ if (memcached_is_allocated(ptr) && release_st)
182
+ {
183
+ libmemcached_free(ptr, ptr);
184
+ }
185
+ }
186
+
187
+ memcached_st *memcached_create(memcached_st *ptr)
188
+ {
189
+ if (ptr == NULL)
190
+ {
191
+ ptr= (memcached_st *)malloc(sizeof(memcached_st));
192
+
193
+ if (not ptr)
194
+ {
195
+ return NULL; /* MEMCACHED_MEMORY_ALLOCATION_FAILURE */
196
+ }
197
+
198
+ ptr->options.is_allocated= true;
199
+ }
200
+ else
201
+ {
202
+ ptr->options.is_allocated= false;
203
+ }
204
+
205
+ #if 0
206
+ memcached_set_purging(ptr, false);
207
+ memcached_set_processing_input(ptr, false);
208
+ #endif
209
+
210
+ if (! _memcached_init(ptr))
211
+ {
212
+ memcached_free(ptr);
213
+ return NULL;
214
+ }
215
+
216
+ if (! memcached_result_create(ptr, &ptr->result))
217
+ {
218
+ memcached_free(ptr);
219
+ return NULL;
220
+ }
221
+
222
+ WATCHPOINT_ASSERT_INITIALIZED(&ptr->result);
223
+
224
+ return ptr;
225
+ }
226
+
227
+ memcached_st *memcached(const char *string, size_t length)
228
+ {
229
+ memcached_st *self= memcached_create(NULL);
230
+ if (not self)
231
+ {
232
+ errno= ENOMEM;
233
+ return NULL;
234
+ }
235
+
236
+ if (not length)
237
+ return self;
238
+
239
+ memcached_return_t rc= memcached_parse_configuration(self, string, length);
240
+
241
+ if (memcached_success(rc) and memcached_parse_filename(self))
242
+ {
243
+ rc= memcached_parse_configure_file(*self, memcached_parse_filename(self), memcached_parse_filename_length(self));
244
+ }
245
+
246
+ if (memcached_failed(rc))
247
+ {
248
+ memcached_free(self);
249
+ errno= EINVAL;
250
+ return NULL;
251
+ }
252
+
253
+ return self;
254
+ }
255
+
256
+ memcached_return_t memcached_reset(memcached_st *ptr)
257
+ {
258
+ WATCHPOINT_ASSERT(ptr);
259
+ if (not ptr)
260
+ return MEMCACHED_INVALID_ARGUMENTS;
261
+
262
+ bool stored_is_allocated= memcached_is_allocated(ptr);
263
+ uint64_t query_id= ptr->query_id;
264
+ _free(ptr, false);
265
+ memcached_create(ptr);
266
+ memcached_set_allocated(ptr, stored_is_allocated);
267
+ ptr->query_id= query_id;
268
+
269
+ if (ptr->configure.filename)
270
+ {
271
+ return memcached_parse_configure_file(*ptr, memcached_param_array(ptr->configure.filename));
272
+ }
273
+
274
+ return MEMCACHED_SUCCESS;
275
+ }
276
+
277
+ void memcached_servers_reset(memcached_st *self)
278
+ {
279
+ if (not self)
280
+ return;
281
+
282
+ memcached_server_list_free(memcached_server_list(self));
283
+
284
+ memcached_server_list_set(self, NULL);
285
+ self->number_of_hosts= 0;
286
+ memcached_server_free(self->last_disconnected_server);
287
+ self->last_disconnected_server= NULL;
288
+ self->server_failure_limit= 0;
289
+ }
290
+
291
+ void memcached_reset_last_disconnected_server(memcached_st *self)
292
+ {
293
+ if (not self)
294
+ return;
295
+
296
+ memcached_server_free(self->last_disconnected_server);
297
+ self->last_disconnected_server= NULL;
298
+ }
299
+
300
+ void memcached_free(memcached_st *ptr)
301
+ {
302
+ if (not ptr)
303
+ return;
304
+
305
+ _free(ptr, true);
306
+ }
307
+
308
+ /*
309
+ clone is the destination, while source is the structure to clone.
310
+ If source is NULL the call is the same as if a memcached_create() was
311
+ called.
312
+ */
313
+ memcached_st *memcached_clone(memcached_st *clone, const memcached_st *source)
314
+ {
315
+ memcached_return_t rc= MEMCACHED_SUCCESS;
316
+
317
+ if (not source)
318
+ return memcached_create(clone);
319
+
320
+ if (clone && memcached_is_allocated(clone))
321
+ {
322
+ return NULL;
323
+ }
324
+
325
+ memcached_st *new_clone= memcached_create(clone);
326
+
327
+ if (not new_clone)
328
+ return NULL;
329
+
330
+ new_clone->flags= source->flags;
331
+ new_clone->send_size= source->send_size;
332
+ new_clone->recv_size= source->recv_size;
333
+ new_clone->poll_timeout= source->poll_timeout;
334
+ new_clone->connect_timeout= source->connect_timeout;
335
+ new_clone->retry_timeout= source->retry_timeout;
336
+ new_clone->distribution= source->distribution;
337
+
338
+ if (not hashkit_clone(&new_clone->hashkit, &source->hashkit))
339
+ {
340
+ memcached_free(new_clone);
341
+ return NULL;
342
+ }
343
+
344
+ new_clone->user_data= source->user_data;
345
+
346
+ new_clone->snd_timeout= source->snd_timeout;
347
+ new_clone->rcv_timeout= source->rcv_timeout;
348
+
349
+ new_clone->on_clone= source->on_clone;
350
+ new_clone->on_cleanup= source->on_cleanup;
351
+
352
+ new_clone->allocators= source->allocators;
353
+
354
+ new_clone->get_key_failure= source->get_key_failure;
355
+ new_clone->delete_trigger= source->delete_trigger;
356
+ new_clone->server_failure_limit= source->server_failure_limit;
357
+ new_clone->io_msg_watermark= source->io_msg_watermark;
358
+ new_clone->io_bytes_watermark= source->io_bytes_watermark;
359
+ new_clone->io_key_prefetch= source->io_key_prefetch;
360
+ new_clone->number_of_replicas= source->number_of_replicas;
361
+ new_clone->tcp_keepidle= source->tcp_keepidle;
362
+
363
+ if (memcached_server_count(source))
364
+ rc= memcached_push(new_clone, source);
365
+
366
+ if (rc != MEMCACHED_SUCCESS)
367
+ {
368
+ memcached_free(new_clone);
369
+
370
+ return NULL;
371
+ }
372
+
373
+
374
+ new_clone->prefix_key= memcached_array_clone(new_clone, source->prefix_key);
375
+ new_clone->configure.filename= memcached_array_clone(new_clone, source->prefix_key);
376
+
377
+ #ifdef LIBMEMCACHED_WITH_SASL_SUPPORT
378
+ if (source->sasl.callbacks)
379
+ {
380
+ if (memcached_clone_sasl(new_clone, source) != MEMCACHED_SUCCESS)
381
+ {
382
+ memcached_free(new_clone);
383
+ return NULL;
384
+ }
385
+ }
386
+ #endif
387
+
388
+ rc= run_distribution(new_clone);
389
+
390
+ if (rc != MEMCACHED_SUCCESS)
391
+ {
392
+ memcached_free(new_clone);
393
+
394
+ return NULL;
395
+ }
396
+
397
+ if (source->on_clone)
398
+ source->on_clone(new_clone, source);
399
+
400
+ return new_clone;
401
+ }
402
+
403
+ void *memcached_get_user_data(const memcached_st *ptr)
404
+ {
405
+ return ptr->user_data;
406
+ }
407
+
408
+ void *memcached_set_user_data(memcached_st *ptr, void *data)
409
+ {
410
+ void *ret= ptr->user_data;
411
+ ptr->user_data= data;
412
+
413
+ return ret;
414
+ }
415
+
416
+ memcached_return_t memcached_push(memcached_st *destination, const memcached_st *source)
417
+ {
418
+ return memcached_server_push(destination, source->servers);
419
+ }
420
+
421
+ memcached_server_write_instance_st memcached_server_instance_fetch(memcached_st *ptr, uint32_t server_key)
422
+ {
423
+ return &ptr->servers[server_key];
424
+ }
425
+
426
+ memcached_server_instance_st memcached_server_instance_by_position(const memcached_st *ptr, uint32_t server_key)
427
+ {
428
+ return &ptr->servers[server_key];
429
+ }
430
+
431
+ uint64_t memcached_query_id(const memcached_st *self)
432
+ {
433
+ if (not self)
434
+ return 0;
435
+
436
+ return self->query_id;
437
+ }