libcouchbase 0.0.1

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 (561) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +1 -0
  5. data/.travis.yml +35 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +24 -0
  8. data/README.md +389 -0
  9. data/Rakefile +75 -0
  10. data/ext/README.md +6 -0
  11. data/ext/Rakefile +20 -0
  12. data/ext/libcouchbase/.gitignore +130 -0
  13. data/ext/libcouchbase/.travis.yml +19 -0
  14. data/ext/libcouchbase/CMakeLists.txt +429 -0
  15. data/ext/libcouchbase/CONTRIBUTING.md +124 -0
  16. data/ext/libcouchbase/LICENSE +202 -0
  17. data/ext/libcouchbase/README.markdown +163 -0
  18. data/ext/libcouchbase/RELEASE_NOTES.markdown +2691 -0
  19. data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +27 -0
  20. data/ext/libcouchbase/cmake/Modules/CopyPDB.cmake +42 -0
  21. data/ext/libcouchbase/cmake/Modules/DistScript.cmake +17 -0
  22. data/ext/libcouchbase/cmake/Modules/DownloadLcbDep.cmake +20 -0
  23. data/ext/libcouchbase/cmake/Modules/FindCouchbaseHdrHistogram.cmake +15 -0
  24. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibev.cmake +73 -0
  25. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibevent.cmake +52 -0
  26. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibuv.cmake +56 -0
  27. data/ext/libcouchbase/cmake/Modules/FindCouchbaseSnappy.cmake +11 -0
  28. data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +29 -0
  29. data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +133 -0
  30. data/ext/libcouchbase/cmake/Modules/GetPlatformCCInfo.cmake +45 -0
  31. data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +70 -0
  32. data/ext/libcouchbase/cmake/config-cmake.h.in +60 -0
  33. data/ext/libcouchbase/cmake/configure +357 -0
  34. data/ext/libcouchbase/cmake/defs.mk.in +8 -0
  35. data/ext/libcouchbase/cmake/dtrace-instr-link.pl +38 -0
  36. data/ext/libcouchbase/cmake/source_files.cmake +73 -0
  37. data/ext/libcouchbase/configure.pl +1 -0
  38. data/ext/libcouchbase/contrib/cJSON/cJSON.c +624 -0
  39. data/ext/libcouchbase/contrib/cJSON/cJSON.h +158 -0
  40. data/ext/libcouchbase/contrib/cbsasl/CMakeLists.txt +9 -0
  41. data/ext/libcouchbase/contrib/cbsasl/COPYING +202 -0
  42. data/ext/libcouchbase/contrib/cbsasl/include/cbsasl/cbsasl.h +217 -0
  43. data/ext/libcouchbase/contrib/cbsasl/src/client.c +205 -0
  44. data/ext/libcouchbase/contrib/cbsasl/src/common.c +46 -0
  45. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.c +67 -0
  46. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.h +33 -0
  47. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.c +296 -0
  48. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.h +45 -0
  49. data/ext/libcouchbase/contrib/cbsasl/src/hash.c +573 -0
  50. data/ext/libcouchbase/contrib/cbsasl/src/hash.h +15 -0
  51. data/ext/libcouchbase/contrib/cbsasl/src/util.h +31 -0
  52. data/ext/libcouchbase/contrib/cliopts/CMakeLists.txt +2 -0
  53. data/ext/libcouchbase/contrib/cliopts/cliopts.c +747 -0
  54. data/ext/libcouchbase/contrib/cliopts/cliopts.h +493 -0
  55. data/ext/libcouchbase/contrib/genhash/genhash.c +372 -0
  56. data/ext/libcouchbase/contrib/genhash/genhash.h +235 -0
  57. data/ext/libcouchbase/contrib/gtest-1.7.0/CHANGES +157 -0
  58. data/ext/libcouchbase/contrib/gtest-1.7.0/CMakeLists.txt +252 -0
  59. data/ext/libcouchbase/contrib/gtest-1.7.0/CONTRIBUTORS +37 -0
  60. data/ext/libcouchbase/contrib/gtest-1.7.0/LICENSE +28 -0
  61. data/ext/libcouchbase/contrib/gtest-1.7.0/MINIFY.sh +15 -0
  62. data/ext/libcouchbase/contrib/gtest-1.7.0/README +435 -0
  63. data/ext/libcouchbase/contrib/gtest-1.7.0/cmake/internal_utils.cmake +227 -0
  64. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-death-test.h +294 -0
  65. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-message.h +250 -0
  66. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h +1421 -0
  67. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h.pump +487 -0
  68. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-printers.h +855 -0
  69. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-spi.h +232 -0
  70. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-test-part.h +179 -0
  71. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-typed-test.h +259 -0
  72. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest.h +2291 -0
  73. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_pred_impl.h +358 -0
  74. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_prod.h +58 -0
  75. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-death-test-internal.h +319 -0
  76. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-filepath.h +206 -0
  77. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-internal.h +1158 -0
  78. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-linked_ptr.h +233 -0
  79. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h +5143 -0
  80. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h.pump +301 -0
  81. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util.h +619 -0
  82. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-port.h +1947 -0
  83. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-string.h +167 -0
  84. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h +1012 -0
  85. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h.pump +339 -0
  86. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h +3331 -0
  87. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h.pump +297 -0
  88. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-all.cc +48 -0
  89. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-death-test.cc +1344 -0
  90. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-filepath.cc +382 -0
  91. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-internal-inl.h +1218 -0
  92. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-port.cc +805 -0
  93. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-printers.cc +363 -0
  94. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-test-part.cc +110 -0
  95. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-typed-test.cc +110 -0
  96. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest.cc +5015 -0
  97. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest_main.cc +38 -0
  98. data/ext/libcouchbase/contrib/http_parser/LICENSE-MIT +23 -0
  99. data/ext/libcouchbase/contrib/http_parser/README.md +178 -0
  100. data/ext/libcouchbase/contrib/http_parser/http_parser.c +2060 -0
  101. data/ext/libcouchbase/contrib/http_parser/http_parser.h +321 -0
  102. data/ext/libcouchbase/contrib/jsonsl/LICENSE +20 -0
  103. data/ext/libcouchbase/contrib/jsonsl/jsonsl.c +1452 -0
  104. data/ext/libcouchbase/contrib/jsonsl/jsonsl.h +971 -0
  105. data/ext/libcouchbase/contrib/lcb-jsoncpp/CMakeLists.txt +6 -0
  106. data/ext/libcouchbase/contrib/lcb-jsoncpp/LICENSE +55 -0
  107. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp-forwards.h +255 -0
  108. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.cpp +4892 -0
  109. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.h +1961 -0
  110. data/ext/libcouchbase/contrib/snappy/CMakeLists.txt +8 -0
  111. data/ext/libcouchbase/contrib/snappy/COPYING +28 -0
  112. data/ext/libcouchbase/contrib/snappy/snappy-c.cc +90 -0
  113. data/ext/libcouchbase/contrib/snappy/snappy-c.h +138 -0
  114. data/ext/libcouchbase/contrib/snappy/snappy-internal.h +150 -0
  115. data/ext/libcouchbase/contrib/snappy/snappy-lcb-msvc.h +5 -0
  116. data/ext/libcouchbase/contrib/snappy/snappy-sinksource.cc +71 -0
  117. data/ext/libcouchbase/contrib/snappy/snappy-sinksource.h +137 -0
  118. data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.cc +42 -0
  119. data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.h +491 -0
  120. data/ext/libcouchbase/contrib/snappy/snappy-stubs-public.h +98 -0
  121. data/ext/libcouchbase/contrib/snappy/snappy.cc +1307 -0
  122. data/ext/libcouchbase/contrib/snappy/snappy.h +184 -0
  123. data/ext/libcouchbase/contrib/win32-defs/iocpdefs.h +133 -0
  124. data/ext/libcouchbase/contrib/win32-defs/mingwdefs.h +4396 -0
  125. data/ext/libcouchbase/contrib/win32-defs/win_stdint.h +258 -0
  126. data/ext/libcouchbase/example/CMakeLists.txt +37 -0
  127. data/ext/libcouchbase/example/README.markdown +47 -0
  128. data/ext/libcouchbase/example/db/db.c +167 -0
  129. data/ext/libcouchbase/example/db/vb.c +227 -0
  130. data/ext/libcouchbase/example/instancepool/main.cc +102 -0
  131. data/ext/libcouchbase/example/instancepool/pool.cc +102 -0
  132. data/ext/libcouchbase/example/instancepool/pool.h +69 -0
  133. data/ext/libcouchbase/example/libeventdirect/main.c +148 -0
  134. data/ext/libcouchbase/example/mcc/mcc.cc +246 -0
  135. data/ext/libcouchbase/example/minimal/minimal.c +130 -0
  136. data/ext/libcouchbase/example/observe/observe.c +146 -0
  137. data/ext/libcouchbase/example/subdoc/subdoc-multi.cc +132 -0
  138. data/ext/libcouchbase/example/subdoc/subdoc-simple.cc +191 -0
  139. data/ext/libcouchbase/example/tick/tick.c +119 -0
  140. data/ext/libcouchbase/example/views/views-example.cc +83 -0
  141. data/ext/libcouchbase/include/libcouchbase/_cxxwrap.h +150 -0
  142. data/ext/libcouchbase/include/libcouchbase/api-legacy.h +1689 -0
  143. data/ext/libcouchbase/include/libcouchbase/api3.h +2 -0
  144. data/ext/libcouchbase/include/libcouchbase/assert.h +44 -0
  145. data/ext/libcouchbase/include/libcouchbase/cbft.h +109 -0
  146. data/ext/libcouchbase/include/libcouchbase/cntl-private.h +356 -0
  147. data/ext/libcouchbase/include/libcouchbase/cntl.h +937 -0
  148. data/ext/libcouchbase/include/libcouchbase/configuration.h.in +23 -0
  149. data/ext/libcouchbase/include/libcouchbase/couchbase.h +3677 -0
  150. data/ext/libcouchbase/include/libcouchbase/deprecated.h +300 -0
  151. data/ext/libcouchbase/include/libcouchbase/error.h +595 -0
  152. data/ext/libcouchbase/include/libcouchbase/http.h +1 -0
  153. data/ext/libcouchbase/include/libcouchbase/iops.h +1050 -0
  154. data/ext/libcouchbase/include/libcouchbase/ixmgmt.h +263 -0
  155. data/ext/libcouchbase/include/libcouchbase/kvbuf.h +132 -0
  156. data/ext/libcouchbase/include/libcouchbase/n1ql.h +364 -0
  157. data/ext/libcouchbase/include/libcouchbase/pktfwd.h +270 -0
  158. data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +367 -0
  159. data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr-inl.c +76 -0
  160. data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr.h +199 -0
  161. data/ext/libcouchbase/include/libcouchbase/subdoc.h +312 -0
  162. data/ext/libcouchbase/include/libcouchbase/sysdefs.h +98 -0
  163. data/ext/libcouchbase/include/libcouchbase/vbucket.h +643 -0
  164. data/ext/libcouchbase/include/libcouchbase/views.h +298 -0
  165. data/ext/libcouchbase/include/libcouchbase/visibility.h +65 -0
  166. data/ext/libcouchbase/include/memcached/COPYING +30 -0
  167. data/ext/libcouchbase/include/memcached/README +10 -0
  168. data/ext/libcouchbase/include/memcached/protocol_binary.h +1916 -0
  169. data/ext/libcouchbase/include/memcached/vbucket.h +42 -0
  170. data/ext/libcouchbase/packaging/README +7 -0
  171. data/ext/libcouchbase/packaging/abicheck/.gitignore +4 -0
  172. data/ext/libcouchbase/packaging/abicheck/Makefile +17 -0
  173. data/ext/libcouchbase/packaging/abicheck/README.md +27 -0
  174. data/ext/libcouchbase/packaging/abicheck/template.xml +3 -0
  175. data/ext/libcouchbase/packaging/deb/compat +1 -0
  176. data/ext/libcouchbase/packaging/deb/control +73 -0
  177. data/ext/libcouchbase/packaging/deb/copyright +10 -0
  178. data/ext/libcouchbase/packaging/deb/libcouchbase-dev.docs +3 -0
  179. data/ext/libcouchbase/packaging/deb/package.mk +31 -0
  180. data/ext/libcouchbase/packaging/deb/rules +46 -0
  181. data/ext/libcouchbase/packaging/deb/source/format +1 -0
  182. data/ext/libcouchbase/packaging/distinfo/README +1 -0
  183. data/ext/libcouchbase/packaging/distinfo/distinfo.cmake.in +4 -0
  184. data/ext/libcouchbase/packaging/dllversion.rc.in +39 -0
  185. data/ext/libcouchbase/packaging/libcouchbase.pc.in +10 -0
  186. data/ext/libcouchbase/packaging/nuget/libcouchbase.autopkg +76 -0
  187. data/ext/libcouchbase/packaging/parse-git-describe.pl +166 -0
  188. data/ext/libcouchbase/packaging/rpm/libcouchbase.spec.in +108 -0
  189. data/ext/libcouchbase/packaging/rpm/package.mk +40 -0
  190. data/ext/libcouchbase/plugins/io/iocp/CMakeLists.txt +9 -0
  191. data/ext/libcouchbase/plugins/io/iocp/iocp_iops.c +466 -0
  192. data/ext/libcouchbase/plugins/io/iocp/iocp_iops.h +217 -0
  193. data/ext/libcouchbase/plugins/io/iocp/iocp_loop.c +295 -0
  194. data/ext/libcouchbase/plugins/io/iocp/iocp_timer.c +79 -0
  195. data/ext/libcouchbase/plugins/io/iocp/iocp_util.c +229 -0
  196. data/ext/libcouchbase/plugins/io/libev/CMakeLists.txt +29 -0
  197. data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +65 -0
  198. data/ext/libcouchbase/plugins/io/libev/plugin-libev.c +289 -0
  199. data/ext/libcouchbase/plugins/io/libevent/CMakeLists.txt +29 -0
  200. data/ext/libcouchbase/plugins/io/libevent/libevent_io_opts.h +67 -0
  201. data/ext/libcouchbase/plugins/io/libevent/plugin-libevent.c +292 -0
  202. data/ext/libcouchbase/plugins/io/libuv/CMakeLists.txt +42 -0
  203. data/ext/libcouchbase/plugins/io/libuv/libuv_compat.h +212 -0
  204. data/ext/libcouchbase/plugins/io/libuv/libuv_io_opts.h +118 -0
  205. data/ext/libcouchbase/plugins/io/libuv/plugin-internal.h +148 -0
  206. data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +648 -0
  207. data/ext/libcouchbase/plugins/io/select/CMakeLists.txt +11 -0
  208. data/ext/libcouchbase/plugins/io/select/plugin-select.c +448 -0
  209. data/ext/libcouchbase/plugins/io/select/select_io_opts.h +39 -0
  210. data/ext/libcouchbase/src/README.md +103 -0
  211. data/ext/libcouchbase/src/aspend.h +106 -0
  212. data/ext/libcouchbase/src/auth.cc +74 -0
  213. data/ext/libcouchbase/src/auth.h +54 -0
  214. data/ext/libcouchbase/src/bootstrap.c +269 -0
  215. data/ext/libcouchbase/src/bootstrap.h +129 -0
  216. data/ext/libcouchbase/src/bucketconfig/bc_cccp.c +495 -0
  217. data/ext/libcouchbase/src/bucketconfig/bc_file.c +347 -0
  218. data/ext/libcouchbase/src/bucketconfig/bc_http.c +630 -0
  219. data/ext/libcouchbase/src/bucketconfig/bc_http.h +82 -0
  220. data/ext/libcouchbase/src/bucketconfig/bc_mcraw.c +150 -0
  221. data/ext/libcouchbase/src/bucketconfig/clconfig.h +681 -0
  222. data/ext/libcouchbase/src/bucketconfig/confmon.c +474 -0
  223. data/ext/libcouchbase/src/callbacks.c +378 -0
  224. data/ext/libcouchbase/src/cbft.cc +210 -0
  225. data/ext/libcouchbase/src/cntl.cc +847 -0
  226. data/ext/libcouchbase/src/config_static.h +159 -0
  227. data/ext/libcouchbase/src/connspec.cc +462 -0
  228. data/ext/libcouchbase/src/connspec.h +105 -0
  229. data/ext/libcouchbase/src/ctx-log-inl.h +27 -0
  230. data/ext/libcouchbase/src/dump.c +98 -0
  231. data/ext/libcouchbase/src/getconfig.c +100 -0
  232. data/ext/libcouchbase/src/gethrtime.c +109 -0
  233. data/ext/libcouchbase/src/handler.c +922 -0
  234. data/ext/libcouchbase/src/hashset.c +164 -0
  235. data/ext/libcouchbase/src/hashset.h +86 -0
  236. data/ext/libcouchbase/src/hashtable.c +75 -0
  237. data/ext/libcouchbase/src/hdr_timings.c +92 -0
  238. data/ext/libcouchbase/src/hostlist.cc +301 -0
  239. data/ext/libcouchbase/src/hostlist.h +171 -0
  240. data/ext/libcouchbase/src/http/http-priv.h +307 -0
  241. data/ext/libcouchbase/src/http/http.cc +633 -0
  242. data/ext/libcouchbase/src/http/http.h +34 -0
  243. data/ext/libcouchbase/src/http/http_io.cc +307 -0
  244. data/ext/libcouchbase/src/instance.cc +722 -0
  245. data/ext/libcouchbase/src/internal.h +244 -0
  246. data/ext/libcouchbase/src/iofactory.c +575 -0
  247. data/ext/libcouchbase/src/jsparse/parser.cc +519 -0
  248. data/ext/libcouchbase/src/jsparse/parser.h +173 -0
  249. data/ext/libcouchbase/src/lcbht/lcbht.c +282 -0
  250. data/ext/libcouchbase/src/lcbht/lcbht.h +199 -0
  251. data/ext/libcouchbase/src/lcbio/connect.c +557 -0
  252. data/ext/libcouchbase/src/lcbio/connect.h +364 -0
  253. data/ext/libcouchbase/src/lcbio/ctx.c +611 -0
  254. data/ext/libcouchbase/src/lcbio/ctx.h +405 -0
  255. data/ext/libcouchbase/src/lcbio/iotable.c +290 -0
  256. data/ext/libcouchbase/src/lcbio/iotable.h +84 -0
  257. data/ext/libcouchbase/src/lcbio/ioutils.c +350 -0
  258. data/ext/libcouchbase/src/lcbio/ioutils.h +203 -0
  259. data/ext/libcouchbase/src/lcbio/lcbio.h +51 -0
  260. data/ext/libcouchbase/src/lcbio/manager.c +584 -0
  261. data/ext/libcouchbase/src/lcbio/manager.h +156 -0
  262. data/ext/libcouchbase/src/lcbio/protoctx.c +84 -0
  263. data/ext/libcouchbase/src/lcbio/rw-inl.h +115 -0
  264. data/ext/libcouchbase/src/lcbio/ssl.h +149 -0
  265. data/ext/libcouchbase/src/lcbio/timer-ng.h +179 -0
  266. data/ext/libcouchbase/src/lcbio/timer.c +132 -0
  267. data/ext/libcouchbase/src/legacy.c +430 -0
  268. data/ext/libcouchbase/src/list.c +144 -0
  269. data/ext/libcouchbase/src/list.h +127 -0
  270. data/ext/libcouchbase/src/logging.c +244 -0
  271. data/ext/libcouchbase/src/logging.h +86 -0
  272. data/ext/libcouchbase/src/mc/compress.c +90 -0
  273. data/ext/libcouchbase/src/mc/compress.h +61 -0
  274. data/ext/libcouchbase/src/mc/forward.c +186 -0
  275. data/ext/libcouchbase/src/mc/forward.h +90 -0
  276. data/ext/libcouchbase/src/mc/iovcursor-inl.h +279 -0
  277. data/ext/libcouchbase/src/mc/iovcursor.h +66 -0
  278. data/ext/libcouchbase/src/mc/mcreq-flush-inl.h +111 -0
  279. data/ext/libcouchbase/src/mc/mcreq.c +954 -0
  280. data/ext/libcouchbase/src/mc/mcreq.h +977 -0
  281. data/ext/libcouchbase/src/mcserver/mcserver.c +784 -0
  282. data/ext/libcouchbase/src/mcserver/mcserver.h +121 -0
  283. data/ext/libcouchbase/src/mcserver/negotiate.c +656 -0
  284. data/ext/libcouchbase/src/mcserver/negotiate.h +119 -0
  285. data/ext/libcouchbase/src/n1ql/ixmgmt.cc +860 -0
  286. data/ext/libcouchbase/src/n1ql/n1ql-internal.h +22 -0
  287. data/ext/libcouchbase/src/n1ql/n1ql.cc +729 -0
  288. data/ext/libcouchbase/src/n1ql/params.cc +215 -0
  289. data/ext/libcouchbase/src/netbuf/netbuf-defs.h +89 -0
  290. data/ext/libcouchbase/src/netbuf/netbuf-mblock.h +235 -0
  291. data/ext/libcouchbase/src/netbuf/netbuf.c +929 -0
  292. data/ext/libcouchbase/src/netbuf/netbuf.h +452 -0
  293. data/ext/libcouchbase/src/newconfig.c +385 -0
  294. data/ext/libcouchbase/src/nodeinfo.cc +194 -0
  295. data/ext/libcouchbase/src/operations/cbflush.c +71 -0
  296. data/ext/libcouchbase/src/operations/counter.c +116 -0
  297. data/ext/libcouchbase/src/operations/durability-cas.c +224 -0
  298. data/ext/libcouchbase/src/operations/durability-seqno.c +157 -0
  299. data/ext/libcouchbase/src/operations/durability.c +668 -0
  300. data/ext/libcouchbase/src/operations/durability_internal.h +199 -0
  301. data/ext/libcouchbase/src/operations/get.c +409 -0
  302. data/ext/libcouchbase/src/operations/observe-seqno.c +96 -0
  303. data/ext/libcouchbase/src/operations/observe.c +340 -0
  304. data/ext/libcouchbase/src/operations/pktfwd.c +86 -0
  305. data/ext/libcouchbase/src/operations/remove.c +83 -0
  306. data/ext/libcouchbase/src/operations/stats.c +461 -0
  307. data/ext/libcouchbase/src/operations/store.c +360 -0
  308. data/ext/libcouchbase/src/operations/subdoc.cc +510 -0
  309. data/ext/libcouchbase/src/operations/touch.c +81 -0
  310. data/ext/libcouchbase/src/packetutils.c +60 -0
  311. data/ext/libcouchbase/src/packetutils.h +147 -0
  312. data/ext/libcouchbase/src/probes.d +211 -0
  313. data/ext/libcouchbase/src/rdb/bigalloc.c +225 -0
  314. data/ext/libcouchbase/src/rdb/bigalloc.h +73 -0
  315. data/ext/libcouchbase/src/rdb/chunkalloc.c +174 -0
  316. data/ext/libcouchbase/src/rdb/libcalloc.c +94 -0
  317. data/ext/libcouchbase/src/rdb/rope.c +419 -0
  318. data/ext/libcouchbase/src/rdb/rope.h +488 -0
  319. data/ext/libcouchbase/src/retrychk.c +113 -0
  320. data/ext/libcouchbase/src/retryq.c +424 -0
  321. data/ext/libcouchbase/src/retryq.h +157 -0
  322. data/ext/libcouchbase/src/ringbuffer.c +442 -0
  323. data/ext/libcouchbase/src/ringbuffer.h +100 -0
  324. data/ext/libcouchbase/src/settings.c +95 -0
  325. data/ext/libcouchbase/src/settings.h +188 -0
  326. data/ext/libcouchbase/src/simplestring.c +211 -0
  327. data/ext/libcouchbase/src/simplestring.h +228 -0
  328. data/ext/libcouchbase/src/sllist-inl.h +197 -0
  329. data/ext/libcouchbase/src/sllist.h +76 -0
  330. data/ext/libcouchbase/src/ssl/CMakeLists.txt +23 -0
  331. data/ext/libcouchbase/src/ssl/ssl_c.c +415 -0
  332. data/ext/libcouchbase/src/ssl/ssl_common.c +454 -0
  333. data/ext/libcouchbase/src/ssl/ssl_e.c +408 -0
  334. data/ext/libcouchbase/src/ssl/ssl_iot_common.h +180 -0
  335. data/ext/libcouchbase/src/ssobuf.h +82 -0
  336. data/ext/libcouchbase/src/strcodecs/base64.c +123 -0
  337. data/ext/libcouchbase/src/strcodecs/strcodecs.h +285 -0
  338. data/ext/libcouchbase/src/timings.c +208 -0
  339. data/ext/libcouchbase/src/trace.h +105 -0
  340. data/ext/libcouchbase/src/utilities.c +171 -0
  341. data/ext/libcouchbase/src/vbucket/CMakeLists.txt +2 -0
  342. data/ext/libcouchbase/src/vbucket/aliases.h +35 -0
  343. data/ext/libcouchbase/src/vbucket/crc32.h +83 -0
  344. data/ext/libcouchbase/src/vbucket/hash.h +30 -0
  345. data/ext/libcouchbase/src/vbucket/json-inl.h +112 -0
  346. data/ext/libcouchbase/src/vbucket/ketama.c +66 -0
  347. data/ext/libcouchbase/src/vbucket/rfc1321/global.h +32 -0
  348. data/ext/libcouchbase/src/vbucket/rfc1321/md5.h +35 -0
  349. data/ext/libcouchbase/src/vbucket/rfc1321/md5c-inl.h +335 -0
  350. data/ext/libcouchbase/src/vbucket/vbucket.c +1543 -0
  351. data/ext/libcouchbase/src/views/docreq.c +194 -0
  352. data/ext/libcouchbase/src/views/docreq.h +83 -0
  353. data/ext/libcouchbase/src/views/viewreq.c +358 -0
  354. data/ext/libcouchbase/src/views/viewreq.h +36 -0
  355. data/ext/libcouchbase/src/wait.c +161 -0
  356. data/ext/libcouchbase/tests/CMakeLists.txt +140 -0
  357. data/ext/libcouchbase/tests/basic/t_base64.cc +81 -0
  358. data/ext/libcouchbase/tests/basic/t_ccbc103.cc +95 -0
  359. data/ext/libcouchbase/tests/basic/t_connstr.cc +404 -0
  360. data/ext/libcouchbase/tests/basic/t_creds.cc +32 -0
  361. data/ext/libcouchbase/tests/basic/t_ctlcodes.cc +92 -0
  362. data/ext/libcouchbase/tests/basic/t_hashset.cc +262 -0
  363. data/ext/libcouchbase/tests/basic/t_host.cc +198 -0
  364. data/ext/libcouchbase/tests/basic/t_jsparse.cc +137 -0
  365. data/ext/libcouchbase/tests/basic/t_jsparse.h +589 -0
  366. data/ext/libcouchbase/tests/basic/t_list.cc +155 -0
  367. data/ext/libcouchbase/tests/basic/t_logger.cc +65 -0
  368. data/ext/libcouchbase/tests/basic/t_misc.cc +24 -0
  369. data/ext/libcouchbase/tests/basic/t_n1qlstrings.cc +18 -0
  370. data/ext/libcouchbase/tests/basic/t_netbuf.cc +446 -0
  371. data/ext/libcouchbase/tests/basic/t_packet.cc +222 -0
  372. data/ext/libcouchbase/tests/basic/t_ringbuffer.cc +278 -0
  373. data/ext/libcouchbase/tests/basic/t_slist.cc +429 -0
  374. data/ext/libcouchbase/tests/basic/t_strerror.cc +64 -0
  375. data/ext/libcouchbase/tests/basic/t_string.cc +112 -0
  376. data/ext/libcouchbase/tests/basic/t_urlencode.cc +132 -0
  377. data/ext/libcouchbase/tests/check-all.cc +608 -0
  378. data/ext/libcouchbase/tests/htparse/t_basic.cc +193 -0
  379. data/ext/libcouchbase/tests/ioserver/connection.cc +166 -0
  380. data/ext/libcouchbase/tests/ioserver/future.cc +50 -0
  381. data/ext/libcouchbase/tests/ioserver/ioserver.cc +104 -0
  382. data/ext/libcouchbase/tests/ioserver/ioserver.h +478 -0
  383. data/ext/libcouchbase/tests/ioserver/socket.cc +88 -0
  384. data/ext/libcouchbase/tests/ioserver/ssl_connection.cc +145 -0
  385. data/ext/libcouchbase/tests/ioserver/threads-pthreads.cc +119 -0
  386. data/ext/libcouchbase/tests/ioserver/threads-win32.cc +117 -0
  387. data/ext/libcouchbase/tests/ioserver/threads.h +66 -0
  388. data/ext/libcouchbase/tests/iotests/iotests.h +15 -0
  389. data/ext/libcouchbase/tests/iotests/mock-environment.cc +524 -0
  390. data/ext/libcouchbase/tests/iotests/mock-environment.h +385 -0
  391. data/ext/libcouchbase/tests/iotests/mock-unit-test.cc +67 -0
  392. data/ext/libcouchbase/tests/iotests/mock-unit-test.h +61 -0
  393. data/ext/libcouchbase/tests/iotests/serverparams.h +76 -0
  394. data/ext/libcouchbase/tests/iotests/t_arithmetic.cc +143 -0
  395. data/ext/libcouchbase/tests/iotests/t_behavior.cc +226 -0
  396. data/ext/libcouchbase/tests/iotests/t_configcache.cc +117 -0
  397. data/ext/libcouchbase/tests/iotests/t_confmon.cc +241 -0
  398. data/ext/libcouchbase/tests/iotests/t_durability.cc +1059 -0
  399. data/ext/libcouchbase/tests/iotests/t_forward.cc +110 -0
  400. data/ext/libcouchbase/tests/iotests/t_get.cc +512 -0
  401. data/ext/libcouchbase/tests/iotests/t_http.cc +438 -0
  402. data/ext/libcouchbase/tests/iotests/t_iops.cc +175 -0
  403. data/ext/libcouchbase/tests/iotests/t_lock.cc +275 -0
  404. data/ext/libcouchbase/tests/iotests/t_misc.cc +713 -0
  405. data/ext/libcouchbase/tests/iotests/t_mutate.cc +609 -0
  406. data/ext/libcouchbase/tests/iotests/t_n1ql.cc +270 -0
  407. data/ext/libcouchbase/tests/iotests/t_netfail.cc +654 -0
  408. data/ext/libcouchbase/tests/iotests/t_obseqno.cc +157 -0
  409. data/ext/libcouchbase/tests/iotests/t_regression.cc +321 -0
  410. data/ext/libcouchbase/tests/iotests/t_sched.cc +88 -0
  411. data/ext/libcouchbase/tests/iotests/t_serverops.cc +230 -0
  412. data/ext/libcouchbase/tests/iotests/t_smoke.cc +528 -0
  413. data/ext/libcouchbase/tests/iotests/t_subdoc.cc +822 -0
  414. data/ext/libcouchbase/tests/iotests/t_syncmode.cc +64 -0
  415. data/ext/libcouchbase/tests/iotests/t_views.cc +405 -0
  416. data/ext/libcouchbase/tests/iotests/testutil.cc +250 -0
  417. data/ext/libcouchbase/tests/iotests/testutil.h +163 -0
  418. data/ext/libcouchbase/tests/mc/mctest.h +119 -0
  419. data/ext/libcouchbase/tests/mc/pktmaker.h +101 -0
  420. data/ext/libcouchbase/tests/mc/t_alloc.cc +269 -0
  421. data/ext/libcouchbase/tests/mc/t_context.cc +100 -0
  422. data/ext/libcouchbase/tests/mc/t_flush.cc +185 -0
  423. data/ext/libcouchbase/tests/mc/t_forward.cc +239 -0
  424. data/ext/libcouchbase/tests/mc/t_ioflush.cc +102 -0
  425. data/ext/libcouchbase/tests/mc/t_iovcursor.cc +173 -0
  426. data/ext/libcouchbase/tests/mocksupport/procutil.c +305 -0
  427. data/ext/libcouchbase/tests/mocksupport/procutil.h +89 -0
  428. data/ext/libcouchbase/tests/mocksupport/server.c +391 -0
  429. data/ext/libcouchbase/tests/mocksupport/server.h +72 -0
  430. data/ext/libcouchbase/tests/mocksupport/timeout.c +69 -0
  431. data/ext/libcouchbase/tests/nonio_tests.cc +23 -0
  432. data/ext/libcouchbase/tests/rdb/rdbtest.h +133 -0
  433. data/ext/libcouchbase/tests/rdb/t_basic.cc +128 -0
  434. data/ext/libcouchbase/tests/rdb/t_bigalloc.cc +93 -0
  435. data/ext/libcouchbase/tests/rdb/t_refs.cc +112 -0
  436. data/ext/libcouchbase/tests/socktests/socktest.cc +347 -0
  437. data/ext/libcouchbase/tests/socktests/socktest.h +448 -0
  438. data/ext/libcouchbase/tests/socktests/t_basic.cc +143 -0
  439. data/ext/libcouchbase/tests/socktests/t_ctx.cc +73 -0
  440. data/ext/libcouchbase/tests/socktests/t_manager.cc +179 -0
  441. data/ext/libcouchbase/tests/socktests/t_putex.cc +256 -0
  442. data/ext/libcouchbase/tests/socktests/t_read.cc +187 -0
  443. data/ext/libcouchbase/tests/socktests/t_reentrant.cc +143 -0
  444. data/ext/libcouchbase/tests/socktests/t_ssl.cc +80 -0
  445. data/ext/libcouchbase/tests/socktests/t_write.cc +95 -0
  446. data/ext/libcouchbase/tests/start_mock.bat +15 -0
  447. data/ext/libcouchbase/tests/start_mock.sh +42 -0
  448. data/ext/libcouchbase/tests/unit_tests.cc +43 -0
  449. data/ext/libcouchbase/tests/vbucket/confdata/bad.json +101 -0
  450. data/ext/libcouchbase/tests/vbucket/confdata/full_25.json +363 -0
  451. data/ext/libcouchbase/tests/vbucket/confdata/memd_25.json +90 -0
  452. data/ext/libcouchbase/tests/vbucket/confdata/memd_30.json +1 -0
  453. data/ext/libcouchbase/tests/vbucket/confdata/memd_45.json +1 -0
  454. data/ext/libcouchbase/tests/vbucket/confdata/terse_25.json +291 -0
  455. data/ext/libcouchbase/tests/vbucket/confdata/terse_30.json +1 -0
  456. data/ext/libcouchbase/tests/vbucket/t_config.cc +341 -0
  457. data/ext/libcouchbase/tools/CMakeLists.txt +51 -0
  458. data/ext/libcouchbase/tools/cbc-handlers.h +462 -0
  459. data/ext/libcouchbase/tools/cbc-n1qlback.cc +439 -0
  460. data/ext/libcouchbase/tools/cbc-pillowfight.cc +822 -0
  461. data/ext/libcouchbase/tools/cbc.cc +1541 -0
  462. data/ext/libcouchbase/tools/common/histogram.cc +43 -0
  463. data/ext/libcouchbase/tools/common/histogram.h +23 -0
  464. data/ext/libcouchbase/tools/common/my_inttypes.h +22 -0
  465. data/ext/libcouchbase/tools/common/options.cc +420 -0
  466. data/ext/libcouchbase/tools/common/options.h +81 -0
  467. data/ext/libcouchbase/tools/docgen/docgen.h +469 -0
  468. data/ext/libcouchbase/tools/docgen/loc.h +210 -0
  469. data/ext/libcouchbase/tools/docgen/placeholders.h +211 -0
  470. data/ext/libcouchbase/tools/docgen/seqgen.h +94 -0
  471. data/lib/libcouchbase.rb +36 -0
  472. data/lib/libcouchbase/bucket.rb +819 -0
  473. data/lib/libcouchbase/callbacks.rb +72 -0
  474. data/lib/libcouchbase/connection.rb +790 -0
  475. data/lib/libcouchbase/design_docs.rb +86 -0
  476. data/lib/libcouchbase/error.rb +68 -0
  477. data/lib/libcouchbase/ext/libcouchbase.rb +1135 -0
  478. data/lib/libcouchbase/ext/libcouchbase/cmdbase.rb +23 -0
  479. data/lib/libcouchbase/ext/libcouchbase/cmdcounter.rb +36 -0
  480. data/lib/libcouchbase/ext/libcouchbase/cmdendure.rb +26 -0
  481. data/lib/libcouchbase/ext/libcouchbase/cmdfts.rb +24 -0
  482. data/lib/libcouchbase/ext/libcouchbase/cmdget.rb +30 -0
  483. data/lib/libcouchbase/ext/libcouchbase/cmdgetreplica.rb +49 -0
  484. data/lib/libcouchbase/ext/libcouchbase/cmdhttp.rb +58 -0
  485. data/lib/libcouchbase/ext/libcouchbase/cmdn1ql.rb +40 -0
  486. data/lib/libcouchbase/ext/libcouchbase/cmdobseqno.rb +33 -0
  487. data/lib/libcouchbase/ext/libcouchbase/cmdobserve.rb +30 -0
  488. data/lib/libcouchbase/ext/libcouchbase/cmdstore.rb +40 -0
  489. data/lib/libcouchbase/ext/libcouchbase/cmdstoredur.rb +45 -0
  490. data/lib/libcouchbase/ext/libcouchbase/cmdsubdoc.rb +49 -0
  491. data/lib/libcouchbase/ext/libcouchbase/cmdverbosity.rb +29 -0
  492. data/lib/libcouchbase/ext/libcouchbase/cmdviewquery.rb +61 -0
  493. data/lib/libcouchbase/ext/libcouchbase/contigbuf.rb +14 -0
  494. data/lib/libcouchbase/ext/libcouchbase/create_st.rb +15 -0
  495. data/lib/libcouchbase/ext/libcouchbase/create_st0.rb +23 -0
  496. data/lib/libcouchbase/ext/libcouchbase/create_st1.rb +26 -0
  497. data/lib/libcouchbase/ext/libcouchbase/create_st2.rb +32 -0
  498. data/lib/libcouchbase/ext/libcouchbase/create_st3.rb +26 -0
  499. data/lib/libcouchbase/ext/libcouchbase/crst_u.rb +20 -0
  500. data/lib/libcouchbase/ext/libcouchbase/durability_opts_st_v.rb +11 -0
  501. data/lib/libcouchbase/ext/libcouchbase/durability_opts_t.rb +14 -0
  502. data/lib/libcouchbase/ext/libcouchbase/durabilityopt_sv0.rb +63 -0
  503. data/lib/libcouchbase/ext/libcouchbase/enums.rb +991 -0
  504. data/lib/libcouchbase/ext/libcouchbase/fragbuf.rb +18 -0
  505. data/lib/libcouchbase/ext/libcouchbase/ftshandle.rb +7 -0
  506. data/lib/libcouchbase/ext/libcouchbase/histogram.rb +34 -0
  507. data/lib/libcouchbase/ext/libcouchbase/http_request_t.rb +7 -0
  508. data/lib/libcouchbase/ext/libcouchbase/keybuf.rb +20 -0
  509. data/lib/libcouchbase/ext/libcouchbase/multicmd_ctx.rb +30 -0
  510. data/lib/libcouchbase/ext/libcouchbase/mutation_token.rb +17 -0
  511. data/lib/libcouchbase/ext/libcouchbase/n1qlhandle.rb +7 -0
  512. data/lib/libcouchbase/ext/libcouchbase/n1qlparams.rb +7 -0
  513. data/lib/libcouchbase/ext/libcouchbase/respbase.rb +29 -0
  514. data/lib/libcouchbase/ext/libcouchbase/respcounter.rb +32 -0
  515. data/lib/libcouchbase/ext/libcouchbase/respendure.rb +49 -0
  516. data/lib/libcouchbase/ext/libcouchbase/respfts.rb +40 -0
  517. data/lib/libcouchbase/ext/libcouchbase/respget.rb +44 -0
  518. data/lib/libcouchbase/ext/libcouchbase/resphttp.rb +48 -0
  519. data/lib/libcouchbase/ext/libcouchbase/respmcversion.rb +38 -0
  520. data/lib/libcouchbase/ext/libcouchbase/respn1ql.rb +41 -0
  521. data/lib/libcouchbase/ext/libcouchbase/respobseqno.rb +52 -0
  522. data/lib/libcouchbase/ext/libcouchbase/respobserve.rb +41 -0
  523. data/lib/libcouchbase/ext/libcouchbase/respserverbase.rb +32 -0
  524. data/lib/libcouchbase/ext/libcouchbase/respstats.rb +38 -0
  525. data/lib/libcouchbase/ext/libcouchbase/respstore.rb +32 -0
  526. data/lib/libcouchbase/ext/libcouchbase/respstoredur.rb +38 -0
  527. data/lib/libcouchbase/ext/libcouchbase/respsubdoc.rb +35 -0
  528. data/lib/libcouchbase/ext/libcouchbase/respviewquery.rb +67 -0
  529. data/lib/libcouchbase/ext/libcouchbase/sdentry.rb +22 -0
  530. data/lib/libcouchbase/ext/libcouchbase/sdspec.rb +26 -0
  531. data/lib/libcouchbase/ext/libcouchbase/t.rb +7 -0
  532. data/lib/libcouchbase/ext/libcouchbase/valbuf.rb +22 -0
  533. data/lib/libcouchbase/ext/libcouchbase/valbuf_u_buf.rb +14 -0
  534. data/lib/libcouchbase/ext/libcouchbase/viewhandle.rb +7 -0
  535. data/lib/libcouchbase/ext/libcouchbase_iocp.rb +26 -0
  536. data/lib/libcouchbase/ext/libcouchbase_libuv.rb +18 -0
  537. data/lib/libcouchbase/ext/tasks.rb +87 -0
  538. data/lib/libcouchbase/n1ql.rb +73 -0
  539. data/lib/libcouchbase/query_full_text.rb +147 -0
  540. data/lib/libcouchbase/query_n1ql.rb +121 -0
  541. data/lib/libcouchbase/query_view.rb +129 -0
  542. data/lib/libcouchbase/results_fiber.rb +262 -0
  543. data/lib/libcouchbase/results_native.rb +211 -0
  544. data/lib/libcouchbase/version.rb +5 -0
  545. data/libcouchbase.gemspec +61 -0
  546. data/spec/bucket_spec.rb +270 -0
  547. data/spec/connection_spec.rb +277 -0
  548. data/spec/design_docs_spec.rb +23 -0
  549. data/spec/error_spec.rb +26 -0
  550. data/spec/fts_spec.rb +129 -0
  551. data/spec/n1ql_spec.rb +201 -0
  552. data/spec/results_libuv_spec.rb +229 -0
  553. data/spec/results_native_spec.rb +259 -0
  554. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/design.json +1 -0
  555. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/data-0000.cbb +0 -0
  556. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/failover.json +1 -0
  557. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/meta.json +1 -0
  558. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/seqno.json +1 -0
  559. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/snapshot_markers.json +1 -0
  560. data/spec/view_spec.rb +195 -0
  561. metadata +775 -0
