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,73 @@
1
+ .TH "MEMFLUSH" "1" "June 17, 2011" "0.49" "libmemcached"
2
+ .SH NAME
3
+ memflush \- libmemcached Documentation
4
+ .
5
+ .nr rst2man-indent-level 0
6
+ .
7
+ .de1 rstReportMargin
8
+ \\$1 \\n[an-margin]
9
+ level \\n[rst2man-indent-level]
10
+ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
11
+ -
12
+ \\n[rst2man-indent0]
13
+ \\n[rst2man-indent1]
14
+ \\n[rst2man-indent2]
15
+ ..
16
+ .de1 INDENT
17
+ .\" .rstReportMargin pre:
18
+ . RS \\$1
19
+ . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
20
+ . nr rst2man-indent-level +1
21
+ .\" .rstReportMargin post:
22
+ ..
23
+ .de UNINDENT
24
+ . RE
25
+ .\" indent \\n[an-margin]
26
+ .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
27
+ .nr rst2man-indent-level -1
28
+ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
29
+ .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
30
+ ..
31
+ .\" Man page generated from reStructeredText.
32
+ .
33
+ .sp
34
+ Reset a server or list of servers
35
+ .SH SYNOPSIS
36
+ .INDENT 0.0
37
+ .TP
38
+ .B program
39
+ .
40
+ \fImemflush\fP
41
+ .UNINDENT
42
+ .INDENT 0.0
43
+ .TP
44
+ .B \-\-help
45
+ .UNINDENT
46
+ .SH DESCRIPTION
47
+ .sp
48
+ \fBmemflush\fP resets the contents of memcached(1) servers.
49
+ This means that all data in the specified servers will be deleted.
50
+ .sp
51
+ You can specify servers via the \fB\-\-servers\fP option or via the
52
+ environment variable \fBMEMCACHED_SERVERS\fP.
53
+ .sp
54
+ For a full list of operations run the tool with the \fB\-\-help\fP option.
55
+ .SH HOME
56
+ .sp
57
+ To find out more information please check:
58
+ \fI\%http://libmemcached.org/\fP
59
+ .SH AUTHOR
60
+ .sp
61
+ Brian Aker, <\fI\%brian@tangent.org\fP>
62
+ .sp
63
+ Mark Atwood <\fI\%mark@fallenpegasus.com\fP>
64
+ .SH SEE ALSO
65
+ .sp
66
+ memcached(1) libmemcached(3)
67
+ .SH AUTHOR
68
+ Brian Aker
69
+ .SH COPYRIGHT
70
+ 2011, Brian Aker DataDifferential, http://datadifferential.com/
71
+ .\" Generated by docutils manpage writer.
72
+ .\"
73
+ .
@@ -0,0 +1,72 @@
1
+ .TH "MEMRM" "1" "June 17, 2011" "0.49" "libmemcached"
2
+ .SH NAME
3
+ memrm \- libmemcached Documentation
4
+ .
5
+ .nr rst2man-indent-level 0
6
+ .
7
+ .de1 rstReportMargin
8
+ \\$1 \\n[an-margin]
9
+ level \\n[rst2man-indent-level]
10
+ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
11
+ -
12
+ \\n[rst2man-indent0]
13
+ \\n[rst2man-indent1]
14
+ \\n[rst2man-indent2]
15
+ ..
16
+ .de1 INDENT
17
+ .\" .rstReportMargin pre:
18
+ . RS \\$1
19
+ . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
20
+ . nr rst2man-indent-level +1
21
+ .\" .rstReportMargin post:
22
+ ..
23
+ .de UNINDENT
24
+ . RE
25
+ .\" indent \\n[an-margin]
26
+ .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
27
+ .nr rst2man-indent-level -1
28
+ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
29
+ .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
30
+ ..
31
+ .\" Man page generated from reStructeredText.
32
+ .
33
+ .sp
34
+ memrm \- Remove a key(s) from a collection of memcached servers
35
+ .SH SYNOPSIS
36
+ .INDENT 0.0
37
+ .TP
38
+ .B program
39
+ .
40
+ \fImemrm\fP
41
+ .UNINDENT
42
+ .INDENT 0.0
43
+ .TP
44
+ .B \-\-help
45
+ .UNINDENT
46
+ .SH DESCRIPTION
47
+ .sp
48
+ \fBmemrm\fP removes items, specified by key, from memcached(1) servers.
49
+ .sp
50
+ You can specify servers via the \fB\-\-servers\fP option or via the
51
+ environment variable \fBMEMCACHED_SERVERS\fP.
52
+ .sp
53
+ For a full list of operations run the tool with the \fB\-\-help\fP option.
54
+ .SH HOME
55
+ .sp
56
+ To find out more information please check:
57
+ \fI\%http://libmemcached.org/\fP
58
+ .SH AUTHOR
59
+ .sp
60
+ Brian Aker, <\fI\%brian@tangent.org\fP>
61
+ .sp
62
+ Mark Atwood, <\fI\%mark@fallenpegasus.com\fP>
63
+ .SH SEE ALSO
64
+ .sp
65
+ memcached(1) libmemcached(3)
66
+ .SH AUTHOR
67
+ Brian Aker
68
+ .SH COPYRIGHT
69
+ 2011, Brian Aker DataDifferential, http://datadifferential.com/
70
+ .\" Generated by docutils manpage writer.
71
+ .\"
72
+ .
@@ -0,0 +1,59 @@
1
+ .TH "MEMSLAP" "1" "June 17, 2011" "0.49" "libmemcached"
2
+ .SH NAME
3
+ memslap \- libmemcached Documentation
4
+ .
5
+ .nr rst2man-indent-level 0
6
+ .
7
+ .de1 rstReportMargin
8
+ \\$1 \\n[an-margin]
9
+ level \\n[rst2man-indent-level]
10
+ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
11
+ -
12
+ \\n[rst2man-indent0]
13
+ \\n[rst2man-indent1]
14
+ \\n[rst2man-indent2]
15
+ ..
16
+ .de1 INDENT
17
+ .\" .rstReportMargin pre:
18
+ . RS \\$1
19
+ . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
20
+ . nr rst2man-indent-level +1
21
+ .\" .rstReportMargin post:
22
+ ..
23
+ .de UNINDENT
24
+ . RE
25
+ .\" indent \\n[an-margin]
26
+ .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
27
+ .nr rst2man-indent-level -1
28
+ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
29
+ .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
30
+ ..
31
+ .\" Man page generated from reStructeredText.
32
+ .
33
+ .SH SYNOPSIS
34
+ .INDENT 0.0
35
+ .TP
36
+ .B program
37
+ .
38
+ \fImemslap\fP
39
+ .UNINDENT
40
+ .INDENT 0.0
41
+ .TP
42
+ .B \-\-help
43
+ .UNINDENT
44
+ .SH DESCRIPTION
45
+ .sp
46
+ \fBmemslap\fP is a load generation and benchmark tool for memcached(1)
47
+ servers. It generates configurable workload such as threads, concurrencies, connections, run time, overwrite, miss rate, key size, value size, get/set proportion, expected throughput, and so on.
48
+ .sp
49
+ You can specify servers via the \fB\-\-servers\fP option or via the environment variable \fBMEMCACHED_SERVERS\fP.
50
+ .SH SEE ALSO
51
+ .sp
52
+ \fImemcached(1)\fP \fIlibmemcached(3)\fP
53
+ .SH AUTHOR
54
+ Brian Aker
55
+ .SH COPYRIGHT
56
+ 2011, Brian Aker DataDifferential, http://datadifferential.com/
57
+ .\" Generated by docutils manpage writer.
58
+ .\"
59
+ .
@@ -0,0 +1,70 @@
1
+ .TH "MEMSTAT" "1" "June 17, 2011" "0.49" "libmemcached"
2
+ .SH NAME
3
+ memstat \- libmemcached Documentation
4
+ .
5
+ .nr rst2man-indent-level 0
6
+ .
7
+ .de1 rstReportMargin
8
+ \\$1 \\n[an-margin]
9
+ level \\n[rst2man-indent-level]
10
+ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
11
+ -
12
+ \\n[rst2man-indent0]
13
+ \\n[rst2man-indent1]
14
+ \\n[rst2man-indent2]
15
+ ..
16
+ .de1 INDENT
17
+ .\" .rstReportMargin pre:
18
+ . RS \\$1
19
+ . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
20
+ . nr rst2man-indent-level +1
21
+ .\" .rstReportMargin post:
22
+ ..
23
+ .de UNINDENT
24
+ . RE
25
+ .\" indent \\n[an-margin]
26
+ .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
27
+ .nr rst2man-indent-level -1
28
+ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
29
+ .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
30
+ ..
31
+ .\" Man page generated from reStructeredText.
32
+ .
33
+ .sp
34
+ memstat \- Display the operating status of a single or group of memcached servers
35
+ .SH SYNOPSIS
36
+ .INDENT 0.0
37
+ .TP
38
+ .B program
39
+ .
40
+ \fImemstat\fP
41
+ .UNINDENT
42
+ .INDENT 0.0
43
+ .TP
44
+ .B \-\-help
45
+ .UNINDENT
46
+ .SH DESCRIPTION
47
+ .sp
48
+ \fBmemstat\fP dumps the state of memcached(1) servers.
49
+ It displays all data to stdout.
50
+ .sp
51
+ You can specify servers via the \fB\-\-servers\fP option or via the
52
+ environment variable \fBMEMCACHED_SERVERS\fP. \fB\-\-args\fP can be used
53
+ to specify the "argument" sent to the stats command (ie slab, size, items,
54
+ etc..).
55
+ .sp
56
+ For a full list of operations run the tool with the \fB\-\-help\fP option.
57
+ .SH HOME
58
+ .sp
59
+ To find out more information please check:
60
+ \fI\%http://libmemcached.org/\fP
61
+ .SH SEE ALSO
62
+ .sp
63
+ memcached(1) libmemcached(3)
64
+ .SH AUTHOR
65
+ Brian Aker
66
+ .SH COPYRIGHT
67
+ 2011, Brian Aker DataDifferential, http://datadifferential.com/
68
+ .\" Generated by docutils manpage writer.
69
+ .\"
70
+ .
@@ -0,0 +1,24 @@
1
+ # vim:ft=automake
2
+ # included from Top Level Makefile.am
3
+ # All paths should be given relative to the root
4
+
5
+ if HAVE_LIBEVENT
6
+ noinst_PROGRAMS += example/memcached_light
7
+ endif
8
+
9
+ example_memcached_light_SOURCES= \
10
+ example/interface_v0.c \
11
+ example/interface_v1.c \
12
+ example/memcached_light.c \
13
+ libmemcached/byteorder.cc \
14
+ example/memcached_light.h \
15
+ example/storage.h
16
+
17
+ example_memcached_light_LDADD= libmemcached/libmemcachedprotocol.la \
18
+ $(LIBINNODB) $(LTLIBEVENT)
19
+
20
+ if HAVE_LIBINNODB
21
+ example_memcached_light_SOURCES+= example/storage_innodb.c
22
+ else
23
+ example_memcached_light_SOURCES+= example/storage.c
24
+ endif
@@ -0,0 +1,594 @@
1
+ /* -*- Mode: C; tab-width: 2; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
+ /**
3
+ * This file contains an implementation of the callback interface for level 0
4
+ * in the protocol library. You might want to have your copy of the protocol
5
+ * specification next to your coffee ;-)
6
+ */
7
+ #include "config.h"
8
+ #include <assert.h>
9
+ #include <sys/types.h>
10
+ #include <stdio.h>
11
+ #include <unistd.h>
12
+ #include <fcntl.h>
13
+ #include <errno.h>
14
+ #include <stdlib.h>
15
+ #include <string.h>
16
+
17
+ #include <libmemcached/protocol_handler.h>
18
+ #include <libmemcached/byteorder.h>
19
+ #include "storage.h"
20
+ #include "memcached_light.h"
21
+
22
+ static protocol_binary_response_status noop_command_handler(const void *cookie,
23
+ protocol_binary_request_header *header,
24
+ memcached_binary_protocol_raw_response_handler response_handler)
25
+ {
26
+ protocol_binary_response_no_extras response= {
27
+ .message.header.response= {
28
+ .magic= PROTOCOL_BINARY_RES,
29
+ .opcode= PROTOCOL_BINARY_CMD_NOOP,
30
+ .status= htons(PROTOCOL_BINARY_RESPONSE_SUCCESS),
31
+ .opaque= header->request.opaque
32
+ }
33
+ };
34
+
35
+ return response_handler(cookie, header, (void*)&response);
36
+ }
37
+
38
+ static protocol_binary_response_status quit_command_handler(const void *cookie,
39
+ protocol_binary_request_header *header,
40
+ memcached_binary_protocol_raw_response_handler response_handler)
41
+ {
42
+ protocol_binary_response_no_extras response= {
43
+ .message.header.response= {
44
+ .magic= PROTOCOL_BINARY_RES,
45
+ .opcode= PROTOCOL_BINARY_CMD_QUIT,
46
+ .status= htons(PROTOCOL_BINARY_RESPONSE_SUCCESS),
47
+ .opaque= header->request.opaque
48
+ }
49
+ };
50
+
51
+ if (header->request.opcode == PROTOCOL_BINARY_CMD_QUIT)
52
+ response_handler(cookie, header, (void*)&response);
53
+
54
+ /* I need a better way to signal to close the connection */
55
+ return PROTOCOL_BINARY_RESPONSE_EINTERNAL;
56
+ }
57
+
58
+ static protocol_binary_response_status get_command_handler(const void *cookie,
59
+ protocol_binary_request_header *header,
60
+ memcached_binary_protocol_raw_response_handler response_handler)
61
+ {
62
+ uint8_t opcode= header->request.opcode;
63
+ union {
64
+ protocol_binary_response_get response;
65
+ char buffer[4096];
66
+ } msg= {
67
+ .response.message.header.response= {
68
+ .magic= PROTOCOL_BINARY_RES,
69
+ .opcode= opcode,
70
+ .status= htons(PROTOCOL_BINARY_RESPONSE_SUCCESS),
71
+ .opaque= header->request.opaque
72
+ }
73
+ };
74
+
75
+ struct item *item= get_item(header + 1, ntohs(header->request.keylen));
76
+ if (item)
77
+ {
78
+ msg.response.message.body.flags= htonl(item->flags);
79
+ char *ptr= (char*)(msg.response.bytes + sizeof(*header) + 4);
80
+ uint32_t bodysize= 4;
81
+ msg.response.message.header.response.cas= memcached_htonll(item->cas);
82
+ if (opcode == PROTOCOL_BINARY_CMD_GETK || opcode == PROTOCOL_BINARY_CMD_GETKQ)
83
+ {
84
+ memcpy(ptr, item->key, item->nkey);
85
+ msg.response.message.header.response.keylen= htons((uint16_t)item->nkey);
86
+ ptr += item->nkey;
87
+ bodysize += (uint32_t)item->nkey;
88
+ }
89
+ memcpy(ptr, item->data, item->size);
90
+ bodysize += (uint32_t)item->size;
91
+ msg.response.message.header.response.bodylen= htonl(bodysize);
92
+ msg.response.message.header.response.extlen= 4;
93
+
94
+ release_item(item);
95
+ return response_handler(cookie, header, (void*)&msg);
96
+ }
97
+ else if (opcode == PROTOCOL_BINARY_CMD_GET || opcode == PROTOCOL_BINARY_CMD_GETK)
98
+ {
99
+ msg.response.message.header.response.status= htons(PROTOCOL_BINARY_RESPONSE_KEY_ENOENT);
100
+ return response_handler(cookie, header, (void*)&msg);
101
+ }
102
+
103
+ /* Q shouldn't report a miss ;-) */
104
+ return PROTOCOL_BINARY_RESPONSE_SUCCESS;
105
+ }
106
+
107
+ static protocol_binary_response_status delete_command_handler(const void *cookie,
108
+ protocol_binary_request_header *header,
109
+ memcached_binary_protocol_raw_response_handler response_handler)
110
+ {
111
+ size_t keylen= ntohs(header->request.keylen);
112
+ char *key= ((char*)header) + sizeof(*header);
113
+ protocol_binary_response_no_extras response= {
114
+ .message.header.response= {
115
+ .magic= PROTOCOL_BINARY_RES,
116
+ .opcode= header->request.opcode,
117
+ .opaque= header->request.opaque
118
+ }
119
+ };
120
+
121
+ if (!delete_item(key, keylen))
122
+ {
123
+ response.message.header.response.status= htons(PROTOCOL_BINARY_RESPONSE_KEY_ENOENT);
124
+ return response_handler(cookie, header, (void*)&response);
125
+ }
126
+ else if (header->request.opcode == PROTOCOL_BINARY_CMD_DELETE)
127
+ {
128
+ /* DELETEQ doesn't want success response */
129
+ response.message.header.response.status= htons(PROTOCOL_BINARY_RESPONSE_SUCCESS);
130
+ return response_handler(cookie, header, (void*)&response);
131
+ }
132
+
133
+ return PROTOCOL_BINARY_RESPONSE_SUCCESS;
134
+ }
135
+
136
+ static protocol_binary_response_status flush_command_handler(const void *cookie,
137
+ protocol_binary_request_header *header,
138
+ memcached_binary_protocol_raw_response_handler response_handler)
139
+ {
140
+ uint8_t opcode= header->request.opcode;
141
+
142
+ /* @fixme sett inn when! */
143
+ flush(0);
144
+
145
+ if (opcode == PROTOCOL_BINARY_CMD_FLUSH)
146
+ {
147
+ protocol_binary_response_no_extras response= {
148
+ .message.header.response= {
149
+ .magic= PROTOCOL_BINARY_RES,
150
+ .opcode= opcode,
151
+ .status= htons(PROTOCOL_BINARY_RESPONSE_SUCCESS),
152
+ .opaque= header->request.opaque
153
+ }
154
+ };
155
+ return response_handler(cookie, header, (void*)&response);
156
+ }
157
+
158
+ return PROTOCOL_BINARY_RESPONSE_SUCCESS;
159
+ }
160
+
161
+ static protocol_binary_response_status arithmetic_command_handler(const void *cookie,
162
+ protocol_binary_request_header *header,
163
+ memcached_binary_protocol_raw_response_handler response_handler)
164
+ {
165
+ protocol_binary_request_incr *req= (void*)header;
166
+ protocol_binary_response_incr response= {
167
+ .message.header.response= {
168
+ .magic= PROTOCOL_BINARY_RES,
169
+ .opcode= header->request.opcode,
170
+ .opaque= header->request.opaque,
171
+ },
172
+ };
173
+
174
+ uint16_t keylen= ntohs(header->request.keylen);
175
+ uint64_t initial= memcached_ntohll(req->message.body.initial);
176
+ uint64_t delta= memcached_ntohll(req->message.body.delta);
177
+ uint32_t expiration= ntohl(req->message.body.expiration);
178
+ uint32_t flags= 0;
179
+ void *key= req->bytes + sizeof(req->bytes);
180
+ protocol_binary_response_status rval= PROTOCOL_BINARY_RESPONSE_SUCCESS;
181
+
182
+ uint64_t value= initial;
183
+
184
+ struct item *item= get_item(key, keylen);
185
+ if (item != NULL)
186
+ {
187
+ if (header->request.opcode == PROTOCOL_BINARY_CMD_INCREMENT ||
188
+ header->request.opcode == PROTOCOL_BINARY_CMD_INCREMENTQ)
189
+ {
190
+ value= (*(uint64_t*)item->data) + delta;
191
+ }
192
+ else
193
+ {
194
+ if (delta > *(uint64_t*)item->data)
195
+ {
196
+ value= 0;
197
+ }
198
+ else
199
+ {
200
+ value= *(uint64_t*)item->data - delta;
201
+ }
202
+ }
203
+ expiration= (uint32_t)item->exp;
204
+ flags= item->flags;
205
+
206
+ release_item(item);
207
+ delete_item(key, keylen);
208
+ }
209
+
210
+ item= create_item(key, keylen, NULL, sizeof(value), flags, (time_t)expiration);
211
+ if (item == NULL)
212
+ {
213
+ rval= PROTOCOL_BINARY_RESPONSE_ENOMEM;
214
+ }
215
+ else
216
+ {
217
+ memcpy(item->data, &value, sizeof(value));
218
+ put_item(item);
219
+ }
220
+
221
+ response.message.header.response.status= htons(rval);
222
+ if (rval == PROTOCOL_BINARY_RESPONSE_SUCCESS)
223
+ {
224
+ response.message.header.response.bodylen= ntohl(8);
225
+ response.message.body.value= memcached_ntohll((*(uint64_t*)item->data));
226
+ response.message.header.response.cas= memcached_ntohll(item->cas);
227
+
228
+ release_item(item);
229
+ if (header->request.opcode == PROTOCOL_BINARY_CMD_INCREMENTQ ||
230
+ header->request.opcode == PROTOCOL_BINARY_CMD_DECREMENTQ)
231
+ {
232
+ return PROTOCOL_BINARY_RESPONSE_SUCCESS;
233
+ }
234
+ }
235
+
236
+ return response_handler(cookie, header, (void*)&response);
237
+ }
238
+
239
+ static protocol_binary_response_status version_command_handler(const void *cookie,
240
+ protocol_binary_request_header *header,
241
+ memcached_binary_protocol_raw_response_handler response_handler)
242
+ {
243
+ const char *versionstring= "1.0.0";
244
+ union {
245
+ protocol_binary_response_header packet;
246
+ char buffer[256];
247
+ } response= {
248
+ .packet.response= {
249
+ .magic= PROTOCOL_BINARY_RES,
250
+ .opcode= PROTOCOL_BINARY_CMD_VERSION,
251
+ .status= htons(PROTOCOL_BINARY_RESPONSE_SUCCESS),
252
+ .opaque= header->request.opaque,
253
+ .cas= 0,
254
+ .bodylen= htonl((uint32_t)strlen(versionstring))
255
+ }
256
+ };
257
+
258
+ memcpy(response.buffer + sizeof(response.packet), versionstring, strlen(versionstring));
259
+
260
+ return response_handler(cookie, header, (void*)&response);
261
+ }
262
+
263
+ static protocol_binary_response_status concat_command_handler(const void *cookie,
264
+ protocol_binary_request_header *header,
265
+ memcached_binary_protocol_raw_response_handler response_handler)
266
+ {
267
+ protocol_binary_response_status rval= PROTOCOL_BINARY_RESPONSE_SUCCESS;
268
+ uint16_t keylen= ntohs(header->request.keylen);
269
+ uint64_t cas= memcached_ntohll(header->request.cas);
270
+ void *key= header + 1;
271
+ uint32_t vallen= ntohl(header->request.bodylen) - keylen;
272
+ void *val= (char*)key + keylen;
273
+
274
+ struct item *item= get_item(key, keylen);
275
+ struct item *nitem= NULL;
276
+
277
+ if (item == NULL)
278
+ {
279
+ rval= PROTOCOL_BINARY_RESPONSE_KEY_ENOENT;
280
+ }
281
+ else if (cas != 0 && cas != item->cas)
282
+ {
283
+ rval= PROTOCOL_BINARY_RESPONSE_KEY_EEXISTS;
284
+ }
285
+ else if ((nitem= create_item(key, keylen, NULL, item->size + vallen,
286
+ item->flags, item->exp)) == NULL)
287
+ {
288
+ release_item(item);
289
+ rval= PROTOCOL_BINARY_RESPONSE_ENOMEM;
290
+ }
291
+ else
292
+ {
293
+ if (header->request.opcode == PROTOCOL_BINARY_CMD_APPEND ||
294
+ header->request.opcode == PROTOCOL_BINARY_CMD_APPENDQ)
295
+ {
296
+ memcpy(nitem->data, item->data, item->size);
297
+ memcpy(((char*)(nitem->data)) + item->size, val, vallen);
298
+ }
299
+ else
300
+ {
301
+ memcpy(nitem->data, val, vallen);
302
+ memcpy(((char*)(nitem->data)) + vallen, item->data, item->size);
303
+ }
304
+ release_item(item);
305
+ delete_item(key, keylen);
306
+ put_item(nitem);
307
+ cas= nitem->cas;
308
+ release_item(nitem);
309
+
310
+ if (header->request.opcode == PROTOCOL_BINARY_CMD_APPEND ||
311
+ header->request.opcode == PROTOCOL_BINARY_CMD_PREPEND)
312
+ {
313
+ protocol_binary_response_no_extras response= {
314
+ .message= {
315
+ .header.response= {
316
+ .magic= PROTOCOL_BINARY_RES,
317
+ .opcode= header->request.opcode,
318
+ .status= htons(rval),
319
+ .opaque= header->request.opaque,
320
+ .cas= memcached_htonll(cas),
321
+ }
322
+ }
323
+ };
324
+ return response_handler(cookie, header, (void*)&response);
325
+ }
326
+ }
327
+
328
+ return rval;
329
+ }
330
+
331
+ static protocol_binary_response_status set_command_handler(const void *cookie,
332
+ protocol_binary_request_header *header,
333
+ memcached_binary_protocol_raw_response_handler response_handler)
334
+ {
335
+ size_t keylen= ntohs(header->request.keylen);
336
+ size_t datalen= ntohl(header->request.bodylen) - keylen - 8;
337
+ protocol_binary_request_replace *request= (void*)header;
338
+ uint32_t flags= ntohl(request->message.body.flags);
339
+ time_t timeout= (time_t)ntohl(request->message.body.expiration);
340
+ char *key= ((char*)header) + sizeof(*header) + 8;
341
+ char *data= key + keylen;
342
+
343
+ protocol_binary_response_no_extras response= {
344
+ .message= {
345
+ .header.response= {
346
+ .magic= PROTOCOL_BINARY_RES,
347
+ .opcode= header->request.opcode,
348
+ .status= htons(PROTOCOL_BINARY_RESPONSE_SUCCESS),
349
+ .opaque= header->request.opaque
350
+ }
351
+ }
352
+ };
353
+
354
+ if (header->request.cas != 0)
355
+ {
356
+ /* validate cas */
357
+ struct item* item= get_item(key, keylen);
358
+ if (item != NULL)
359
+ {
360
+ if (item->cas != memcached_ntohll(header->request.cas))
361
+ {
362
+ release_item(item);
363
+ response.message.header.response.status= htons(PROTOCOL_BINARY_RESPONSE_KEY_EEXISTS);
364
+ return response_handler(cookie, header, (void*)&response);
365
+ }
366
+ release_item(item);
367
+ }
368
+ }
369
+
370
+ delete_item(key, keylen);
371
+ struct item* item= create_item(key, keylen, data, datalen, flags, timeout);
372
+ if (item == NULL)
373
+ {
374
+ response.message.header.response.status= htons(PROTOCOL_BINARY_RESPONSE_ENOMEM);
375
+ }
376
+ else
377
+ {
378
+ put_item(item);
379
+ /* SETQ shouldn't return a message */
380
+ if (header->request.opcode == PROTOCOL_BINARY_CMD_SET)
381
+ {
382
+ response.message.header.response.cas= memcached_htonll(item->cas);
383
+ release_item(item);
384
+ return response_handler(cookie, header, (void*)&response);
385
+ }
386
+ release_item(item);
387
+
388
+ return PROTOCOL_BINARY_RESPONSE_SUCCESS;
389
+ }
390
+
391
+ return response_handler(cookie, header, (void*)&response);
392
+ }
393
+
394
+ static protocol_binary_response_status add_command_handler(const void *cookie,
395
+ protocol_binary_request_header *header,
396
+ memcached_binary_protocol_raw_response_handler response_handler)
397
+ {
398
+ size_t keylen= ntohs(header->request.keylen);
399
+ size_t datalen= ntohl(header->request.bodylen) - keylen - 8;
400
+ protocol_binary_request_add *request= (void*)header;
401
+ uint32_t flags= ntohl(request->message.body.flags);
402
+ time_t timeout= (time_t)ntohl(request->message.body.expiration);
403
+ char *key= ((char*)header) + sizeof(*header) + 8;
404
+ char *data= key + keylen;
405
+
406
+ protocol_binary_response_no_extras response= {
407
+ .message= {
408
+ .header.response= {
409
+ .magic= PROTOCOL_BINARY_RES,
410
+ .opcode= header->request.opcode,
411
+ .status= htons(PROTOCOL_BINARY_RESPONSE_SUCCESS),
412
+ .opaque= header->request.opaque
413
+ }
414
+ }
415
+ };
416
+
417
+ struct item* item= get_item(key, keylen);
418
+ if (item == NULL)
419
+ {
420
+ item= create_item(key, keylen, data, datalen, flags, timeout);
421
+ if (item == NULL)
422
+ response.message.header.response.status= htons(PROTOCOL_BINARY_RESPONSE_ENOMEM);
423
+ else
424
+ {
425
+ put_item(item);
426
+ /* ADDQ shouldn't return a message */
427
+ if (header->request.opcode == PROTOCOL_BINARY_CMD_ADD)
428
+ {
429
+ response.message.header.response.cas= memcached_htonll(item->cas);
430
+ release_item(item);
431
+ return response_handler(cookie, header, (void*)&response);
432
+ }
433
+ release_item(item);
434
+ return PROTOCOL_BINARY_RESPONSE_SUCCESS;
435
+ }
436
+ }
437
+ else
438
+ {
439
+ release_item(item);
440
+ response.message.header.response.status= htons(PROTOCOL_BINARY_RESPONSE_KEY_EEXISTS);
441
+ }
442
+
443
+ return response_handler(cookie, header, (void*)&response);
444
+ }
445
+
446
+ static protocol_binary_response_status replace_command_handler(const void *cookie,
447
+ protocol_binary_request_header *header,
448
+ memcached_binary_protocol_raw_response_handler response_handler)
449
+ {
450
+ size_t keylen= ntohs(header->request.keylen);
451
+ size_t datalen= ntohl(header->request.bodylen) - keylen - 8;
452
+ protocol_binary_request_replace *request= (void*)header;
453
+ uint32_t flags= ntohl(request->message.body.flags);
454
+ time_t timeout= (time_t)ntohl(request->message.body.expiration);
455
+ char *key= ((char*)header) + sizeof(*header) + 8;
456
+ char *data= key + keylen;
457
+
458
+ protocol_binary_response_no_extras response= {
459
+ .message= {
460
+ .header.response= {
461
+ .magic= PROTOCOL_BINARY_RES,
462
+ .opcode= header->request.opcode,
463
+ .status= htons(PROTOCOL_BINARY_RESPONSE_SUCCESS),
464
+ .opaque= header->request.opaque
465
+ }
466
+ }
467
+ };
468
+
469
+ struct item* item= get_item(key, keylen);
470
+ if (item == NULL)
471
+ {
472
+ response.message.header.response.status= htons(PROTOCOL_BINARY_RESPONSE_KEY_ENOENT);
473
+ }
474
+ else if (header->request.cas == 0 || memcached_ntohll(header->request.cas) == item->cas)
475
+ {
476
+ release_item(item);
477
+ delete_item(key, keylen);
478
+ item= create_item(key, keylen, data, datalen, flags, timeout);
479
+
480
+ if (item == NULL)
481
+ {
482
+ response.message.header.response.status= htons(PROTOCOL_BINARY_RESPONSE_ENOMEM);
483
+ }
484
+ else
485
+ {
486
+ put_item(item);
487
+ /* REPLACEQ shouldn't return a message */
488
+ if (header->request.opcode == PROTOCOL_BINARY_CMD_REPLACE)
489
+ {
490
+ response.message.header.response.cas= memcached_htonll(item->cas);
491
+ release_item(item);
492
+ return response_handler(cookie, header, (void*)&response);
493
+ }
494
+ release_item(item);
495
+ return PROTOCOL_BINARY_RESPONSE_SUCCESS;
496
+ }
497
+ }
498
+ else
499
+ {
500
+ response.message.header.response.status= htons(PROTOCOL_BINARY_RESPONSE_KEY_EEXISTS);
501
+ release_item(item);
502
+ }
503
+
504
+ return response_handler(cookie, header, (void*)&response);
505
+ }
506
+
507
+ static protocol_binary_response_status stat_command_handler(const void *cookie,
508
+ protocol_binary_request_header *header,
509
+ memcached_binary_protocol_raw_response_handler response_handler)
510
+ {
511
+ /* Just send the terminating packet*/
512
+ protocol_binary_response_no_extras response= {
513
+ .message= {
514
+ .header.response= {
515
+ .magic= PROTOCOL_BINARY_RES,
516
+ .opcode= PROTOCOL_BINARY_CMD_STAT,
517
+ .status= htons(PROTOCOL_BINARY_RESPONSE_SUCCESS),
518
+ .opaque= header->request.opaque
519
+ }
520
+ }
521
+ };
522
+
523
+ return response_handler(cookie, header, (void*)&response);
524
+ }
525
+
526
+ memcached_binary_protocol_callback_st interface_v0_impl= {
527
+ .interface_version= MEMCACHED_PROTOCOL_HANDLER_V0,
528
+ #ifdef FUTURE
529
+ /*
530
+ ** There is a number of bugs in the extra options for gcc causing
531
+ ** warning on these struct initializers. It hurts my heart to remove
532
+ ** it so I'll just leave it in here so that we can enable it when
533
+ ** we can drop support for the broken compilers
534
+ */
535
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_GET]= get_command_handler,
536
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_SET]= set_command_handler,
537
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_ADD]= add_command_handler,
538
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_REPLACE]= replace_command_handler,
539
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_DELETE]= delete_command_handler,
540
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_INCREMENT]= arithmetic_command_handler,
541
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_DECREMENT]= arithmetic_command_handler,
542
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_QUIT]= quit_command_handler,
543
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_FLUSH]= flush_command_handler,
544
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_GETQ]= get_command_handler,
545
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_NOOP]= noop_command_handler,
546
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_VERSION]= version_command_handler,
547
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_GETK]= get_command_handler,
548
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_GETKQ]= get_command_handler,
549
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_APPEND]= concat_command_handler,
550
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_PREPEND]= concat_command_handler,
551
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_STAT]= stat_command_handler,
552
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_SETQ]= set_command_handler,
553
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_ADDQ]= add_command_handler,
554
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_REPLACEQ]= replace_command_handler,
555
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_DELETEQ]= delete_command_handler,
556
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_INCREMENTQ]= arithmetic_command_handler,
557
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_DECREMENTQ]= arithmetic_command_handler,
558
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_QUITQ]= quit_command_handler,
559
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_FLUSHQ]= flush_command_handler,
560
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_APPENDQ]= concat_command_handler,
561
+ .interface.v0.comcode[PROTOCOL_BINARY_CMD_PREPENDQ]= concat_command_handler,
562
+ #endif
563
+ };
564
+
565
+ void initialize_interface_v0_handler(void)
566
+ {
567
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_GET]= get_command_handler;
568
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_SET]= set_command_handler;
569
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_ADD]= add_command_handler;
570
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_REPLACE]= replace_command_handler;
571
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_DELETE]= delete_command_handler;
572
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_INCREMENT]= arithmetic_command_handler;
573
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_DECREMENT]= arithmetic_command_handler;
574
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_QUIT]= quit_command_handler;
575
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_FLUSH]= flush_command_handler;
576
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_GETQ]= get_command_handler;
577
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_NOOP]= noop_command_handler;
578
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_VERSION]= version_command_handler;
579
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_GETK]= get_command_handler;
580
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_GETKQ]= get_command_handler;
581
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_APPEND]= concat_command_handler;
582
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_PREPEND]= concat_command_handler;
583
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_STAT]= stat_command_handler;
584
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_SETQ]= set_command_handler;
585
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_ADDQ]= add_command_handler;
586
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_REPLACEQ]= replace_command_handler;
587
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_DELETEQ]= delete_command_handler;
588
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_INCREMENTQ]= arithmetic_command_handler;
589
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_DECREMENTQ]= arithmetic_command_handler;
590
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_QUITQ]= quit_command_handler;
591
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_FLUSHQ]= flush_command_handler;
592
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_APPENDQ]= concat_command_handler;
593
+ interface_v0_impl.interface.v0.comcode[PROTOCOL_BINARY_CMD_PREPENDQ]= concat_command_handler;
594
+ }