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,199 @@
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_DURABILITY_INTERNAL_H
19
+ #define LCB_DURABILITY_INTERNAL_H
20
+
21
+ #include "simplestring.h"
22
+ #include "ssobuf.h"
23
+ #ifdef __cplusplus
24
+ extern "C" {
25
+ #endif
26
+
27
+ /**
28
+ * Here is the internal API for the durability functions.
29
+ *
30
+ * Durability works on polling multiple observe responses and waiting until a
31
+ * key (or set of keys) have either been persisted, or the wait period has
32
+ * expired.
33
+ *
34
+ * The operation maintains an internal counter which counts how many keys
35
+ * do not have a conclusive observe response yet (i.e. how many do not have
36
+ * their criteria satisfied yet). The operation is considered complete when
37
+ * the counter reaches 0.
38
+ */
39
+
40
+ /**
41
+ * Information about a particular server's state -- whether it has been
42
+ * persisted to or replicated to. This is tied to a given mc_SERVER
43
+ * instance.
44
+ */
45
+ typedef struct {
46
+ const mc_SERVER *server; /**< Server pointer (for comparison only) */
47
+ lcb_U16 persisted; /**< Exists on server */
48
+ lcb_U16 exists; /**< Persisted to server */
49
+ } lcbdur_SERVINFO;
50
+
51
+ /**Information a single entry in a durability set. Each entry contains a single
52
+ * key */
53
+ typedef struct lcb_DURITEM_st {
54
+ lcb_U64 reqcas; /**< Last known CAS for the user */
55
+ lcb_U64 reqseqno; /**< Last known seqno for the user */
56
+ lcb_U64 uuid;
57
+ lcb_RESPENDURE result; /**< Result to be passed to user */
58
+ struct lcb_DURSET_st *parent;
59
+ lcb_RESPCALLBACK callback; /**< For F_INTERNAL_CALLBACK */
60
+ lcb_U16 vbid; /**< vBucket ID (computed via hashkey) */
61
+ lcb_U8 done; /**< Whether we have a conclusive result for this entry */
62
+
63
+ /** Array of servers which have satisfied constraints */
64
+ lcbdur_SERVINFO sinfo[4];
65
+ } lcb_DURITEM;
66
+
67
+ struct lcbdur_PROCS_st;
68
+
69
+ enum {
70
+ LCBDUR_STATE_OBSPOLL = 0,
71
+ LCBDUR_STATE_INIT,
72
+ LCBDUR_STATE_TIMEOUT,
73
+ LCBDUR_STATE_IGNORE
74
+ };
75
+
76
+ /**
77
+ * A collection encompassing one or more entries which are to be checked for
78
+ * persistence
79
+ */
80
+ typedef struct lcb_DURSET_st {
81
+ lcb_MULTICMD_CTX mctx; /**< Base class returned to user for scheduling */
82
+ lcb_DURABILITYOPTSv0 opts; /**< Sanitized user options */
83
+ LCB_SSOBUF_DECLARE(lcb_DURITEM) entries_;
84
+ unsigned nremaining; /**< Number of entries remaining to poll for */
85
+ int waiting; /**< Set if currently awaiting an observe callback */
86
+ unsigned refcnt; /**< Reference count */
87
+ unsigned next_state; /**< Internal state */
88
+ lcb_error_t lasterr;
89
+ int is_durstore; /** Whether the callback should be DURSTORE */
90
+ lcb_string kvbufs; /**< Backing storage for key buffers */
91
+ const void *cookie; /**< User cookie */
92
+ hrtime_t ns_timeout; /**< Timestamp of next timeout */
93
+ void *timer;
94
+ lcb_t instance;
95
+ void *impldata;
96
+ } lcb_DURSET;
97
+
98
+ typedef struct lcbdur_PROCS_st {
99
+ lcb_error_t (*poll)(lcb_DURSET *dset);
100
+ lcb_error_t (*ent_add)(lcb_DURSET*,lcb_DURITEM*,const lcb_CMDENDURE*);
101
+ lcb_error_t (*schedule)(lcb_DURSET*);
102
+ void (*clean)(lcb_DURSET*);
103
+ } lcbdur_PROCS;
104
+
105
+ void
106
+ lcbdur_cas_update(lcb_t instance, lcb_DURSET *dset, lcb_error_t err,
107
+ const lcb_RESPOBSERVE *resp);
108
+ void
109
+ lcbdur_update_seqno(lcb_t instance, lcb_DURSET *dset,
110
+ const lcb_RESPOBSEQNO *resp);
111
+
112
+ /** Indicate that this durability command context is for an original storage op */
113
+ void
114
+ lcbdurctx_set_durstore(lcb_MULTICMD_CTX *ctx, int enabled);
115
+
116
+ lcb_MULTICMD_CTX *
117
+ lcb_observe_ctx_dur_new(lcb_t instance);
118
+
119
+ #ifdef LCBDUR_PRIV_SYMS
120
+
121
+ extern lcbdur_PROCS lcbdur_cas_procs;
122
+ extern lcbdur_PROCS lcbdur_seqno_procs;
123
+
124
+ #define RESFLD(e, f) (e)->result.f
125
+ #define ENT_CAS(e) (e)->request.options.cas
126
+ #define DSET_OPTFLD(ds, opt) (ds)->opts.opt
127
+ #define DSET_COUNT(ds) (ds)->entries_.count
128
+ #define DSET_ENTRIES(ds) LCB_SSOBUF_ARRAY(&(ds)->entries_, lcb_DURITEM)
129
+ #define DSET_PROCS(ds) ((ds)->opts.pollopts == LCB_DURABILITY_MODE_CAS \
130
+ ? (&lcbdur_cas_procs) : (&lcbdur_seqno_procs))
131
+ #define ENT_NUMINFO(ent) 4
132
+
133
+ /**
134
+ * Returns true if the entry is complete, false otherwise. This only assumes
135
+ * successful entries.
136
+ */
137
+ int lcbdur_ent_check_done(lcb_DURITEM *ent);
138
+
139
+ /**
140
+ * Set the logical state of the entry to done, and invoke the callback.
141
+ * It is safe to call this multiple times
142
+ */
143
+ void lcbdur_ent_finish(lcb_DURITEM *ent);
144
+
145
+ /**
146
+ * Called when the last (primitive) OBSERVE response is received for the entry.
147
+ */
148
+ void lcbdur_reqs_done(lcb_DURSET *dset);
149
+
150
+ /**
151
+ * Updates the state of the given entry and synchronizes it with the
152
+ * current server list.
153
+ *
154
+ * Specifically this function will return a list of
155
+ * servers which still need to be contacted, and will increment internal
156
+ * counters on behalf of those (still active) servers which the item has
157
+ * already been replicated to (and persisted to, if requested).
158
+ *
159
+ * This will invalidate any cached information of the cluster configuration
160
+ * in respect to this item has changed -- this includes things like servers
161
+ * moving indices or being recreated entirely.
162
+ *
163
+ * This function should be called during poll().
164
+ * @param item The item to update
165
+ * @param[out] ixarray An array of server indices which should be queried
166
+ * @param[out] nitems the number of effective entries in the array.
167
+ */
168
+ void
169
+ lcbdur_prepare_item(lcb_DURITEM *item, lcb_U16 *ixarray, size_t *nitems);
170
+
171
+ #define LCBDUR_UPDATE_PERSISTED 1
172
+ #define LCBDUR_UPDATE_REPLICATED 2
173
+ /**
174
+ * Update an item's status.
175
+ * @param item The item to update
176
+ * @param flags OR'd set of UPDATE_PERSISTED and UPDATE_REPLICATED
177
+ * @param ix The server index
178
+ */
179
+ void
180
+ lcbdur_update_item(lcb_DURITEM *item, int flags, int ix);
181
+
182
+ lcbdur_SERVINFO *
183
+ lcbdur_ent_getinfo(lcb_DURITEM *item, int srvix);
184
+
185
+ /**
186
+ * Schedules us to be notified with the given state within a particular amount
187
+ * of time. This is used both for the timeout and for the interval
188
+ */
189
+ void lcbdur_switch_state(lcb_DURSET *dset, unsigned int state);
190
+ #define lcbdur_ref(dset) (dset)->refcnt++;
191
+ void lcbdur_unref(lcb_DURSET *dset);
192
+
193
+ #endif /* PRIV_SYMS */
194
+
195
+ #ifdef __cplusplus
196
+ }
197
+ #endif
198
+
199
+ #endif
@@ -0,0 +1,409 @@
1
+ /* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2010-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
+ #include "internal.h"
19
+ #include "trace.h"
20
+
21
+ LIBCOUCHBASE_API
22
+ lcb_error_t
23
+ lcb_get3(lcb_t instance, const void *cookie, const lcb_CMDGET *cmd)
24
+ {
25
+ mc_PIPELINE *pl;
26
+ mc_PACKET *pkt;
27
+ mc_REQDATA *rdata;
28
+ mc_CMDQUEUE *q = &instance->cmdq;
29
+ lcb_error_t err;
30
+ lcb_uint8_t extlen = 0;
31
+ lcb_uint8_t opcode = PROTOCOL_BINARY_CMD_GET;
32
+ protocol_binary_request_gat gcmd;
33
+ protocol_binary_request_header *hdr = &gcmd.message.header;
34
+
35
+ if (LCB_KEYBUF_IS_EMPTY(&cmd->key)) {
36
+ return LCB_EMPTY_KEY;
37
+ }
38
+ if (cmd->cas) {
39
+ return LCB_OPTIONS_CONFLICT;
40
+ }
41
+
42
+ if (cmd->lock) {
43
+ extlen = 4;
44
+ opcode = PROTOCOL_BINARY_CMD_GET_LOCKED;
45
+ } else if (cmd->exptime || (cmd->cmdflags & LCB_CMDGET_F_CLEAREXP)) {
46
+ extlen = 4;
47
+ opcode = PROTOCOL_BINARY_CMD_GAT;
48
+ }
49
+
50
+ err = mcreq_basic_packet(q, (const lcb_CMDBASE *)cmd, hdr, extlen, &pkt, &pl,
51
+ MCREQ_BASICPACKET_F_FALLBACKOK);
52
+ if (err != LCB_SUCCESS) {
53
+ return err;
54
+ }
55
+
56
+ rdata = &pkt->u_rdata.reqdata;
57
+ rdata->cookie = cookie;
58
+ rdata->start = gethrtime();
59
+
60
+ hdr->request.magic = PROTOCOL_BINARY_REQ;
61
+ hdr->request.opcode = opcode;
62
+ hdr->request.datatype = PROTOCOL_BINARY_RAW_BYTES;
63
+ hdr->request.bodylen = htonl(extlen + ntohs(hdr->request.keylen));
64
+ hdr->request.opaque = pkt->opaque;
65
+ hdr->request.cas = 0;
66
+
67
+ if (extlen) {
68
+ gcmd.message.body.expiration = htonl(cmd->exptime);
69
+ }
70
+
71
+ if (cmd->cmdflags & LCB_CMD_F_INTERNAL_CALLBACK) {
72
+ pkt->flags |= MCREQ_F_PRIVCALLBACK;
73
+ }
74
+
75
+ memcpy(SPAN_BUFFER(&pkt->kh_span), gcmd.bytes, MCREQ_PKT_BASESIZE + extlen);
76
+ LCB_SCHED_ADD(instance, pl, pkt);
77
+ TRACE_GET_BEGIN(hdr, cmd);
78
+
79
+ return LCB_SUCCESS;
80
+ }
81
+
82
+ LIBCOUCHBASE_API
83
+ lcb_error_t lcb_get(lcb_t instance,
84
+ const void *command_cookie,
85
+ lcb_size_t num,
86
+ const lcb_get_cmd_t *const *items)
87
+ {
88
+ unsigned ii;
89
+ lcb_sched_enter(instance);
90
+
91
+ for (ii = 0; ii < num; ii++) {
92
+ const lcb_get_cmd_t *src = items[ii];
93
+ lcb_CMDGET dst;
94
+ lcb_error_t err;
95
+
96
+ memset(&dst, 0, sizeof(dst));
97
+ dst.key.contig.bytes = src->v.v0.key;
98
+ dst.key.contig.nbytes = src->v.v0.nkey;
99
+ dst._hashkey.contig.bytes = src->v.v0.hashkey;
100
+ dst._hashkey.contig.nbytes = src->v.v0.nhashkey;
101
+ dst.lock = src->v.v0.lock;
102
+ dst.exptime = src->v.v0.exptime;
103
+
104
+ err = lcb_get3(instance, command_cookie, &dst);
105
+ if (err != LCB_SUCCESS) {
106
+ lcb_sched_fail(instance);
107
+ return err;
108
+ }
109
+ }
110
+ lcb_sched_leave(instance);
111
+ SYNCMODE_INTERCEPT(instance)
112
+ }
113
+
114
+ LIBCOUCHBASE_API
115
+ lcb_error_t
116
+ lcb_unlock3(lcb_t instance, const void *cookie, const lcb_CMDUNLOCK *cmd)
117
+ {
118
+ mc_CMDQUEUE *cq = &instance->cmdq;
119
+ mc_PIPELINE *pl;
120
+ mc_PACKET *pkt;
121
+ mc_REQDATA *rd;
122
+ lcb_error_t err;
123
+ protocol_binary_request_header hdr;
124
+
125
+ if (LCB_KEYBUF_IS_EMPTY(&cmd->key)) {
126
+ return LCB_EMPTY_KEY;
127
+ }
128
+
129
+ err = mcreq_basic_packet(cq, cmd, &hdr, 0, &pkt, &pl,
130
+ MCREQ_BASICPACKET_F_FALLBACKOK);
131
+ if (err != LCB_SUCCESS) {
132
+ return err;
133
+ }
134
+
135
+ rd = &pkt->u_rdata.reqdata;
136
+ rd->cookie = cookie;
137
+ rd->start = gethrtime();
138
+
139
+ hdr.request.magic = PROTOCOL_BINARY_REQ;
140
+ hdr.request.opcode = PROTOCOL_BINARY_CMD_UNLOCK_KEY;
141
+ hdr.request.datatype = PROTOCOL_BINARY_RAW_BYTES;
142
+ hdr.request.bodylen = htonl((lcb_uint32_t)ntohs(hdr.request.keylen));
143
+ hdr.request.opaque = pkt->opaque;
144
+ hdr.request.cas = lcb_htonll(cmd->cas);
145
+
146
+ memcpy(SPAN_BUFFER(&pkt->kh_span), hdr.bytes, sizeof(hdr.bytes));
147
+ TRACE_UNLOCK_BEGIN(&hdr, cmd);
148
+ LCB_SCHED_ADD(instance, pl, pkt);
149
+ return LCB_SUCCESS;
150
+ }
151
+
152
+ LIBCOUCHBASE_API
153
+ lcb_error_t
154
+ lcb_unlock(lcb_t instance, const void *cookie, lcb_size_t num,
155
+ const lcb_unlock_cmd_t * const * items)
156
+ {
157
+ unsigned ii;
158
+ lcb_error_t err = LCB_SUCCESS;
159
+
160
+ lcb_sched_enter(instance);
161
+ for (ii = 0; ii < num; ii++) {
162
+ const lcb_unlock_cmd_t *src = items[ii];
163
+ lcb_CMDUNLOCK dst;
164
+ memset(&dst, 0, sizeof(dst));
165
+ dst.key.contig.bytes = src->v.v0.key;
166
+ dst.key.contig.nbytes = src->v.v0.nkey;
167
+ dst._hashkey.contig.bytes = src->v.v0.hashkey;
168
+ dst._hashkey.contig.nbytes = src->v.v0.nhashkey;
169
+ dst.cas = src->v.v0.cas;
170
+ err = lcb_unlock3(instance, cookie, &dst);
171
+ if (err != LCB_SUCCESS) {
172
+ break;
173
+ }
174
+ }
175
+ if (err != LCB_SUCCESS) {
176
+ lcb_sched_fail(instance);
177
+ return err;
178
+ } else {
179
+ lcb_sched_leave(instance);
180
+ SYNCMODE_INTERCEPT(instance)
181
+ }
182
+ }
183
+
184
+ typedef struct {
185
+ mc_REQDATAEX base;
186
+ unsigned r_cur;
187
+ unsigned r_max;
188
+ int remaining;
189
+ int vbucket;
190
+ lcb_replica_t strategy;
191
+ lcb_t instance;
192
+ } rget_cookie;
193
+
194
+ static void rget_dtor(mc_PACKET *pkt) {
195
+ rget_cookie *rck = (rget_cookie *)pkt->u_rdata.exdata;
196
+ if (! --rck->remaining) {
197
+ free(rck);
198
+ }
199
+ }
200
+
201
+ static void
202
+ rget_callback(mc_PIPELINE *pl, mc_PACKET *pkt, lcb_error_t err, const void *arg)
203
+ {
204
+ rget_cookie *rck = (rget_cookie *)pkt->u_rdata.exdata;
205
+ lcb_RESPGET *resp = (void *)arg;
206
+ lcb_RESPCALLBACK callback;
207
+ lcb_t instance = rck->instance;
208
+
209
+ callback = lcb_find_callback(instance, LCB_CALLBACK_GETREPLICA);
210
+
211
+ /** Figure out what the strategy is.. */
212
+ if (rck->strategy == LCB_REPLICA_SELECT || rck->strategy == LCB_REPLICA_ALL) {
213
+ /** Simplest */
214
+ if (rck->strategy == LCB_REPLICA_SELECT || rck->remaining == 1) {
215
+ resp->rflags |= LCB_RESP_F_FINAL;
216
+ }
217
+ callback(instance, LCB_CALLBACK_GETREPLICA, (const lcb_RESPBASE *)resp);
218
+ } else {
219
+ mc_CMDQUEUE *cq = &instance->cmdq;
220
+ mc_PIPELINE *nextpl = NULL;
221
+
222
+ /** FIRST */
223
+ do {
224
+ int nextix;
225
+ rck->r_cur++;
226
+ nextix = lcbvb_vbreplica(cq->config, rck->vbucket, rck->r_cur);
227
+ if (nextix > -1 && nextix < (int)cq->npipelines) {
228
+ /* have a valid next index? */
229
+ nextpl = cq->pipelines[nextix];
230
+ break;
231
+ }
232
+ } while (rck->r_cur < rck->r_max);
233
+
234
+ if (err == LCB_SUCCESS || rck->r_cur == rck->r_max || nextpl == NULL) {
235
+ resp->rflags |= LCB_RESP_F_FINAL;
236
+ callback(instance, LCB_CALLBACK_GETREPLICA, (lcb_RESPBASE *)resp);
237
+ /* refcount=1 . Free this now */
238
+ rck->remaining = 1;
239
+ } else if (err != LCB_SUCCESS) {
240
+ mc_PACKET *newpkt = mcreq_renew_packet(pkt);
241
+ newpkt->flags &= ~MCREQ_STATE_FLAGS;
242
+ mcreq_sched_add(nextpl, newpkt);
243
+ /* Use this, rather than lcb_sched_leave(), because this is being
244
+ * invoked internally by the library. */
245
+ mcreq_sched_leave(cq, 1);
246
+ /* wait */
247
+ rck->remaining = 2;
248
+ }
249
+ }
250
+
251
+ if (!--rck->remaining) {
252
+ free(rck);
253
+ }
254
+ (void)pl;
255
+ }
256
+
257
+ static mc_REQDATAPROCS rget_procs = {
258
+ rget_callback,
259
+ rget_dtor
260
+ };
261
+
262
+ LIBCOUCHBASE_API
263
+ lcb_error_t
264
+ lcb_rget3(lcb_t instance, const void *cookie, const lcb_CMDGETREPLICA *cmd)
265
+ {
266
+ /**
267
+ * Because we need to direct these commands to specific servers, we can't
268
+ * just use the 'basic_packet()' function.
269
+ */
270
+ mc_CMDQUEUE *cq = &instance->cmdq;
271
+ int vbid, ixtmp;
272
+ protocol_binary_request_header req;
273
+ unsigned r0, r1 = 0;
274
+ rget_cookie *rck = NULL;
275
+
276
+ if (LCB_KEYBUF_IS_EMPTY(&cmd->key)) {
277
+ return LCB_EMPTY_KEY;
278
+ }
279
+ if (!cq->config) {
280
+ return LCB_CLIENT_ETMPFAIL;
281
+ }
282
+ if (!LCBT_NREPLICAS(instance)) {
283
+ return LCB_NO_MATCHING_SERVER;
284
+ }
285
+
286
+ mcreq_map_key(cq, &cmd->key, &cmd->_hashkey, MCREQ_PKT_BASESIZE,
287
+ &vbid, &ixtmp);
288
+
289
+ /* The following blocks will also validate that the entire index range is
290
+ * valid. This is in order to ensure that we don't allocate the cookie
291
+ * if there aren't enough replicas online to satisfy the requirements */
292
+
293
+ if (cmd->strategy == LCB_REPLICA_SELECT) {
294
+ r0 = r1 = cmd->index;
295
+ if ((ixtmp = lcbvb_vbreplica(cq->config, vbid, r0)) < 0) {
296
+ return LCB_NO_MATCHING_SERVER;
297
+ }
298
+
299
+ } else if (cmd->strategy == LCB_REPLICA_ALL) {
300
+ unsigned ii;
301
+ r0 = 0;
302
+ r1 = LCBT_NREPLICAS(instance);
303
+ /* Make sure they're all online */
304
+ for (ii = 0; ii < LCBT_NREPLICAS(instance); ii++) {
305
+ if ((ixtmp = lcbvb_vbreplica(cq->config, vbid, ii)) < 0) {
306
+ return LCB_NO_MATCHING_SERVER;
307
+ }
308
+ }
309
+ } else {
310
+ for (r0 = 0; r0 < LCBT_NREPLICAS(instance); r0++) {
311
+ if ((ixtmp = lcbvb_vbreplica(cq->config, vbid, r0)) > -1) {
312
+ r1 = r0;
313
+ break;
314
+ }
315
+ }
316
+ if (r0 == LCBT_NREPLICAS(instance)) {
317
+ return LCB_NO_MATCHING_SERVER;
318
+ }
319
+ }
320
+
321
+ if (r1 < r0 || r1 >= cq->npipelines) {
322
+ return LCB_NO_MATCHING_SERVER;
323
+ }
324
+
325
+ /* Initialize the cookie */
326
+ rck = calloc(1, sizeof(*rck));
327
+ rck->base.cookie = cookie;
328
+ rck->base.start = gethrtime();
329
+ rck->base.procs = &rget_procs;
330
+ rck->strategy = cmd->strategy;
331
+ rck->r_cur = r0;
332
+ rck->r_max = LCBT_NREPLICAS(instance);
333
+ rck->instance = instance;
334
+ rck->vbucket = vbid;
335
+
336
+ /* Initialize the packet */
337
+ req.request.magic = PROTOCOL_BINARY_REQ;
338
+ req.request.opcode = PROTOCOL_BINARY_CMD_GET_REPLICA;
339
+ req.request.datatype = PROTOCOL_BINARY_RAW_BYTES;
340
+ req.request.vbucket = htons((lcb_uint16_t)vbid);
341
+ req.request.cas = 0;
342
+ req.request.extlen = 0;
343
+ req.request.keylen = htons((lcb_uint16_t)cmd->key.contig.nbytes);
344
+ req.request.bodylen = htonl((lcb_uint32_t)cmd->key.contig.nbytes);
345
+
346
+ do {
347
+ int curix;
348
+ mc_PIPELINE *pl;
349
+ mc_PACKET *pkt;
350
+
351
+ curix = lcbvb_vbreplica(cq->config, vbid, r0);
352
+ /* XXX: this is always expected to be in range. For the FIRST mode
353
+ * it will seek to the first valid index (checked above), and for the
354
+ * ALL mode, it will fail if not all replicas are already online
355
+ * (also checked above) */
356
+ pl = cq->pipelines[curix];
357
+ pkt = mcreq_allocate_packet(pl);
358
+ if (!pkt) {
359
+ return LCB_CLIENT_ENOMEM;
360
+ }
361
+
362
+ pkt->u_rdata.exdata = &rck->base;
363
+ pkt->flags |= MCREQ_F_REQEXT;
364
+
365
+ mcreq_reserve_key(pl, pkt, sizeof(req.bytes), &cmd->key);
366
+
367
+ req.request.opaque = pkt->opaque;
368
+ rck->remaining++;
369
+ mcreq_write_hdr(pkt, &req);
370
+ mcreq_sched_add(pl, pkt);
371
+ } while (++r0 < r1);
372
+
373
+ MAYBE_SCHEDLEAVE(instance);
374
+ return LCB_SUCCESS;
375
+ }
376
+
377
+ LIBCOUCHBASE_API
378
+ lcb_error_t
379
+ lcb_get_replica(lcb_t instance, const void *cookie, lcb_size_t num,
380
+ const lcb_get_replica_cmd_t * const * items)
381
+ {
382
+ unsigned ii;
383
+ lcb_error_t err = LCB_SUCCESS;
384
+
385
+ lcb_sched_enter(instance);
386
+ for (ii = 0; ii < num; ii++) {
387
+ const lcb_get_replica_cmd_t *src = items[ii];
388
+ lcb_CMDGETREPLICA dst;
389
+ memset(&dst, 0, sizeof(dst));
390
+ dst.key.contig.bytes = src->v.v1.key;
391
+ dst.key.contig.nbytes = src->v.v1.nkey;
392
+ dst._hashkey.contig.bytes = src->v.v1.hashkey;
393
+ dst._hashkey.contig.nbytes = src->v.v1.nhashkey;
394
+ dst.strategy = src->v.v1.strategy;
395
+ dst.index = src->v.v1.index;
396
+ err = lcb_rget3(instance, cookie, &dst);
397
+ if (err != LCB_SUCCESS) {
398
+ break;
399
+ }
400
+ }
401
+
402
+ if (err == LCB_SUCCESS) {
403
+ lcb_sched_leave(instance);
404
+ SYNCMODE_INTERCEPT(instance)
405
+ } else {
406
+ lcb_sched_fail(instance);
407
+ return err;
408
+ }
409
+ }