@@ -0,0 +1,129 @@
1
+ /* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2014 Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #ifndef LCB_BOOTSTRAP_H
19
+ #define LCB_BOOTSTRAP_H
20
+ #ifdef __cplusplus
21
+ extern "C" {
22
+ #endif
23
+
24
+ /**@file
25
+ * Core bootstrap/cluster configuration routines */
26
+
27
+ /**@defgroup lcb_bootstrap Bootstrap Routines
28
+ * @addtogroup lcb_bootstrap
29
+ * @{
30
+ */
31
+
32
+ #if defined(__LCB_DOXYGEN__) || defined(LCB_BOOTSTRAP_DEFINE_STRUCT)
33
+ #include "bucketconfig/clconfig.h"
34
+
35
+ /**
36
+ * Structure containing the bootstrap state for the instance.
37
+ */
38
+ struct lcb_BOOTSTRAP {
39
+ /**Listener object used to react when a new configuration is received. This
40
+ * is used for both requested configurations (i.e. an explicit call to
41
+ * lcb_bootstrap_common()) as well as unsolicited updates such as
42
+ * HTTP streaming configurations or Not-My-Vbucket "Carrier" updates.
43
+ */
44
+ clconfig_listener listener;
45
+
46
+ lcb_t parent;
47
+
48
+ /**Timer used for initial bootstrap as an interval timer, and for subsequent
49
+ * updates as an asynchronous event (to allow safe updates and avoid
50
+ * reentrancy issues)
51
+ */
52
+ lcbio_pTIMER tm;
53
+
54
+ /**
55
+ * Timestamp indicating the most recent configuration activity. This
56
+ * timestamp is used to control throttling, such that the @ref
57
+ * LCB_CNTL_CONFDELAY_THRESH setting is applied as an offset to this
58
+ * timestamp (accounting for ns-to-us conversion). This flag is set whenever
59
+ *
60
+ * * A new configuration is received (solicited or unsolicited)
61
+ * * A request for a new configuration is made, and the request has not
62
+ * been throttled
63
+ */
64
+ hrtime_t last_refresh;
65
+
66
+ /**
67
+ * Counter incremented each time a request is based to lcb_bootstrap_common()
68
+ * with the @ref LCB_BS_REFRESH_INCRERR flag, and where the request itself
69
+ * had been throttled. This increments the internal error counter and when
70
+ * the counter reaches a threshold higher than @ref LCB_CNTL_CONFERRTHRESH
71
+ * a new configuration is requested.
72
+ * This counter is cleared whenever a new configuration arrives.
73
+ */
74
+ unsigned errcounter;
75
+
76
+ /** Flag indicating whether the _initial_ configuration has been received */
77
+ int bootstrapped;
78
+ };
79
+ #endif
80
+
81
+ /**
82
+ * These flags control the bootstrap refreshing mode that will take place
83
+ * when lcb_bootstrap_common() is invoked. These options may be OR'd with
84
+ * each other (with the exception of ::LCB_BS_REFRESH_ALWAYS).
85
+ */
86
+ typedef enum {
87
+ /** Always fetch a new configuration. No throttling checks are performed */
88
+ LCB_BS_REFRESH_ALWAYS = 0x00,
89
+ /** Special mode used to fetch the first configuration */
90
+ LCB_BS_REFRESH_INITIAL = 0x02,
91
+
92
+ /** Make the request for a new configuration subject to throttling
93
+ * limitations. Currently this will be subject to the interval specified
94
+ * in the @ref LCB_CNTL_CONFDELAY_THRESH setting and the @ref
95
+ * LCB_CNTL_CONFERRTHRESH setting. If the refresh has been throttled
96
+ * the lcb_confmon_is_refreshing() function will return false */
97
+ LCB_BS_REFRESH_THROTTLE = 0x04,
98
+
99
+ /** To be used in conjunction with ::LCB_BS_REFRESH_THROTTLE, this will
100
+ * increment the error counter in case the current refresh is throttled,
101
+ * such that when the error counter reaches the threshold, the throttle
102
+ * limitations will expire and a new refresh will take place */
103
+ LCB_BS_REFRESH_INCRERR = 0x08
104
+ } lcb_BSFLAGS;
105
+
106
+ /**
107
+ * @brief Request that the handle update its configuration.
108
+ *
109
+ * This function acts as a gateway to the more abstract confmon interface.
110
+ *
111
+ * @param instance The instance
112
+ * @param options A set of options specified as flags, indicating under what
113
+ * conditions a new configuration should be refetched.
114
+ *
115
+ * @return
116
+ */
117
+ LCB_INTERNAL_API
118
+ lcb_error_t
119
+ lcb_bootstrap_common(lcb_t instance, int options);
120
+
121
+ void
122
+ lcb_bootstrap_destroy(lcb_t instance);
123
+
124
+ /**@}*/
125
+
126
+ #ifdef __cplusplus
127
+ }
128
+ #endif
129
+ #endif /* LCB_BOOTSTRAP_H */
@@ -0,0 +1,495 @@
1
+ /* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2014 Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * This file contains the CCCP (Cluster Carrier Configuration Protocol)
20
+ * implementation of the confmon provider. It utilizes a memcached connection
21
+ * to retrieve configuration information.
22
+ */
23
+
24
+ #include "internal.h"
25
+ #include "clconfig.h"
26
+ #include "packetutils.h"
27
+ #include "simplestring.h"
28
+ #include <mcserver/negotiate.h>
29
+ #include <lcbio/lcbio.h>
30
+ #include <lcbio/timer-ng.h>
31
+ #include <lcbio/ssl.h>
32
+ #include "ctx-log-inl.h"
33
+ #define LOGARGS(cccp, lvl) cccp->base.parent->settings, "cccp", LCB_LOG_##lvl, __FILE__, __LINE__
34
+ #define LOGFMT "<%s:%s> "
35
+ #define LOGID(cccp) get_ctx_host(cccp->ioctx), get_ctx_port(cccp->ioctx)
36
+
37
+ struct cccp_cookie_st;
38
+
39
+ typedef struct {
40
+ clconfig_provider base;
41
+ hostlist_t nodes;
42
+ clconfig_info *config;
43
+ int server_active;
44
+ int disabled;
45
+ lcbio_pTIMER timer;
46
+ lcb_t instance;
47
+ lcbio_CONNREQ creq;
48
+ lcbio_CTX *ioctx;
49
+ struct cccp_cookie_st *cmdcookie;
50
+ } cccp_provider;
51
+
52
+ typedef struct cccp_cookie_st {
53
+ /** Parent object */
54
+ cccp_provider *parent;
55
+
56
+ /** Whether to ignore errors on this cookie object */
57
+ int ignore_errors;
58
+ } cccp_cookie;
59
+
60
+ static void io_error_handler(lcbio_CTX *, lcb_error_t);
61
+ static void io_read_handler(lcbio_CTX *, unsigned nr);
62
+ static void request_config(cccp_provider *);
63
+ static void on_connected(lcbio_SOCKET *, void*, lcb_error_t, lcbio_OSERR);
64
+
65
+ static void
66
+ pooled_close_cb(lcbio_SOCKET *sock, int reusable, void *arg)
67
+ {
68
+ int *ru_ex = arg;
69
+ lcbio_ref(sock);
70
+ if (reusable && *ru_ex) {
71
+ lcbio_mgr_put(sock);
72
+ } else {
73
+ lcbio_mgr_discard(sock);
74
+ }
75
+ }
76
+
77
+ static void release_socket(cccp_provider *cccp, int can_reuse)
78
+ {
79
+ if (cccp->cmdcookie) {
80
+ cccp->cmdcookie->ignore_errors = 1;
81
+ cccp->cmdcookie = NULL;
82
+ return;
83
+ }
84
+
85
+ lcbio_connreq_cancel(&cccp->creq);
86
+
87
+ if (cccp->ioctx) {
88
+ lcbio_ctx_close(cccp->ioctx, pooled_close_cb, &can_reuse);
89
+ cccp->ioctx = NULL;
90
+ }
91
+ }
92
+
93
+ static lcb_error_t
94
+ schedule_next_request(cccp_provider *cccp, lcb_error_t err, int can_rollover)
95
+ {
96
+ mc_SERVER *server;
97
+ lcb_host_t *next_host = hostlist_shift_next(cccp->nodes, can_rollover);
98
+ if (!next_host) {
99
+ lcbio_timer_disarm(cccp->timer);
100
+ lcb_confmon_provider_failed(&cccp->base, err);
101
+ cccp->server_active = 0;
102
+ return err;
103
+ }
104
+
105
+ server = lcb_find_server_by_host(cccp->instance, next_host);
106
+ if (server) {
107
+ cccp_cookie *cookie = calloc(1, sizeof(*cookie));
108
+ cccp->cmdcookie = cookie;
109
+ cookie->parent = cccp;
110
+ lcb_log(LOGARGS(cccp, INFO), "Re-Issuing CCCP Command on server struct %p (%s:%s)", (void*)server, next_host->host, next_host->port);
111
+ lcbio_timer_rearm(
112
+ cccp->timer, PROVIDER_SETTING(&cccp->base, config_node_timeout));
113
+ return lcb_getconfig(cccp->instance, cookie, server);
114
+
115
+ } else {
116
+ lcbio_pMGRREQ preq;
117
+
118
+ lcb_log(LOGARGS(cccp, INFO), "Requesting connection to node %s:%s for CCCP configuration", next_host->host, next_host->port);
119
+ preq = lcbio_mgr_get(
120
+ cccp->instance->memd_sockpool, next_host,
121
+ PROVIDER_SETTING(&cccp->base, config_node_timeout),
122
+ on_connected, cccp);
123
+ LCBIO_CONNREQ_MKPOOLED(&cccp->creq, preq);
124
+ }
125
+
126
+ cccp->server_active = 1;
127
+ return LCB_SUCCESS;
128
+ }
129
+
130
+ static lcb_error_t mcio_error(cccp_provider *cccp, lcb_error_t err)
131
+ {
132
+ if (err != LCB_NOT_SUPPORTED && err != LCB_UNKNOWN_COMMAND) {
133
+ lcb_log(LOGARGS(cccp, ERR), LOGFMT "Got I/O Error=0x%x", LOGID(cccp), err);
134
+ }
135
+
136
+ release_socket(cccp, err == LCB_NOT_SUPPORTED);
137
+ return schedule_next_request(cccp, err, 0);
138
+ }
139
+
140
+ static void socket_timeout(void *arg)
141
+ {
142
+ cccp_provider *cccp = arg;
143
+ mcio_error(cccp, LCB_ETIMEDOUT);
144
+ }
145
+
146
+ void lcb_clconfig_cccp_enable(clconfig_provider *pb, lcb_t instance)
147
+ {
148
+ cccp_provider *cccp = (cccp_provider *)pb;
149
+ lcb_assert(pb->type == LCB_CLCONFIG_CCCP);
150
+ cccp->instance = instance;
151
+ pb->enabled = 1;
152
+ }
153
+
154
+ static hostlist_t get_nodes(const clconfig_provider *pb)
155
+ {
156
+ return ((cccp_provider *)pb)->nodes;
157
+ }
158
+
159
+ /** Update the configuration from a server. */
160
+ lcb_error_t lcb_cccp_update(clconfig_provider *provider,
161
+ const char *host,
162
+ lcb_string *data)
163
+ {
164
+ /** TODO: replace this with lcbvb_ names */
165
+
166
+ lcbvb_CONFIG* vbc;
167
+ int rv;
168
+ clconfig_info *new_config;
169
+ cccp_provider *cccp = (cccp_provider *)provider;
170
+ vbc = lcbvb_create();
171
+
172
+ if (!vbc) {
173
+ return LCB_CLIENT_ENOMEM;
174
+ }
175
+ rv = lcbvb_load_json(vbc, data->base);
176
+
177
+ if (rv) {
178
+ lcb_log(LOGARGS(cccp, ERROR), LOGFMT "Failed to parse config", LOGID(cccp));
179
+ lcb_log_badconfig(LOGARGS(cccp, ERROR), vbc, data->base);
180
+ lcbvb_destroy(vbc);
181
+ return LCB_PROTOCOL_ERROR;
182
+ }
183
+
184
+ lcbvb_replace_host(vbc, host);
185
+ new_config = lcb_clconfig_create(vbc, LCB_CLCONFIG_CCCP);
186
+
187
+ if (!new_config) {
188
+ lcbvb_destroy(vbc);
189
+ return LCB_CLIENT_ENOMEM;
190
+ }
191
+
192
+ if (cccp->config) {
193
+ lcb_clconfig_decref(cccp->config);
194
+ }
195
+
196
+ /** TODO: Figure out the comparison vector */
197
+ new_config->cmpclock = gethrtime();
198
+ cccp->config = new_config;
199
+ lcb_confmon_provider_success(provider, new_config);
200
+ return LCB_SUCCESS;
201
+ }
202
+
203
+ void lcb_cccp_update2(const void *cookie, lcb_error_t err,
204
+ const void *bytes, lcb_size_t nbytes,
205
+ const lcb_host_t *origin)
206
+ {
207
+ cccp_cookie *ck = (cccp_cookie *)cookie;
208
+ cccp_provider *cccp = ck->parent;
209
+
210
+ if (ck == cccp->cmdcookie) {
211
+ lcbio_timer_disarm(cccp->timer);
212
+ cccp->cmdcookie = NULL;
213
+ }
214
+
215
+ if (err == LCB_SUCCESS) {
216
+ lcb_string ss;
217
+
218
+ lcb_string_init(&ss);
219
+ lcb_string_append(&ss, bytes, nbytes);
220
+ err = lcb_cccp_update(&cccp->base, origin->host, &ss);
221
+ lcb_string_release(&ss);
222
+ }
223
+
224
+ if (err != LCB_SUCCESS && ck->ignore_errors == 0) {
225
+ mcio_error(cccp, err);
226
+ }
227
+
228
+ free(ck);
229
+ }
230
+
231
+ static void
232
+ on_connected(lcbio_SOCKET *sock, void *data, lcb_error_t err, lcbio_OSERR syserr)
233
+ {
234
+ lcbio_CTXPROCS ioprocs;
235
+ cccp_provider *cccp = data;
236
+ lcb_settings *settings = cccp->base.parent->settings;
237
+
238
+ LCBIO_CONNREQ_CLEAR(&cccp->creq);
239
+ if (err != LCB_SUCCESS) {
240
+ if (sock) {
241
+ lcbio_mgr_discard(sock);
242
+ }
243
+ mcio_error(cccp, err);
244
+ return;
245
+ }
246
+
247
+ if (lcbio_protoctx_get(sock, LCBIO_PROTOCTX_SESSINFO) == NULL) {
248
+ mc_pSESSREQ sreq;
249
+ sreq = mc_sessreq_start(
250
+ sock, settings, settings->config_node_timeout, on_connected,
251
+ cccp);
252
+ LCBIO_CONNREQ_MKGENERIC(&cccp->creq, sreq, mc_sessreq_cancel);
253
+ return;
254
+ }
255
+
256
+ ioprocs.cb_err = io_error_handler;
257
+ ioprocs.cb_read = io_read_handler;
258
+ cccp->ioctx = lcbio_ctx_new(sock, data, &ioprocs);
259
+ cccp->ioctx->subsys = "bc_cccp";
260
+ request_config(cccp);
261
+
262
+ (void)syserr;
263
+ }
264
+
265
+ static lcb_error_t cccp_get(clconfig_provider *pb)
266
+ {
267
+ cccp_provider *cccp = (cccp_provider *)pb;
268
+ if (cccp->creq.u.p_generic || cccp->server_active || cccp->cmdcookie) {
269
+ return LCB_BUSY;
270
+ }
271
+
272
+ return schedule_next_request(cccp, LCB_SUCCESS, 1);
273
+ }
274
+
275
+ static clconfig_info *cccp_get_cached(clconfig_provider *pb)
276
+ {
277
+ cccp_provider *cccp = (cccp_provider *)pb;
278
+ return cccp->config;
279
+ }
280
+
281
+ static lcb_error_t cccp_pause(clconfig_provider *pb)
282
+ {
283
+ cccp_provider *cccp = (cccp_provider *)pb;
284
+ if (!cccp->server_active) {
285
+ return LCB_SUCCESS;
286
+ }
287
+
288
+ cccp->server_active = 0;
289
+ release_socket(cccp, 0);
290
+ lcbio_timer_disarm(cccp->timer);
291
+ return LCB_SUCCESS;
292
+ }
293
+
294
+ static void cccp_cleanup(clconfig_provider *pb)
295
+ {
296
+ cccp_provider *cccp = (cccp_provider *)pb;
297
+
298
+ release_socket(cccp, 0);
299
+ if (cccp->config) {
300
+ lcb_clconfig_decref(cccp->config);
301
+ }
302
+ if (cccp->nodes) {
303
+ hostlist_destroy(cccp->nodes);
304
+ }
305
+ if (cccp->timer) {
306
+ lcbio_timer_destroy(cccp->timer);
307
+ }
308
+ if (cccp->cmdcookie) {
309
+ cccp->cmdcookie->ignore_errors = 1;
310
+ }
311
+ free(cccp);
312
+ }
313
+
314
+ static void
315
+ configure_nodes(clconfig_provider *pb, const hostlist_t nodes)
316
+ {
317
+ cccp_provider *cccp = (cccp_provider *)pb;
318
+ hostlist_assign(cccp->nodes, nodes);
319
+ if (PROVIDER_SETTING(pb, randomize_bootstrap_nodes)) {
320
+ hostlist_randomize(cccp->nodes);
321
+ }
322
+ }
323
+
324
+ static void
325
+ config_updated(clconfig_provider *provider, lcbvb_CONFIG* vbc)
326
+ {
327
+ unsigned ii;
328
+ lcbvb_SVCMODE mode;
329
+ cccp_provider *cccp = (cccp_provider *)provider;
330
+ if (LCBVB_NSERVERS(vbc) < 1) {
331
+ return;
332
+ }
333
+
334
+ hostlist_clear(cccp->nodes);
335
+ if (PROVIDER_SETTING(provider, sslopts) & LCB_SSL_ENABLED) {
336
+ mode = LCBVB_SVCMODE_SSL;
337
+ } else {
338
+ mode = LCBVB_SVCMODE_PLAIN;
339
+ }
340
+ for (ii = 0; ii < LCBVB_NSERVERS(vbc); ii++) {
341
+ const char *mcaddr = lcbvb_get_hostport(vbc,
342
+ ii, LCBVB_SVCTYPE_DATA, mode);
343
+ if (!mcaddr) {
344
+ lcb_log(LOGARGS(cccp, DEBUG), "Node %d has no data service", ii);
345
+ continue;
346
+ }
347
+ hostlist_add_stringz(cccp->nodes, mcaddr, LCB_CONFIG_MCD_PORT);
348
+ }
349
+
350
+ if (PROVIDER_SETTING(provider, randomize_bootstrap_nodes)) {
351
+ hostlist_randomize(cccp->nodes);
352
+ }
353
+ }
354
+
355
+ static void
356
+ io_error_handler(lcbio_CTX *ctx, lcb_error_t err)
357
+ {
358
+ cccp_provider *cccp = lcbio_ctx_data(ctx);
359
+ mcio_error(cccp, err);
360
+ }
361
+
362
+ static void
363
+ io_read_handler(lcbio_CTX *ioctx, unsigned nr)
364
+ {
365
+ packet_info pi;
366
+ cccp_provider *cccp = lcbio_ctx_data(ioctx);
367
+ lcb_string jsonstr;
368
+ lcb_error_t err;
369
+ int rv;
370
+ unsigned required;
371
+ lcb_host_t curhost;
372
+
373
+ (void)nr;
374
+
375
+ #define return_error(e) \
376
+ lcb_pktinfo_ectx_done(&pi, ioctx); \
377
+ mcio_error(cccp, e); \
378
+ return
379
+
380
+ memset(&pi, 0, sizeof(pi));
381
+ rv = lcb_pktinfo_ectx_get(&pi, ioctx, &required);
382
+ if (!rv) {
383
+ lcbio_ctx_rwant(ioctx, required);
384
+ lcbio_ctx_schedule(ioctx);
385
+ return;
386
+ }
387
+
388
+ if (PACKET_STATUS(&pi) != PROTOCOL_BINARY_RESPONSE_SUCCESS) {
389
+ lcb_log(LOGARGS(cccp, WARN), LOGFMT "CCCP Packet responded with 0x%x; nkey=%d, nbytes=%lu, cmd=0x%x, seq=0x%x", LOGID(cccp),
390
+ PACKET_STATUS(&pi), PACKET_NKEY(&pi), (unsigned long)PACKET_NBODY(&pi),
391
+ PACKET_OPCODE(&pi), PACKET_OPAQUE(&pi));
392
+
393
+ switch (PACKET_STATUS(&pi)) {
394
+ case PROTOCOL_BINARY_RESPONSE_NOT_SUPPORTED:
395
+ case PROTOCOL_BINARY_RESPONSE_UNKNOWN_COMMAND:
396
+ return_error(LCB_NOT_SUPPORTED);
397
+ default:
398
+ return_error(LCB_PROTOCOL_ERROR);
399
+ }
400
+
401
+ return;
402
+ }
403
+
404
+ if (!PACKET_NBODY(&pi)) {
405
+ return_error(LCB_PROTOCOL_ERROR);
406
+ }
407
+
408
+ if (lcb_string_init(&jsonstr)) {
409
+ return_error(LCB_CLIENT_ENOMEM);
410
+ }
411
+
412
+ if (lcb_string_append(&jsonstr, PACKET_BODY(&pi), PACKET_NBODY(&pi))) {
413
+ return_error(LCB_CLIENT_ENOMEM);
414
+ }
415
+
416
+ curhost = *lcbio_get_host(lcbio_ctx_sock(ioctx));
417
+ lcb_pktinfo_ectx_done(&pi, ioctx);
418
+ release_socket(cccp, 1);
419
+
420
+ err = lcb_cccp_update(&cccp->base, curhost.host, &jsonstr);
421
+ lcb_string_release(&jsonstr);
422
+ if (err == LCB_SUCCESS) {
423
+ lcbio_timer_disarm(cccp->timer);
424
+ cccp->server_active = 0;
425
+ } else {
426
+ schedule_next_request(cccp, LCB_PROTOCOL_ERROR, 0);
427
+ }
428
+
429
+ #undef return_error
430
+ }
431
+
432
+ static void request_config(cccp_provider *cccp)
433
+ {
434
+ protocol_binary_request_set_cluster_config req;
435
+ memset(&req, 0, sizeof(req));
436
+ req.message.header.request.magic = PROTOCOL_BINARY_REQ;
437
+ req.message.header.request.opcode = PROTOCOL_BINARY_CMD_GET_CLUSTER_CONFIG;
438
+ req.message.header.request.opaque = 0xF00D;
439
+ lcbio_ctx_put(cccp->ioctx, req.bytes, sizeof(req.bytes));
440
+ lcbio_ctx_rwant(cccp->ioctx, 24);
441
+ lcbio_ctx_schedule(cccp->ioctx);
442
+ lcbio_timer_rearm(cccp->timer, PROVIDER_SETTING(&cccp->base, config_node_timeout));
443
+ }
444
+
445
+ static void do_dump(clconfig_provider *pb, FILE *fp)
446
+ {
447
+ cccp_provider *cccp = (cccp_provider *)pb;
448
+ unsigned ii;
449
+
450
+ if (!cccp->base.enabled) {
451
+ return;
452
+ }
453
+
454
+ fprintf(fp, "## BEGIN CCCP PROVIDER DUMP ##\n");
455
+ fprintf(fp, "TIMER ACTIVE: %s\n", lcbio_timer_armed(cccp->timer) ? "YES" : "NO");
456
+ fprintf(fp, "PIPELINE RESPONSE COOKIE: %p\n", (void*)cccp->cmdcookie);
457
+ if (cccp->ioctx) {
458
+ fprintf(fp, "CCCP Owns connection:\n");
459
+ lcbio_ctx_dump(cccp->ioctx, fp);
460
+ } else if (cccp->creq.u.p_generic) {
461
+ fprintf(fp, "CCCP Is connecting\n");
462
+ } else {
463
+ fprintf(fp, "CCCP does not have a dedicated connection\n");
464
+ }
465
+
466
+ for (ii = 0; ii < hostlist_size(cccp->nodes); ii++) {
467
+ const lcb_host_t *curhost = hostlist_get(cccp->nodes, ii);
468
+ fprintf(fp, "CCCP NODE: %s:%s\n", curhost->host, curhost->port);
469
+ }
470
+ fprintf(fp, "## END CCCP PROVIDER DUMP ##\n");
471
+ }
472
+
473
+ clconfig_provider * lcb_clconfig_create_cccp(lcb_confmon *mon)
474
+ {
475
+ cccp_provider *cccp = calloc(1, sizeof(*cccp));
476
+ cccp->nodes = hostlist_create();
477
+ cccp->base.type = LCB_CLCONFIG_CCCP;
478
+ cccp->base.refresh = cccp_get;
479
+ cccp->base.get_cached = cccp_get_cached;
480
+ cccp->base.pause = cccp_pause;
481
+ cccp->base.shutdown = cccp_cleanup;
482
+ cccp->base.config_updated = config_updated;
483
+ cccp->base.configure_nodes = configure_nodes;
484
+ cccp->base.get_nodes = get_nodes;
485
+ cccp->base.dump = do_dump;
486
+ cccp->base.parent = mon;
487
+ cccp->base.enabled = 0;
488
+ cccp->timer = lcbio_timer_new(mon->iot, cccp, socket_timeout);
489
+
490
+ if (!cccp->nodes) {
491
+ free(cccp);
492
+ return NULL;
493
+ }
494
+ return &cccp->base;
495
+ }