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,88 @@
1
+ /* LibMemcached
2
+ * Copyright (C) 2006-2010 Brian Aker
3
+ * All rights reserved.
4
+ *
5
+ * Use and distribution licensed under the BSD license. See
6
+ * the COPYING file in the parent directory for full text.
7
+ *
8
+ * Summary:
9
+ *
10
+ */
11
+
12
+
13
+ #include <libmemcached/common.h>
14
+
15
+ memcached_server_list_st
16
+ memcached_server_list_append_with_weight(memcached_server_list_st ptr,
17
+ const char *hostname, in_port_t port,
18
+ uint32_t weight,
19
+ memcached_return_t *error)
20
+ {
21
+ uint32_t count;
22
+ memcached_server_list_st new_host_list;
23
+
24
+ if (hostname == NULL || error == NULL)
25
+ return NULL;
26
+
27
+ if (hostname[0] == '/')
28
+ port = 0;
29
+ else if (! port)
30
+ port= MEMCACHED_DEFAULT_PORT;
31
+
32
+ /* Increment count for hosts */
33
+ count= 1;
34
+ if (ptr != NULL)
35
+ {
36
+ count+= memcached_server_list_count(ptr);
37
+ }
38
+
39
+ new_host_list= (memcached_server_write_instance_st)realloc(ptr, sizeof(memcached_server_st) * count);
40
+ if (!new_host_list)
41
+ {
42
+ ptr->cached_errno= errno;
43
+ *error= MEMCACHED_MEMORY_ALLOCATION_FAILURE;
44
+ return NULL;
45
+ }
46
+
47
+ /* @todo Check return type */
48
+ if (not memcached_server_create_with(NULL, &new_host_list[count-1], hostname, port, weight, port ? MEMCACHED_CONNECTION_TCP : MEMCACHED_CONNECTION_UNIX_SOCKET))
49
+ {
50
+ ptr->cached_errno= errno;
51
+ *error= MEMCACHED_MEMORY_ALLOCATION_FAILURE;
52
+ return NULL;
53
+ }
54
+
55
+ // Handset allocated since
56
+ new_host_list->options.is_allocated= true;
57
+
58
+ /* Backwards compatibility hack */
59
+ memcached_servers_set_count(new_host_list, count);
60
+
61
+ *error= MEMCACHED_SUCCESS;
62
+ return new_host_list;
63
+ }
64
+
65
+ memcached_server_list_st
66
+ memcached_server_list_append(memcached_server_list_st ptr,
67
+ const char *hostname, in_port_t port,
68
+ memcached_return_t *error)
69
+ {
70
+ return memcached_server_list_append_with_weight(ptr, hostname, port, 0, error);
71
+ }
72
+
73
+ uint32_t memcached_server_list_count(const memcached_server_list_st self)
74
+ {
75
+ return (self == NULL)
76
+ ? 0
77
+ : self->number_of_hosts;
78
+ }
79
+
80
+ memcached_server_st *memcached_server_list(const memcached_st *self)
81
+ {
82
+ return self->servers;
83
+ }
84
+
85
+ void memcached_server_list_set(memcached_st *self, memcached_server_st *list)
86
+ {
87
+ self->servers= list;
88
+ }
@@ -0,0 +1,77 @@
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
+ #ifdef __cplusplus
42
+ extern "C" {
43
+ #endif
44
+
45
+ /* Server List Public functions */
46
+ LIBMEMCACHED_API
47
+ void memcached_server_list_free(memcached_server_list_st ptr);
48
+
49
+ LIBMEMCACHED_API
50
+ memcached_return_t memcached_server_push(memcached_st *ptr, const memcached_server_list_st list);
51
+
52
+ LIBMEMCACHED_API
53
+ memcached_server_list_st memcached_server_list_append(memcached_server_list_st ptr,
54
+ const char *hostname,
55
+ in_port_t port,
56
+ memcached_return_t *error);
57
+ LIBMEMCACHED_API
58
+ memcached_server_list_st memcached_server_list_append_with_weight(memcached_server_list_st ptr,
59
+ const char *hostname,
60
+ in_port_t port,
61
+ uint32_t weight,
62
+ memcached_return_t *error);
63
+ LIBMEMCACHED_API
64
+ uint32_t memcached_server_list_count(const memcached_server_list_st ptr);
65
+
66
+ LIBMEMCACHED_LOCAL
67
+ uint32_t memcached_servers_set_count(memcached_server_list_st servers, uint32_t count);
68
+
69
+ LIBMEMCACHED_LOCAL
70
+ memcached_server_st *memcached_server_list(const memcached_st *);
71
+
72
+ LIBMEMCACHED_LOCAL
73
+ void memcached_server_list_set(memcached_st *self, memcached_server_list_st list);
74
+
75
+ #ifdef __cplusplus
76
+ } // extern "C"
77
+ #endif
@@ -0,0 +1,623 @@
1
+ /*
2
+ */
3
+
4
+ #include "common.h"
5
+
6
+ static const char *memcached_stat_keys[] = {
7
+ "pid",
8
+ "uptime",
9
+ "time",
10
+ "version",
11
+ "pointer_size",
12
+ "rusage_user",
13
+ "rusage_system",
14
+ "curr_items",
15
+ "total_items",
16
+ "bytes",
17
+ "curr_connections",
18
+ "total_connections",
19
+ "connection_structures",
20
+ "cmd_get",
21
+ "cmd_set",
22
+ "get_hits",
23
+ "get_misses",
24
+ "evictions",
25
+ "bytes_read",
26
+ "bytes_written",
27
+ "limit_maxbytes",
28
+ "threads",
29
+ NULL
30
+ };
31
+
32
+ struct local_context
33
+ {
34
+ memcached_stat_fn func;
35
+ void *context;
36
+ const char *args;
37
+
38
+ local_context(memcached_stat_fn func_arg,
39
+ void *context_arg,
40
+ const char *args_arg) :
41
+ func(func_arg),
42
+ context(context_arg),
43
+ args(args_arg)
44
+ { }
45
+ };
46
+
47
+
48
+ static memcached_return_t set_data(memcached_stat_st *memc_stat, char *key, char *value)
49
+ {
50
+
51
+ if (strlen(key) < 1)
52
+ {
53
+ WATCHPOINT_STRING(key);
54
+ return MEMCACHED_UNKNOWN_STAT_KEY;
55
+ }
56
+ else if (not strcmp("pid", key))
57
+ {
58
+ memc_stat->pid= strtoul(value, (char **)NULL, 10);
59
+ }
60
+ else if (not strcmp("uptime", key))
61
+ {
62
+ memc_stat->uptime= strtoul(value, (char **)NULL, 10);
63
+ }
64
+ else if (not strcmp("time", key))
65
+ {
66
+ memc_stat->time= strtoul(value, (char **)NULL, 10);
67
+ }
68
+ else if (not strcmp("version", key))
69
+ {
70
+ memcpy(memc_stat->version, value, strlen(value));
71
+ memc_stat->version[strlen(value)]= 0;
72
+ }
73
+ else if (not strcmp("pointer_size", key))
74
+ {
75
+ memc_stat->pointer_size= strtoul(value, (char **)NULL, 10);
76
+ }
77
+ else if (not strcmp("rusage_user", key))
78
+ {
79
+ char *walk_ptr;
80
+ for (walk_ptr= value; (!ispunct(*walk_ptr)); walk_ptr++) {};
81
+ *walk_ptr= 0;
82
+ walk_ptr++;
83
+ memc_stat->rusage_user_seconds= strtoul(value, (char **)NULL, 10);
84
+ memc_stat->rusage_user_microseconds= strtoul(walk_ptr, (char **)NULL, 10);
85
+ }
86
+ else if (not strcmp("rusage_system", key))
87
+ {
88
+ char *walk_ptr;
89
+ for (walk_ptr= value; (!ispunct(*walk_ptr)); walk_ptr++) {};
90
+ *walk_ptr= 0;
91
+ walk_ptr++;
92
+ memc_stat->rusage_system_seconds= strtoul(value, (char **)NULL, 10);
93
+ memc_stat->rusage_system_microseconds= strtoul(walk_ptr, (char **)NULL, 10);
94
+ }
95
+ else if (not strcmp("curr_items", key))
96
+ {
97
+ memc_stat->curr_items= strtoul(value, (char **)NULL, 10);
98
+ }
99
+ else if (not strcmp("total_items", key))
100
+ {
101
+ memc_stat->total_items= strtoul(value, (char **)NULL, 10);
102
+ }
103
+ else if (not strcmp("bytes_read", key))
104
+ {
105
+ memc_stat->bytes_read= strtoull(value, (char **)NULL, 10);
106
+ }
107
+ else if (not strcmp("bytes_written", key))
108
+ {
109
+ memc_stat->bytes_written= strtoull(value, (char **)NULL, 10);
110
+ }
111
+ else if (not strcmp("bytes", key))
112
+ {
113
+ memc_stat->bytes= strtoull(value, (char **)NULL, 10);
114
+ }
115
+ else if (not strcmp("curr_connections", key))
116
+ {
117
+ memc_stat->curr_connections= strtoull(value, (char **)NULL, 10);
118
+ }
119
+ else if (not strcmp("total_connections", key))
120
+ {
121
+ memc_stat->total_connections= strtoull(value, (char **)NULL, 10);
122
+ }
123
+ else if (not strcmp("connection_structures", key))
124
+ {
125
+ memc_stat->connection_structures= strtoul(value, (char **)NULL, 10);
126
+ }
127
+ else if (not strcmp("cmd_get", key))
128
+ {
129
+ memc_stat->cmd_get= strtoull(value, (char **)NULL, 10);
130
+ }
131
+ else if (not strcmp("cmd_set", key))
132
+ {
133
+ memc_stat->cmd_set= strtoull(value, (char **)NULL, 10);
134
+ }
135
+ else if (not strcmp("get_hits", key))
136
+ {
137
+ memc_stat->get_hits= strtoull(value, (char **)NULL, 10);
138
+ }
139
+ else if (not strcmp("get_misses", key))
140
+ {
141
+ memc_stat->get_misses= strtoull(value, (char **)NULL, 10);
142
+ }
143
+ else if (not strcmp("evictions", key))
144
+ {
145
+ memc_stat->evictions= strtoull(value, (char **)NULL, 10);
146
+ }
147
+ else if (not strcmp("limit_maxbytes", key))
148
+ {
149
+ memc_stat->limit_maxbytes= strtoull(value, (char **)NULL, 10);
150
+ }
151
+ else if (not strcmp("threads", key))
152
+ {
153
+ memc_stat->threads= strtoul(value, (char **)NULL, 10);
154
+ }
155
+ else if (not (strcmp("delete_misses", key) == 0 or /* New stats in the 1.3 beta */
156
+ strcmp("delete_hits", key) == 0 or /* Just swallow them for now.. */
157
+ strcmp("incr_misses", key) == 0 or
158
+ strcmp("incr_hits", key) == 0 or
159
+ strcmp("decr_misses", key) == 0 or
160
+ strcmp("decr_hits", key) == 0 or
161
+ strcmp("cas_misses", key) == 0 or
162
+ strcmp("cas_hits", key) == 0 or
163
+ strcmp("cas_badval", key) == 0 or
164
+ strcmp("cmd_flush", key) == 0 or
165
+ strcmp("accepting_conns", key) == 0 or
166
+ strcmp("listen_disabled_num", key) == 0 or
167
+ strcmp("conn_yields", key) == 0 or
168
+ strcmp("auth_cmds", key) == 0 or
169
+ strcmp("auth_errors", key) == 0 or
170
+ strcmp("reclaimed", key) == 0))
171
+ {
172
+ WATCHPOINT_STRING(key);
173
+ /* return MEMCACHED_UNKNOWN_STAT_KEY; */
174
+ return MEMCACHED_SUCCESS;
175
+ }
176
+
177
+ return MEMCACHED_SUCCESS;
178
+ }
179
+
180
+ char *memcached_stat_get_value(const memcached_st *ptr, memcached_stat_st *memc_stat,
181
+ const char *key, memcached_return_t *error)
182
+ {
183
+ char buffer[SMALL_STRING_LEN];
184
+ int length;
185
+ char *ret;
186
+
187
+ *error= MEMCACHED_SUCCESS;
188
+
189
+ if (not memcmp("pid", key, sizeof("pid") -1))
190
+ {
191
+ length= snprintf(buffer, SMALL_STRING_LEN,"%lu", memc_stat->pid);
192
+ }
193
+ else if (not memcmp("uptime", key, sizeof("uptime") -1))
194
+ {
195
+ length= snprintf(buffer, SMALL_STRING_LEN,"%lu", memc_stat->uptime);
196
+ }
197
+ else if (not memcmp("time", key, sizeof("time") -1))
198
+ {
199
+ length= snprintf(buffer, SMALL_STRING_LEN,"%llu", (unsigned long long)memc_stat->time);
200
+ }
201
+ else if (not memcmp("version", key, sizeof("version") -1))
202
+ {
203
+ length= snprintf(buffer, SMALL_STRING_LEN,"%s", memc_stat->version);
204
+ }
205
+ else if (not memcmp("pointer_size", key, sizeof("pointer_size") -1))
206
+ {
207
+ length= snprintf(buffer, SMALL_STRING_LEN,"%lu", memc_stat->pointer_size);
208
+ }
209
+ else if (not memcmp("rusage_user", key, sizeof("rusage_user") -1))
210
+ {
211
+ length= snprintf(buffer, SMALL_STRING_LEN,"%lu.%lu", memc_stat->rusage_user_seconds, memc_stat->rusage_user_microseconds);
212
+ }
213
+ else if (not memcmp("rusage_system", key, sizeof("rusage_system") -1))
214
+ {
215
+ length= snprintf(buffer, SMALL_STRING_LEN,"%lu.%lu", memc_stat->rusage_system_seconds, memc_stat->rusage_system_microseconds);
216
+ }
217
+ else if (not memcmp("curr_items", key, sizeof("curr_items") -1))
218
+ {
219
+ length= snprintf(buffer, SMALL_STRING_LEN,"%lu", memc_stat->curr_items);
220
+ }
221
+ else if (not memcmp("total_items", key, sizeof("total_items") -1))
222
+ {
223
+ length= snprintf(buffer, SMALL_STRING_LEN,"%lu", memc_stat->total_items);
224
+ }
225
+ else if (not memcmp("curr_connections", key, sizeof("curr_connections") -1))
226
+ {
227
+ length= snprintf(buffer, SMALL_STRING_LEN,"%lu", memc_stat->curr_connections);
228
+ }
229
+ else if (not memcmp("total_connections", key, sizeof("total_connections") -1))
230
+ {
231
+ length= snprintf(buffer, SMALL_STRING_LEN,"%lu", memc_stat->total_connections);
232
+ }
233
+ else if (not memcmp("connection_structures", key, sizeof("connection_structures") -1))
234
+ {
235
+ length= snprintf(buffer, SMALL_STRING_LEN,"%lu", memc_stat->connection_structures);
236
+ }
237
+ else if (not memcmp("cmd_get", key, sizeof("cmd_get") -1))
238
+ {
239
+ length= snprintf(buffer, SMALL_STRING_LEN,"%llu", (unsigned long long)memc_stat->cmd_get);
240
+ }
241
+ else if (not memcmp("cmd_set", key, sizeof("cmd_set") -1))
242
+ {
243
+ length= snprintf(buffer, SMALL_STRING_LEN,"%llu", (unsigned long long)memc_stat->cmd_set);
244
+ }
245
+ else if (not memcmp("get_hits", key, sizeof("get_hits") -1))
246
+ {
247
+ length= snprintf(buffer, SMALL_STRING_LEN,"%llu", (unsigned long long)memc_stat->get_hits);
248
+ }
249
+ else if (not memcmp("get_misses", key, sizeof("get_misses") -1))
250
+ {
251
+ length= snprintf(buffer, SMALL_STRING_LEN,"%llu", (unsigned long long)memc_stat->get_misses);
252
+ }
253
+ else if (not memcmp("evictions", key, sizeof("evictions") -1))
254
+ {
255
+ length= snprintf(buffer, SMALL_STRING_LEN,"%llu", (unsigned long long)memc_stat->evictions);
256
+ }
257
+ else if (not memcmp("bytes_read", key, sizeof("bytes_read") -1))
258
+ {
259
+ length= snprintf(buffer, SMALL_STRING_LEN,"%llu", (unsigned long long)memc_stat->bytes_read);
260
+ }
261
+ else if (not memcmp("bytes_written", key, sizeof("bytes_written") -1))
262
+ {
263
+ length= snprintf(buffer, SMALL_STRING_LEN,"%llu", (unsigned long long)memc_stat->bytes_written);
264
+ }
265
+ else if (not memcmp("bytes", key, sizeof("bytes") -1))
266
+ {
267
+ length= snprintf(buffer, SMALL_STRING_LEN,"%llu", (unsigned long long)memc_stat->bytes);
268
+ }
269
+ else if (not memcmp("limit_maxbytes", key, sizeof("limit_maxbytes") -1))
270
+ {
271
+ length= snprintf(buffer, SMALL_STRING_LEN,"%llu", (unsigned long long)memc_stat->limit_maxbytes);
272
+ }
273
+ else if (not memcmp("threads", key, sizeof("threads") -1))
274
+ {
275
+ length= snprintf(buffer, SMALL_STRING_LEN,"%lu", memc_stat->threads);
276
+ }
277
+ else
278
+ {
279
+ *error= MEMCACHED_NOTFOUND;
280
+ return NULL;
281
+ }
282
+
283
+ if (length >= SMALL_STRING_LEN || length < 0)
284
+ {
285
+ *error= MEMCACHED_FAILURE;
286
+ return NULL;
287
+ }
288
+
289
+ ret= static_cast<char *>(libmemcached_malloc(ptr, (size_t) (length + 1)));
290
+ memcpy(ret, buffer, (size_t) length);
291
+ ret[length]= '\0';
292
+
293
+ return ret;
294
+ }
295
+
296
+ static memcached_return_t binary_stats_fetch(memcached_stat_st *memc_stat,
297
+ const char *args,
298
+ memcached_server_write_instance_st instance,
299
+ struct local_context *check)
300
+ {
301
+ char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
302
+ protocol_binary_request_stats request= {}; // = {.bytes= {0}};
303
+ request.message.header.request.magic= PROTOCOL_BINARY_REQ;
304
+ request.message.header.request.opcode= PROTOCOL_BINARY_CMD_STAT;
305
+ request.message.header.request.datatype= PROTOCOL_BINARY_RAW_BYTES;
306
+
307
+ if (args)
308
+ {
309
+ size_t len= strlen(args);
310
+
311
+ memcached_return_t rc= memcached_validate_key_length(len, true);
312
+ unlikely (rc != MEMCACHED_SUCCESS)
313
+ return rc;
314
+
315
+ request.message.header.request.keylen= htons((uint16_t)len);
316
+ request.message.header.request.bodylen= htonl((uint32_t) len);
317
+
318
+ struct libmemcached_io_vector_st vector[]=
319
+ {
320
+ { sizeof(request.bytes), request.bytes },
321
+ { len, args }
322
+ };
323
+
324
+ if (memcached_vdo(instance, vector, 2, true) != MEMCACHED_SUCCESS)
325
+ {
326
+ memcached_io_reset(instance);
327
+ return MEMCACHED_WRITE_FAILURE;
328
+ }
329
+ }
330
+ else
331
+ {
332
+ if (memcached_do(instance, request.bytes,
333
+ sizeof(request.bytes), true) != MEMCACHED_SUCCESS)
334
+ {
335
+ memcached_io_reset(instance);
336
+ return MEMCACHED_WRITE_FAILURE;
337
+ }
338
+ }
339
+
340
+ memcached_server_response_decrement(instance);
341
+ do
342
+ {
343
+ memcached_return_t rc= memcached_response(instance, buffer, sizeof(buffer), NULL);
344
+
345
+ if (rc == MEMCACHED_END)
346
+ break;
347
+
348
+ unlikely (rc != MEMCACHED_SUCCESS)
349
+ {
350
+ memcached_io_reset(instance);
351
+ return rc;
352
+ }
353
+
354
+ if (memc_stat)
355
+ {
356
+ unlikely((set_data(memc_stat, buffer, buffer + strlen(buffer) + 1)) == MEMCACHED_UNKNOWN_STAT_KEY)
357
+ {
358
+ WATCHPOINT_ERROR(MEMCACHED_UNKNOWN_STAT_KEY);
359
+ WATCHPOINT_ASSERT(0);
360
+ }
361
+ }
362
+
363
+ if (check && check->func)
364
+ {
365
+ size_t key_length= strlen(buffer);
366
+
367
+ check->func(instance,
368
+ buffer, key_length,
369
+ buffer+key_length+1, strlen(buffer+key_length+1),
370
+ check->context);
371
+ }
372
+ } while (1);
373
+
374
+ /* shit... memcached_response will decrement the counter, so I need to
375
+ ** reset it.. todo: look at this and try to find a better solution.
376
+ */
377
+ instance->cursor_active= 0;
378
+
379
+ return MEMCACHED_SUCCESS;
380
+ }
381
+
382
+ static memcached_return_t ascii_stats_fetch(memcached_stat_st *memc_stat,
383
+ const char *args,
384
+ memcached_server_write_instance_st instance,
385
+ struct local_context *check)
386
+ {
387
+ memcached_return_t rc;
388
+ char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
389
+ int send_length;
390
+
391
+ if (args)
392
+ send_length= (size_t) snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE,
393
+ "stats %s\r\n", args);
394
+ else
395
+ send_length= (size_t) snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE,
396
+ "stats\r\n");
397
+
398
+ if (send_length >= MEMCACHED_DEFAULT_COMMAND_SIZE || send_length < 0)
399
+ return MEMCACHED_WRITE_FAILURE;
400
+
401
+ rc= memcached_do(instance, buffer, (size_t)send_length, true);
402
+ if (rc != MEMCACHED_SUCCESS)
403
+ goto error;
404
+
405
+ while (1)
406
+ {
407
+ rc= memcached_response(instance, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL);
408
+
409
+ if (rc == MEMCACHED_STAT)
410
+ {
411
+ char *string_ptr, *end_ptr;
412
+ char *key, *value;
413
+
414
+ string_ptr= buffer;
415
+ string_ptr+= 5; /* Move past STAT */
416
+ for (end_ptr= string_ptr; isgraph(*end_ptr); end_ptr++) {};
417
+ key= string_ptr;
418
+ key[(size_t)(end_ptr-string_ptr)]= 0;
419
+
420
+ string_ptr= end_ptr + 1;
421
+ for (end_ptr= string_ptr; !(isspace(*end_ptr)); end_ptr++) {};
422
+ value= string_ptr;
423
+ value[(size_t)(end_ptr-string_ptr)]= 0;
424
+ string_ptr= end_ptr + 2;
425
+ if (memc_stat)
426
+ {
427
+ unlikely((set_data(memc_stat, key, value)) == MEMCACHED_UNKNOWN_STAT_KEY)
428
+ {
429
+ WATCHPOINT_ERROR(MEMCACHED_UNKNOWN_STAT_KEY);
430
+ WATCHPOINT_ASSERT(0);
431
+ }
432
+ }
433
+
434
+ if (check && check->func)
435
+ {
436
+ check->func(instance,
437
+ key, strlen(key),
438
+ value, strlen(value),
439
+ check->context);
440
+ }
441
+ }
442
+ else
443
+ {
444
+ break;
445
+ }
446
+ }
447
+
448
+ error:
449
+ if (rc == MEMCACHED_END)
450
+ return MEMCACHED_SUCCESS;
451
+ else
452
+ return rc;
453
+ }
454
+
455
+ memcached_stat_st *memcached_stat(memcached_st *self, char *args, memcached_return_t *error)
456
+ {
457
+ memcached_return_t rc;
458
+ if ((rc= initialize_query(self)) != MEMCACHED_SUCCESS)
459
+ {
460
+ if (error)
461
+ *error= rc;
462
+
463
+ return NULL;
464
+ }
465
+
466
+ WATCHPOINT_ASSERT(error);
467
+
468
+ unlikely (self->flags.use_udp)
469
+ {
470
+ if (error)
471
+ *error= MEMCACHED_NOT_SUPPORTED;
472
+
473
+ return NULL;
474
+ }
475
+
476
+ memcached_stat_st *stats= static_cast<memcached_stat_st *>(libmemcached_calloc(self, memcached_server_count(self), sizeof(memcached_stat_st)));
477
+
478
+ if (not stats)
479
+ {
480
+ if (error)
481
+ *error= MEMCACHED_MEMORY_ALLOCATION_FAILURE;
482
+
483
+ return NULL;
484
+ }
485
+
486
+ WATCHPOINT_ASSERT(rc == MEMCACHED_SUCCESS);
487
+ rc= MEMCACHED_SUCCESS;
488
+ for (uint32_t x= 0; x < memcached_server_count(self); x++)
489
+ {
490
+ memcached_return_t temp_return;
491
+ memcached_server_write_instance_st instance;
492
+ memcached_stat_st *stat_instance;
493
+
494
+ stat_instance= stats +x;
495
+
496
+ stat_instance->root= self;
497
+
498
+ instance= memcached_server_instance_fetch(self, x);
499
+
500
+ if (self->flags.binary_protocol)
501
+ {
502
+ temp_return= binary_stats_fetch(stat_instance, args, instance, NULL);
503
+ }
504
+ else
505
+ {
506
+ temp_return= ascii_stats_fetch(stat_instance, args, instance, NULL);
507
+ }
508
+
509
+ if (temp_return != MEMCACHED_SUCCESS)
510
+ rc= MEMCACHED_SOME_ERRORS;
511
+ }
512
+
513
+ if (error)
514
+ *error= rc;
515
+
516
+ return stats;
517
+ }
518
+
519
+ memcached_return_t memcached_stat_servername(memcached_stat_st *memc_stat, char *args,
520
+ const char *hostname, in_port_t port)
521
+ {
522
+ memcached_st memc;
523
+ memcached_server_write_instance_st instance;
524
+
525
+ memset(memc_stat, 0, sizeof(memcached_stat_st));
526
+
527
+ memcached_st *memc_ptr= memcached_create(&memc);
528
+ if (not memc_ptr)
529
+ return MEMCACHED_MEMORY_ALLOCATION_FAILURE;
530
+
531
+ memcached_server_add(&memc, hostname, port);
532
+
533
+ memcached_return_t rc;
534
+ if ((rc= initialize_query(memc_ptr)) != MEMCACHED_SUCCESS)
535
+ {
536
+ return rc;
537
+ }
538
+
539
+ instance= memcached_server_instance_fetch(memc_ptr, 0);
540
+
541
+ if (memc.flags.binary_protocol)
542
+ {
543
+ rc= binary_stats_fetch(memc_stat, args, instance, NULL);
544
+ }
545
+ else
546
+ {
547
+ rc= ascii_stats_fetch(memc_stat, args, instance, NULL);
548
+ }
549
+
550
+ memcached_free(&memc);
551
+
552
+ return rc;
553
+ }
554
+
555
+ /*
556
+ We make a copy of the keys since at some point in the not so distant future
557
+ we will add support for "found" keys.
558
+ */
559
+ char ** memcached_stat_get_keys(memcached_st *ptr,
560
+ memcached_stat_st *,
561
+ memcached_return_t *error)
562
+ {
563
+ if (not ptr)
564
+ return NULL;
565
+
566
+ char **list= static_cast<char **>(libmemcached_malloc(ptr, sizeof(memcached_stat_keys)));
567
+ if (not list)
568
+ {
569
+ *error= memcached_set_error(*ptr, MEMCACHED_MEMORY_ALLOCATION_FAILURE, MEMCACHED_AT);
570
+ return NULL;
571
+ }
572
+
573
+ memcpy(list, memcached_stat_keys, sizeof(memcached_stat_keys));
574
+
575
+ *error= MEMCACHED_SUCCESS;
576
+
577
+ return list;
578
+ }
579
+
580
+ void memcached_stat_free(const memcached_st *, memcached_stat_st *memc_stat)
581
+ {
582
+ WATCHPOINT_ASSERT(memc_stat); // Be polite, but when debugging catch this as an error
583
+ if (not memc_stat)
584
+ {
585
+ return;
586
+ }
587
+
588
+ if (memc_stat->root)
589
+ {
590
+ libmemcached_free(memc_stat->root, memc_stat);
591
+ return;
592
+ }
593
+
594
+ libmemcached_free(NULL, memc_stat);
595
+ }
596
+
597
+ static memcached_return_t call_stat_fn(memcached_st *ptr,
598
+ memcached_server_write_instance_st instance,
599
+ void *context)
600
+ {
601
+ memcached_return_t rc;
602
+ struct local_context *check= (struct local_context *)context;
603
+
604
+ if (ptr->flags.binary_protocol)
605
+ {
606
+ rc= binary_stats_fetch(NULL, check->args, instance, check);
607
+ }
608
+ else
609
+ {
610
+ rc= ascii_stats_fetch(NULL, check->args, instance, check);
611
+ }
612
+
613
+ return rc;
614
+ }
615
+
616
+ memcached_return_t memcached_stat_execute(memcached_st *memc, const char *args, memcached_stat_fn func, void *context)
617
+ {
618
+ memcached_version(memc);
619
+
620
+ struct local_context check(func, context, args);
621
+
622
+ return memcached_server_execute(memc, call_stat_fn, (void *)&check);
623
+ }