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,119 @@
1
+ /*
2
+ * Copyright 2015 Couchbase, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ #include <stdio.h>
18
+ #include <stdlib.h>
19
+ #include <string.h>
20
+ #include <assert.h>
21
+ #include <libcouchbase/couchbase.h>
22
+ #include <libcouchbase/api3.h>
23
+ #include <unistd.h>
24
+
25
+ #define VALUE_SIZE 1048576
26
+ static int counter = 0;
27
+ static const char *key = "Hello";
28
+ static char value[VALUE_SIZE];
29
+
30
+ static void store_cb(lcb_t instance, int cbtype, const lcb_RESPSTORE *resp)
31
+ {
32
+ assert(resp->rc == LCB_SUCCESS);
33
+ counter--;
34
+ printf("-");
35
+ fflush(stdout);
36
+ }
37
+
38
+ int main(int argc, char **argv)
39
+ {
40
+ lcb_t instance;
41
+ lcb_error_t rc;
42
+ int ii;
43
+ struct lcb_create_st options = { 0 };
44
+ lcb_CMDSTORE cmd = { 0 };
45
+
46
+ if (argc != 2) {
47
+ fprintf(stderr, "Must have connection string!\n");
48
+ exit(EXIT_FAILURE);
49
+ }
50
+
51
+ options.version = 3;
52
+ options.v.v3.connstr = argv[1];
53
+
54
+ rc = lcb_create(&instance, &options);
55
+ assert(rc == LCB_SUCCESS);
56
+
57
+ rc = lcb_cntl_string(instance, "operation_timeout", "120");
58
+ assert(rc == LCB_SUCCESS);
59
+
60
+ rc = lcb_connect(instance);
61
+ assert(rc == LCB_SUCCESS);
62
+
63
+ lcb_wait(instance);
64
+ rc = lcb_get_bootstrap_status(instance);
65
+ assert(rc == LCB_SUCCESS);
66
+
67
+ lcb_install_callback3(instance, LCB_CALLBACK_STORE, (lcb_RESPCALLBACK)store_cb);
68
+
69
+ // fill the value so valgrind doesn't warn about unitialized buffers
70
+ for (ii = 0; ii < VALUE_SIZE; ii++) {
71
+ value[ii] = '*';
72
+ }
73
+
74
+ LCB_CMD_SET_KEY(&cmd, key, strlen(key));
75
+ LCB_CMD_SET_VALUE(&cmd, value, VALUE_SIZE);
76
+ cmd.operation = LCB_SET;
77
+
78
+ printf("Running sample. This will schedule 1000 operations, invoking \n");
79
+ printf("an event loop tick after each one. The tick is non-blocking\n");
80
+ printf("It will sleep 500 microseconds between each operation to allow\n");
81
+ printf("for the asynchronous sending of the buffer's contents to the\n");
82
+ printf("server.\n\n");
83
+ printf("LEGEND:\n");
84
+ printf(" + => Operation Scheduled\n");
85
+ printf(" - => Operation Completed\n");
86
+
87
+ for (ii = 0; ii < 1000; ii++) {
88
+ lcb_sched_enter(instance);
89
+
90
+ // Note: lcb_store() implicitly does lcb_sched_enter(), lcb_store3(),
91
+ // and lcb_sched_leave().
92
+ rc = lcb_store3(instance, NULL, &cmd);
93
+ assert(rc == LCB_SUCCESS);
94
+ lcb_sched_leave(instance);
95
+ counter++;
96
+
97
+ // This is like lcb_wait(), except it does not block.
98
+ lcb_tick_nowait(instance);
99
+
100
+ // Sleep to demonstrate.. Naturally the longer the wait time, the
101
+ // clearer the difference between the tick and non-tick versions
102
+ usleep(100);
103
+ printf("+");
104
+ fflush(stdout);
105
+ }
106
+
107
+ printf("\nCalling lcb_wait()\n");
108
+ lcb_wait(instance);
109
+ printf("\n");
110
+ lcb_destroy(instance);
111
+ }
112
+
113
+ /**
114
+ * Sample output
115
+ * +++++++++++++--+----+----+-++++++++++++++-++----------+++-+--+-------++++++++--+------++-+++++++++-+++++-++++-+++++-+++++-++++-+++++-++++-++++++++++-++-++++-++++-++++-++++++-+++++-+++++-+++++-+++++-+++++-++++++++---++-++-++-+-+++-+-+++-+-+++-+-++-+-+-+++-+++-+-++-++-++-+--+-+-++-+++-+--+-+-++-+-+++++++++++++++-+-+-+-+--++-++++++++++++-++++-+++++++++-++++-++-++++++-+++++-+++-+++++-+++-+++++-++++-++++--++-++-++-+-++++++++-+---+++--++-+-+-+++--+-+--+-++++--++--+-+-+-+++++-+-+--++-+++-+-+--+--+-+--+++-+-++-+--+-++++-+--++++++++--+-++---++-++-++---+-+--+-++++--+++--+-+-+--+-+++-++++++---+------------+-----------------------------------------------------------++++----------------------------------------------------------------------------------------------------++++-+++++++--+-+--+-+++++-+--+--+--++++-+-++--+-+-+--++++-+--+++-+-+--+-+--+-++++++++-+----++-+-------------------------+------------------------------++++++++++-+-+++-+-+--+-+---++-+-++++-+-+-+-+--+++-+--------+------++---++++-+++-+-+-+-+--+++-+++-+--+-+-+++-+-++-+-+-+--+-++----+---+------+++++++--+++-+++++-------+-++++++---------+++++-+---+-+-+++-++-----+-----+++++-+-+-++++++--+-+-+--+-+-+-++++--+-+--+-+++++--+--+-++-+----+-----++++++---++++-+++++-++++++-++++-++++-+++++-++++++++-+++++-+++++-+++++-++++-++++-+++++-+++++-+++++-+++++-++++-++++-++++++-+++++-++++-+++-++++-+++++-++++-+++-++++++-+++-++-+++-+--++-++-++-+--+++++----+++-+--+--+-+--++-+++-+-+--+--++-+++-+--+-++++--+-+-+-++-+++-+--+-+--+-+-++++--+-+--+-+-+-+++-+--+-+--+-++-+-++-+-+-+-+-+--+-++-+-+-------+-----+------+------------------+--------------------+------------------------------------------------------+---++++++++-++++-+++++++-++-+++++-+++++-++++-+++++-++++++-++++-+++-++-+-+-+++-++-+-+++-+-++-+++++++++------++-++-+--+-+--++++++++-----+-+++--+-+-+--+-+-+++-++-+-+-+--+-++-++++-+--+--+-+-+++-+++-+--+-+--+-++-+------+--------------+------------------------------------------------------+-------+++++++++-++++++-+++-++++-++++++-+
116
+ * Calling lcb_wait()
117
+ * ----------------------------
118
+ *
119
+ */
@@ -0,0 +1,83 @@
1
+ #include <libcouchbase/couchbase.h>
2
+ #include <libcouchbase/api3.h>
3
+ #include <libcouchbase/views.h>
4
+ #include <string>
5
+ #include <cstring>
6
+ #include <cstdlib>
7
+ #include <cstdio>
8
+ #include <cassert>
9
+
10
+ static int cbCounter = 0;
11
+
12
+ extern "C" {
13
+ static void viewCallback(lcb_t, int, const lcb_RESPVIEWQUERY *rv)
14
+ {
15
+ if (rv->rflags & LCB_RESP_F_FINAL) {
16
+ printf("*** META FROM VIEWS ***\n");
17
+ fprintf(stderr, "%.*s\n", (int)rv->nvalue, rv->value);
18
+ return;
19
+ }
20
+
21
+ printf("Got row callback from LCB: RC=0x%X, DOCID=%.*s. KEY=%.*s\n",
22
+ rv->rc,
23
+ (int)rv->ndocid, rv->docid,
24
+ (int)rv->nkey, rv->key);
25
+
26
+ if (rv->docresp) {
27
+ printf(" Document for response. RC=0x%X. CAS=0x%llx\n",
28
+ rv->docresp->rc, rv->docresp->cas);
29
+ }
30
+
31
+ cbCounter++;
32
+ }
33
+ }
34
+
35
+ int main(int argc, const char **argv)
36
+ {
37
+ lcb_t instance;
38
+ lcb_create_st cropts;
39
+ memset(&cropts, 0, sizeof cropts);
40
+ const char *connstr = "couchbase://localhost/beer-sample";
41
+
42
+ if (argc > 1) {
43
+ if (strcmp(argv[1], "--help") == 0) {
44
+ fprintf(stderr, "Usage: %s CONNSTR\n", argv[0]);
45
+ exit(EXIT_SUCCESS);
46
+ } else {
47
+ connstr = argv[1];
48
+ }
49
+ }
50
+
51
+ cropts.version = 3;
52
+ cropts.v.v3.connstr = connstr;
53
+ lcb_error_t rc;
54
+ rc = lcb_create(&instance, &cropts);
55
+ assert(rc == LCB_SUCCESS);
56
+ rc = lcb_connect(instance);
57
+ assert(rc == LCB_SUCCESS);
58
+ lcb_wait(instance);
59
+ assert(lcb_get_bootstrap_status(instance) == LCB_SUCCESS);
60
+
61
+ // Nao, set up the views..
62
+ lcb_CMDVIEWQUERY vq = { 0 };
63
+ std::string dName = "beer";
64
+ std::string vName = "by_location";
65
+ std::string options = "reduce=false";
66
+
67
+ vq.callback = viewCallback;
68
+ vq.ddoc = dName.c_str();
69
+ vq.nddoc = dName.length();
70
+ vq.view = vName.c_str();
71
+ vq.nview = vName.length();
72
+ vq.optstr = options.c_str();
73
+ vq.noptstr = options.size();
74
+
75
+ vq.cmdflags = LCB_CMDVIEWQUERY_F_INCLUDE_DOCS;
76
+
77
+ rc = lcb_view_query(instance, NULL, &vq);
78
+ assert(rc == LCB_SUCCESS);
79
+ lcb_wait(instance);
80
+ lcb_destroy(instance);
81
+ printf("Total Invocations=%d\n", cbCounter);
82
+ return 0;
83
+ }
@@ -0,0 +1,150 @@
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_CXXWRAP_H
19
+ #define LCB_CXXWRAP_H
20
+
21
+ /* Note that the contents of this file are here only to provide inline
22
+ * definitions for backwards compatibility with older code. Users of the library
23
+ * should assume that structures do _not_ behave differently under C++ and must
24
+ * be explicitly initialized with their appropriate members.
25
+ *
26
+ * For newer code which wants to use pure "C-Style" initializers, define the
27
+ * LCB_NO_DEPR_CXX_CTORS macro so that the structures remain to function
28
+ * as they do in plain C.
29
+ */
30
+
31
+ #if defined(__cplusplus) && !defined(LCB_NO_DEPR_CXX_CTORS)
32
+
33
+ #include <cstdlib>
34
+ #include <cstring>
35
+
36
+
37
+ #define LCB_DEPR_CTORS_GET \
38
+ lcb_get_cmd_st() { std::memset(this, 0, sizeof(*this)); } \
39
+ lcb_get_cmd_st(const void *key, lcb_size_t nkey=0, lcb_time_t exptime=0, int lock=0) { \
40
+ version = 0; \
41
+ v.v0.key = key; \
42
+ if (key != NULL && nkey == 0) { \
43
+ v.v0.nkey = std::strlen((const char *)key); \
44
+ } else { \
45
+ v.v0.nkey = nkey; \
46
+ } \
47
+ v.v0.exptime = exptime; v.v0.lock = lock; v.v0.hashkey = NULL; v.v0.nhashkey = 0; \
48
+ }
49
+
50
+
51
+ #define LCB_DEPR_CTORS_RGET \
52
+ lcb_get_replica_cmd_st() { std::memset(this, 0, sizeof(*this)); } \
53
+ lcb_get_replica_cmd_st(const void *key, lcb_size_t nkey, lcb_replica_t strategy=LCB_REPLICA_FIRST, int index=0) { \
54
+ version = 1; v.v1.key = key; v.v1.nkey = nkey; v.v1.hashkey = NULL; v.v1.nhashkey = 0; v.v1.strategy = strategy; v.v1.index = index; \
55
+ }
56
+
57
+ #define LCB_DEPR_CTORS_UNL \
58
+ lcb_unlock_cmd_st() { std::memset(this, 0, sizeof(*this)); } \
59
+ lcb_unlock_cmd_st(const void *key, lcb_size_t nkey, lcb_cas_t cas) { \
60
+ version = 0; v.v0.key = key; v.v0.nkey = nkey; v.v0.cas = cas; v.v0.hashkey = NULL; v.v0.nhashkey = 0; \
61
+ }
62
+
63
+ #define LCB_DEPR_CTORS_STORE \
64
+ lcb_store_cmd_st() { std::memset(this, 0, sizeof(*this)); } \
65
+ lcb_store_cmd_st(lcb_storage_t operation, const void *key, lcb_size_t nkey, \
66
+ const void *bytes=NULL, lcb_size_t nbytes=0, lcb_uint32_t flags=0, \
67
+ lcb_time_t exptime=0, lcb_cas_t cas=0, lcb_datatype_t datatype=0) { \
68
+ version = 0; v.v0.operation = operation; v.v0.key = key; v.v0.nkey = nkey; v.v0.cas = cas; \
69
+ v.v0.bytes = bytes; v.v0.nbytes = nbytes; v.v0.flags = flags; v.v0.datatype = datatype; \
70
+ v.v0.exptime = exptime; v.v0.hashkey = NULL; v.v0.nhashkey = 0; \
71
+ }
72
+
73
+ #define LCB_DEPR_CTORS_ARITH \
74
+ lcb_arithmetic_cmd_st() { std::memset(this, 0, sizeof(*this)); } \
75
+ lcb_arithmetic_cmd_st(const void *key, lcb_size_t nkey, lcb_int64_t delta, int create=0, \
76
+ lcb_uint64_t initial=0, lcb_time_t exptime=0) { \
77
+ version = 0; v.v0.key = key; v.v0.nkey = nkey; v.v0.exptime = exptime; \
78
+ v.v0.delta = delta; v.v0.create = create; v.v0.initial = initial; \
79
+ v.v0.hashkey = NULL; v.v0.nhashkey = 0; \
80
+ }
81
+
82
+
83
+ #define LCB_DEPR_CTORS_OBS \
84
+ lcb_observe_cmd_st() { std::memset(this, 0, sizeof(*this)); } \
85
+ lcb_observe_cmd_st(const void *key, lcb_size_t nkey) { \
86
+ version = 0; v.v0.key = key; v.v0.nkey = nkey; v.v0.hashkey = NULL; v.v0.nhashkey = 0; \
87
+ }
88
+
89
+ #define LCB_DEPR_CTORS_RM \
90
+ lcb_remove_cmd_st() { std::memset(this, 0, sizeof(*this)); } \
91
+ lcb_remove_cmd_st(const void *key, lcb_size_t nkey=0, lcb_cas_t cas=0) { \
92
+ version = 0; v.v0.key = key; \
93
+ if (key != NULL && nkey == 0) { v.v0.nkey = std::strlen((const char *)key);}\
94
+ else { v.v0.nkey = nkey; } \
95
+ v.v0.cas = cas; v.v0.hashkey = NULL; v.v0.nhashkey = 0; \
96
+ }
97
+
98
+ #define LCB_DEPR_CTORS_STATS \
99
+ lcb_server_stats_cmd_st(const char *name=NULL, lcb_size_t nname=0) { \
100
+ version = 0; v.v0.name = name; v.v0.nname = nname; \
101
+ if (name != NULL && nname == 0) { v.v0.nname = std::strlen(name); } \
102
+ else { v.v0.nname = nname; } \
103
+ }
104
+
105
+ #define LCB_DEPR_CTORS_VERBOSITY \
106
+ lcb_verbosity_cmd_st(lcb_verbosity_level_t level=LCB_VERBOSITY_WARNING, const char *server=NULL) { \
107
+ version = 0; v.v0.server = server; v.v0.level = level; \
108
+ }
109
+
110
+ #define LCB_DEPR_CTORS_VERSIONS \
111
+ lcb_server_version_cmd_st() { std::memset(this, 0, sizeof(*this)); }
112
+
113
+ #define LCB_DEPR_CTORS_FLUSH \
114
+ lcb_flush_cmd_st() { std::memset(this, 0, sizeof(*this)); }
115
+
116
+ #define LCB_DEPR_CTORS_CRST \
117
+ lcb_create_st(const char *host=NULL, const char *user=NULL,\
118
+ const char *passwd=NULL, const char *bucket=NULL, \
119
+ struct lcb_io_opt_st *io=NULL, lcb_type_t type=LCB_TYPE_BUCKET) { \
120
+ version = 2; v.v2.host = host; v.v2.user = user; v.v2.passwd = passwd; \
121
+ v.v2.bucket = bucket; v.v2.io = io; v.v2.type = type; v.v2.mchosts = NULL; \
122
+ v.v2.transports = NULL; \
123
+ }
124
+
125
+ #define LCB_DEPR_CTORS_HTTP \
126
+ lcb_http_cmd_st() { std::memset(this, 0, sizeof(*this)); } \
127
+ lcb_http_cmd_st(const char *path, lcb_size_t npath, const void *body, \
128
+ lcb_size_t nbody, lcb_http_method_t method, \
129
+ int chunked, const char *content_type) { \
130
+ version = 0; v.v0.path = path; v.v0.npath = npath; v.v0.body = body; \
131
+ v.v0.nbody = nbody; v.v0.method = method; v.v0.chunked = chunked; \
132
+ v.v0.content_type = content_type; \
133
+ }
134
+ #else
135
+ /* Not C++ */
136
+ #define LCB_DEPR_CTORS_GET
137
+ #define LCB_DEPR_CTORS_RGET
138
+ #define LCB_DEPR_CTORS_UNL
139
+ #define LCB_DEPR_CTORS_STORE
140
+ #define LCB_DEPR_CTORS_ARITH
141
+ #define LCB_DEPR_CTORS_OBS
142
+ #define LCB_DEPR_CTORS_RM
143
+ #define LCB_DEPR_CTORS_STATS
144
+ #define LCB_DEPR_CTORS_VERBOSITY
145
+ #define LCB_DEPR_CTORS_VERSIONS
146
+ #define LCB_DEPR_CTORS_FLUSH
147
+ #define LCB_DEPR_CTORS_HTTP
148
+ #define LCB_DEPR_CTORS_CRST
149
+ #endif
150
+ #endif /* LCB_CXXWRAP_H */
@@ -0,0 +1,1689 @@
1
+ /* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2010-2016 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
+ #ifndef LCB_APILEGACY_H
18
+ #define LCB_APILEGACY_H
19
+
20
+ #ifdef __cplusplus
21
+ extern "C" {
22
+ #endif
23
+
24
+ #ifndef LIBCOUCHBASE_COUCHBASE_H
25
+ #error "include <libcouchbase/couchbase.h> first!"
26
+ #endif
27
+
28
+
29
+ /**@private
30
+ * Note that hashkey/groupid is not a supported feature of Couchbase Server
31
+ * and this client. It should be considered volatile and experimental.
32
+ * Using this could lead to an unbalanced cluster, inability to interoperate
33
+ * with the data from other languages, not being able to use the
34
+ * Couchbase Server UI to look up documents and other possible future
35
+ * upgrade/migration concerns.
36
+ */
37
+ #define LCB__HKFIELDS \
38
+ /**
39
+ @private
40
+ @volatile
41
+ Do not use. This field exists to support older code. Using a dedicated
42
+ hashkey will cause problems with your data in various systems. */ \
43
+ const void *hashkey; \
44
+ \
45
+ lcb_SIZE nhashkey; /**<@private*/
46
+
47
+ /**
48
+ * @defgroup lcb-legacy-api Legacy Key-Value API
49
+ * @brief Operate on one or more key values
50
+ * @details
51
+ *
52
+ * The key-value APIs are high performance APIs utilizing the memcached protocol.
53
+ * Use these APIs to access data by its unique key.
54
+ *
55
+ * These APIs are designed so that each function is passed in one or more
56
+ * "Command Structures". A command structure is a small structure detailing a
57
+ * specific key and contains options and modifiers for the operation as it
58
+ * relates to that key.
59
+ *
60
+ * All the command structures are currently layed out like so:
61
+ *
62
+ * @code{.c}
63
+ * {
64
+ * int version;
65
+ * union {
66
+ * struct CMDv0 v0;
67
+ * struct CMDv1 v1;
68
+ * } v;
69
+ * }
70
+ * @endcode
71
+ *
72
+ * These top level structures are _wrapper_ structures and are present to ensure
73
+ * portability between different versions of the library. To employ these
74
+ * structures within the command, you may do:
75
+ *
76
+ * @code{.c}
77
+ * lcb_get_cmd_t gcmd_wrap = { 0 }, *cmdp_wrap = &gcmd_wrap;
78
+ * lcb_GETCMDv0 *gcmd = &gcmd_wrap->v.v0;
79
+ * gcmd->key = key;
80
+ * gcmd->nkey = strlen(key);
81
+ * lcb_get(instance, cookie, 1, &gcmd_wrap);
82
+ * @endcode
83
+ *
84
+ * @addtogroup lcb-legacy-api
85
+ * @{
86
+ */
87
+
88
+ /**
89
+ * @brief Get Command Structure
90
+ */
91
+ typedef struct {
92
+ const void *key; /**< Key to retrieve */
93
+ lcb_SIZE nkey; /**< Key length */
94
+
95
+ /**
96
+ * If this parameter is specified and `lock` is _not_ set then the server
97
+ * will also update the object's expiration time while retrieving the key.
98
+ * If `lock` _is_ set then this is the maximum amount of time the lock
99
+ * may be held (before an unlock) before the server will forecfully unlock
100
+ * the key.
101
+ */
102
+ lcb_time_t exptime;
103
+
104
+ /**
105
+ * If this parameter is set then the server will in addition to retrieving
106
+ * the item also lock the item, making it so that subsequent attempts to
107
+ * lock and/or modify the same item will fail with an error
108
+ * (either @ref LCB_KEY_EEXISTS or @ref LCB_ETMPFAIL).
109
+ *
110
+ * The lock will be released when one of the following happens:
111
+ *
112
+ * 1. The item is explicitly unlocked (see lcb_unlock())
113
+ * 2. The lock expires (See the #exptime parameter)
114
+ * 3. The item is modified using lcb_store(), and being provided with the
115
+ * correct _CAS_.
116
+ *
117
+ */
118
+ int lock;
119
+ LCB__HKFIELDS
120
+ } lcb_GETCMDv0;
121
+
122
+ /**
123
+ * @brief lcb_get() Command Wrapper Structure
124
+ * @see lcb_GETCMDv0
125
+ */
126
+ typedef struct lcb_get_cmd_st {
127
+ int version;
128
+ union { lcb_GETCMDv0 v0; } v;
129
+ LCB_DEPR_CTORS_GET
130
+ } lcb_get_cmd_t;
131
+
132
+ /**
133
+ * @brief Inner response structure for a get operation
134
+ */
135
+ typedef struct {
136
+ const void *key;
137
+ lcb_SIZE nkey;
138
+ const void *bytes;
139
+ lcb_SIZE nbytes;
140
+ lcb_U32 flags; /**< Server side flags stored with the item */
141
+ lcb_cas_t cas; /**< CAS representing current mutation state of the item */
142
+ lcb_U8 datatype; /**< @private */
143
+ } lcb_GETRESPv0;
144
+
145
+ /**
146
+ * @brief lcb_get() response wrapper structure
147
+ * @see lcb_GETRESPv0
148
+ */
149
+ typedef struct {
150
+ int version;
151
+ union {
152
+ lcb_GETRESPv0 v0;
153
+ } v;
154
+ } lcb_get_resp_t;
155
+
156
+ /**
157
+ * The callback function for a "get-style" request.
158
+ *
159
+ * @param instance the instance performing the operation
160
+ * @param cookie the cookie associated with with the command
161
+ * @param error The status of the operation
162
+ * @param resp More information about the actual item (only key
163
+ * and nkey is valid if `error != LCB_SUCCESS`)
164
+ * @committed
165
+ */
166
+ typedef void (*lcb_get_callback)(
167
+ lcb_t instance, const void *cookie, lcb_error_t error, const lcb_get_resp_t *resp);
168
+
169
+ /**
170
+ * @brief Set the callback to be invoked when an item is received as a result
171
+ * of an lcb_get() operation.
172
+ * @param callback the new callback to install. Pass NULL to only query the
173
+ * current callback
174
+ * @return the previous callback
175
+ * @see lcb_get()
176
+ * @committed
177
+ */
178
+ LIBCOUCHBASE_API
179
+ lcb_get_callback lcb_set_get_callback(lcb_t, lcb_get_callback callback);
180
+
181
+ /**
182
+ * Get a number of values from the cache.
183
+ *
184
+ * If you specify a non-zero value for expiration, the server will
185
+ * update the expiration value on the item (refer to the
186
+ * documentation on lcb_store to see the meaning of the
187
+ * expiration). All other members should be set to zero.
188
+ *
189
+ * @code{.c}
190
+ * lcb_get_cmd_t *get = calloc(1, sizeof(*get));
191
+ * get->version = 0;
192
+ * get->v.v0.key = "my-key";
193
+ * get->v.v0.nkey = strlen(get->v.v0.key);
194
+ * // Set an expiration of 60 (optional)
195
+ * get->v.v0.exptime = 60;
196
+ * lcb_get_cmd_t* commands[] = { get };
197
+ * lcb_get(instance, NULL, 1, commands);
198
+ * @endcode
199
+ *
200
+ * It is possible to get an item with a lock that has a timeout. It can
201
+ * then be unlocked with either a CAS operation or with an explicit
202
+ * unlock command.
203
+ *
204
+ * You may specify the expiration value for the lock in the
205
+ * expiration (setting it to 0 cause the server to use the default
206
+ * value).
207
+ *
208
+ * Get and lock the key:
209
+ *
210
+ * @code{.c}
211
+ * lcb_get_cmd_t *get = calloc(1, sizeof(*get));
212
+ * get->version = 0;
213
+ * get->v.v0.key = "my-key";
214
+ * get->v.v0.nkey = strlen(get->v.v0.key);
215
+ * // Set a lock expiration of 5 (optional)
216
+ * get->v.v0.lock = 1;
217
+ * get->v.v0.exptime = 5;
218
+ * lcb_get_cmd_t* commands[] = { get };
219
+ * lcb_get(instance, NULL, 1, commands);
220
+ * @endcode
221
+ *
222
+ * @param instance the instance used to batch the requests from
223
+ * @param command_cookie A cookie passed to all of the notifications
224
+ * from this command
225
+ * @param num the total number of elements in the commands array
226
+ * @param commands the array containing the items to get
227
+ * @return_rc
228
+ *
229
+ * Operation-specific errors received in callbacks include:
230
+ * @cb_err ::LCB_KEY_ENOENT if the key does not exist
231
+ * @cb_err ::LCB_ETMPFAIL if the `lock` option was set in the command and the item
232
+ * was already locked.
233
+ *
234
+ * @committed
235
+ */
236
+ LIBCOUCHBASE_API
237
+ lcb_error_t lcb_get(lcb_t instance, const void *command_cookie, lcb_SIZE num,
238
+ const lcb_get_cmd_t *const *commands);
239
+
240
+ /**@}*/
241
+
242
+ /**
243
+ * @name Legacy get-from-replica API
244
+ *
245
+ * @{
246
+ */
247
+
248
+
249
+ typedef struct { const void *key; lcb_SIZE nkey; LCB__HKFIELDS } lcb_GETREPLICACMDv0;
250
+
251
+ /**
252
+ * @brief Command for lcb_get_replica()
253
+ */
254
+ typedef struct {
255
+ const void *key;
256
+ lcb_SIZE nkey;
257
+ LCB__HKFIELDS
258
+ lcb_replica_t strategy; /**< Strategy to use */
259
+ /**If #strategy is LCB_REPLICA_SELECT, specific the replica index to use */
260
+ int index;
261
+ } lcb_GETREPLICACMDv1;
262
+
263
+ /**
264
+ * @brief wrapper structure for lcb_get_replica()
265
+ * @see lcb_GETREPLICACMDv1
266
+ */
267
+ typedef struct lcb_get_replica_cmd_st {
268
+ int version;
269
+ union {
270
+ lcb_GETREPLICACMDv0 v0;
271
+ lcb_GETREPLICACMDv1 v1;
272
+ } v;
273
+ LCB_DEPR_CTORS_RGET
274
+ } lcb_get_replica_cmd_t;
275
+
276
+ /**
277
+ * Get a number of replca values from the cache.
278
+ *
279
+ * @brief Get items from replica. This is like lcb_get() but is useful when
280
+ * an item from the master cannot be retrieved.
281
+ *
282
+ * From command version 1, it is possible to select strategy of how to
283
+ * select the replica node. Currently three strategies are available:
284
+ * 1. LCB_REPLICA_FIRST: Previously accessible and default as of 2.0.8,
285
+ * the caller will get a reply from the first replica to successfully
286
+ * reply within the timeout for the operation or will receive an
287
+ * error.
288
+ *
289
+ * 2. LCB_REPLICA_ALL: Ask all replicas to send documents/item back.
290
+ *
291
+ * 3. LCB_REPLICA_SELECT: Select one replica by the index in the
292
+ * configuration starting from zero. This approach can more quickly
293
+ * receive all possible replies for a given topology, but it can
294
+ * also generate false negatives.
295
+ *
296
+ * @note
297
+ * applications should not assume the order of the
298
+ * replicas indicates more recent data is at a lower index number.
299
+ * It is up to the application to determine which version of a
300
+ * document/item it may wish to use in the case of retrieving data from a replica.
301
+ *
302
+ * ### Examples
303
+ *
304
+ * #### Get document from the second replica
305
+ *
306
+ * @code{.c}
307
+ * lcb_get_replica_cmd_t *get = calloc(1, sizeof(*get));
308
+ * get->version = 1;
309
+ * get->v.v1.key = "my-key";
310
+ * get->v.v1.nkey = strlen(get->v.v1.key);
311
+ * get->v.v1.strategy = LCB_REPLICA_SELECT;
312
+ * get->v.v1.index = 2;
313
+ * lcb_get_replica_cmd_st* commands[] = { get };
314
+ * lcb_get_replica(instance, NULL, 1, commands);
315
+ * @endcode
316
+ *
317
+ * #### Get document from the first available replica
318
+ * @code{.c}
319
+ * get->v.v1.strategy = LCB_REPLICA_FIRST;
320
+ * lcb_get_replica_cmd_st* commands[] = { get };
321
+ * lcb_get_replica(instance, NULL, 1, commands);
322
+ * @endcode
323
+ *
324
+ * #### Get document from all replicas
325
+ * This will will generate lcb_get_num_replicas() responses
326
+ *
327
+ * @code{.c}
328
+ * get->v.v1.strategy = LCB_REPLICA_ALL;
329
+ * lcb_get_replica_cmd_st* commands[] = { get };
330
+ * lcb_get_replica(instance, NULL, 1, commands);
331
+ * @endcode
332
+ *
333
+ *
334
+ * @param instance the instance used to batch the requests from
335
+ * @param command_cookie A cookie passed to all of the notifications
336
+ * from this command
337
+ * @param num the total number of elements in the commands array
338
+ * @param commands the array containing the items to get
339
+ * @return_rc
340
+ *
341
+ * For operation-specific error codes received in the callback, see lcb_get()
342
+ *
343
+ * @committed
344
+ */
345
+ LIBCOUCHBASE_API
346
+ lcb_error_t lcb_get_replica(lcb_t instance,
347
+ const void *command_cookie,
348
+ lcb_SIZE num,
349
+ const lcb_get_replica_cmd_t *const *commands);
350
+
351
+ /**
352
+ * @brief lcb_unlock() Command structure
353
+ * @see lcb_GETRESPv0
354
+ */
355
+ typedef struct {
356
+ const void *key;
357
+ lcb_SIZE nkey;
358
+ lcb_cas_t cas; /**< You _must_ populate this with the CAS */
359
+ LCB__HKFIELDS
360
+ } lcb_UNLOCKCMDv0;
361
+
362
+ /**@brief lcb_unlock() Wrapper structure
363
+ * @see lcb_UNLOCKCMDv0 */
364
+ typedef struct lcb_unlock_cmd_st {
365
+ int version;
366
+ union {
367
+ lcb_UNLOCKCMDv0 v0;
368
+ } v;
369
+ LCB_DEPR_CTORS_UNL
370
+ } lcb_unlock_cmd_t;
371
+
372
+ /** @brief lcb_unlock() response structure */
373
+ typedef struct {
374
+ const void *key;
375
+ lcb_SIZE nkey;
376
+ } lcb_UNLOCKRESPv0;
377
+
378
+ /**@brief lcb_unlock() wrapper response structure
379
+ * @see lcb_UNLOCKRESPv0 */
380
+ typedef struct {
381
+ int version;
382
+ union {
383
+ lcb_UNLOCKRESPv0 v0;
384
+ } v;
385
+ } lcb_unlock_resp_t;
386
+
387
+ /**
388
+ * The callback function for an unlock request.
389
+ *
390
+ * @param instance the instance performing the operation
391
+ * @param cookie the cookie associated with with the command
392
+ * @param error The status of the operation
393
+ * @param resp More information about the operation
394
+ * @committed
395
+ */
396
+ typedef void (*lcb_unlock_callback)(lcb_t instance,
397
+ const void *cookie,
398
+ lcb_error_t error,
399
+ const lcb_unlock_resp_t *resp);
400
+ /**@committed*/
401
+ LIBCOUCHBASE_API
402
+ lcb_unlock_callback lcb_set_unlock_callback(lcb_t, lcb_unlock_callback);
403
+
404
+ /**
405
+ * Unlock the key locked with lcb_get() with the lcb_GETCMDv0::lock option
406
+ *
407
+ * You should initialize the `key`, `nkey` and `cas` member in the
408
+ * lcb_item_st structure for the keys to get. All other
409
+ * members should be set to zero.
410
+ *
411
+ * @code{.c}
412
+ * lcb_unlock_cmd_t *unlock = calloc(1, sizeof(*unlock));
413
+ * unlock->version = 0;
414
+ * unlock->v.v0.key = "my-key";
415
+ * unlock->v.v0.nkey = strlen(unlock->v.v0.key);
416
+ * unlock->v.v0.cas = 0x666;
417
+ * lcb_unlock_cmd_t* commands[] = { unlock };
418
+ * lcb_unlock(instance, NULL, 1, commands);
419
+ * @endcode
420
+ *
421
+ * @param instance the handle to lcb
422
+ * @param command_cookie A cookie passed to all of the notifications
423
+ * from this command
424
+ * @param num the total number of elements in the commands array
425
+ * @param commands the array containing the items to unlock
426
+ * @return The status of the operation
427
+ * @return_rc
428
+ *
429
+ * Operation specific error codes:
430
+ * @cb_err ::LCB_ETMPFAIL if the item is not locked, or if the wrong CAS was
431
+ * specified
432
+ *
433
+ * @committed
434
+ */
435
+ LIBCOUCHBASE_API
436
+ lcb_error_t lcb_unlock(lcb_t instance,
437
+ const void *command_cookie,
438
+ lcb_SIZE num,
439
+ const lcb_unlock_cmd_t *const *commands);
440
+ /**@}*/
441
+
442
+ /**
443
+ * @brief lcb_store() Command structure
444
+ *
445
+ * This structure is used to define an item to be stored on the server.
446
+ */
447
+ typedef struct {
448
+ const void *key;
449
+ lcb_SIZE nkey;
450
+ const void *bytes; /**< Value to store */
451
+ lcb_SIZE nbytes; /**< Length of value to store */
452
+ lcb_U32 flags; /**< User-defined flags stored along with the item */
453
+ /**If present, the server will check that the item's _current_ CAS matches
454
+ * the value specified here. If this check fails the command will fail with
455
+ * an @ref LCB_KEY_EEXISTS error.
456
+ *
457
+ * @warning For @ref LCB_APPEND and @ref LCB_PREPEND, this field should be
458
+ * `0`. */
459
+ lcb_cas_t cas;
460
+ lcb_U8 datatype; /**< @private */
461
+ /**Expiration for the item. `0` means never expire.
462
+ * @warning for @ref LCB_APPEND and @ref LCB_PREPEND, this field should be
463
+ * `0`. */
464
+ lcb_time_t exptime;
465
+ lcb_storage_t operation; /**< **Mandatory**. Mutation type */
466
+ LCB__HKFIELDS
467
+ } lcb_STORECMDv0;
468
+
469
+ /** @brief Wrapper structure for lcb_STORECMDv0 */
470
+ typedef struct lcb_store_cmd_st {
471
+ int version;
472
+ union {
473
+ lcb_STORECMDv0 v0;
474
+ } v;
475
+ LCB_DEPR_CTORS_STORE
476
+ } lcb_store_cmd_t;
477
+
478
+
479
+
480
+ typedef struct {
481
+ const void *key; /**< Key that was stored */
482
+ lcb_SIZE nkey; /**< Size of key that was stored */
483
+ lcb_cas_t cas; /**< Cas representing current mutation */
484
+ /** mutation tokenen for mutation. This is used with N1QL and durability */
485
+ const lcb_MUTATION_TOKEN *mutation_token;
486
+ } lcb_STORERESPv0;
487
+
488
+ /** @brief Wrapper structure for lcb_STORERESPv0 */
489
+ typedef struct {
490
+ int version;
491
+ union {
492
+ lcb_STORERESPv0 v0;
493
+ } v;
494
+ } lcb_store_resp_t;
495
+
496
+ /**
497
+ * The callback function for a storage request.
498
+ *
499
+ * @param instance the instance performing the operation
500
+ * @param operation the operation performed
501
+ * @param cookie the cookie associated with with the command
502
+ * @param error The status of the operation
503
+ * @param resp More information about the item related to the store
504
+ * operation. (only key and nkey is valid if
505
+ * error != LCB_SUCCESS)
506
+ * @committed
507
+ */
508
+ typedef void (*lcb_store_callback)(lcb_t instance, const void *cookie,
509
+ lcb_storage_t operation, lcb_error_t error, const lcb_store_resp_t *resp);
510
+
511
+ /**
512
+ * @brief Set the callback to be received when an item has been stored
513
+ * @param callback the new callback to install, or `NULL` to just query the
514
+ * current callback
515
+ * @return the previous callback
516
+ * @see lcb_store()
517
+ * @committed
518
+ */
519
+ LIBCOUCHBASE_API
520
+ lcb_store_callback lcb_set_store_callback(lcb_t, lcb_store_callback callback);
521
+
522
+ /**
523
+ * Store an item in the cluster.
524
+ *
525
+ * You may initialize all of the members in the the
526
+ * lcb_item_st structure with the values you want.
527
+ * Values larger than `30*24*60*60` seconds (30 days) are
528
+ * interpreted as absolute times (from the epoch). Unused members
529
+ * should be set to zero.
530
+ *
531
+ * @code{.c}
532
+ * lcb_store_cmd_st *store = calloc(1, sizeof(*store));
533
+ * store->version = 0;
534
+ * store->v.v0.key = "my-key";
535
+ * store->v.v0.nkey = strlen(store->v.v0.key);
536
+ * store->v.v0.bytes = "{ value:666 }"
537
+ * store->v.v0.nbytes = strlen(store->v.v0.bytes);
538
+ * store->v.v0.flags = 0xdeadcafe;
539
+ * store->v.v0.cas = 0x1234;
540
+ * store->v.v0.exptime = 0x666;
541
+ * store->v.v0.operation = LCB_REPLACE;
542
+ * lcb_store_cmd_st* commands[] = { store };
543
+ * lcb_store(instance, NULL, 1, commands);
544
+ * @endcode
545
+ *
546
+ * @param instance the instance used to batch the requests from
547
+ * @param command_cookie A cookie passed to all of the notifications
548
+ * from this command
549
+ * @param num the total number of elements in the commands array
550
+ * @param commands the array containing the items to store
551
+ * @return_rc
552
+ *
553
+ * Operation-specific error codes include:
554
+ * @cb_err ::LCB_KEY_ENOENT if ::LCB_REPLACE was used and the key does not exist
555
+ * @cb_err ::LCB_KEY_EEXISTS if ::LCB_ADD was used and the key already exists
556
+ * @cb_err ::LCB_KEY_EEXISTS if the CAS was specified (for an operation other
557
+ * than ::LCB_ADD) and the item exists on the server with a different
558
+ * CAS
559
+ * @cb_err ::LCB_KEY_EEXISTS if the item was locked and the CAS supplied did
560
+ * not match the locked item's CAS (or if no CAS was supplied)
561
+ * @cb_err ::LCB_NOT_STORED if an ::LCB_APPEND or ::LCB_PREPEND operation was
562
+ * performed and the item did not exist on the server.
563
+ * @cb_err ::LCB_E2BIG if the size of the value exceeds the cluster per-item
564
+ * value limit (currently 20MB).
565
+ *
566
+ * @committed
567
+ */
568
+ LIBCOUCHBASE_API
569
+ lcb_error_t lcb_store(lcb_t instance, const void *command_cookie, lcb_SIZE num,
570
+ const lcb_store_cmd_t *const *commands);
571
+
572
+
573
+ /**@brief Command structure for arithmetic operations
574
+ * This is contained within the @ref lcb_arithmetic_cmd_t structure */
575
+ typedef struct {
576
+ const void *key;
577
+ lcb_SIZE nkey;
578
+
579
+ /**Expiration time for the item. Note this is _only_ valid if #create is
580
+ * set to true. */
581
+ lcb_time_t exptime;
582
+
583
+ /**
584
+ * If the item does not exist on the server, set this to true to force
585
+ * the creation of the item. Otherwise the operation will fail with
586
+ * @ref LCB_KEY_ENOENT
587
+ */
588
+ int create;
589
+
590
+ /**
591
+ * This number will be added to the current value on the server; if this is
592
+ * negative then the current value will be decremented; if positive then
593
+ * the current value will be incremented.
594
+ *
595
+ * On the server, the counter value is a 64 bit unsigned integer, whose
596
+ * maximum value is `UINT64_MAX` If an integer overflow occurs as a result
597
+ * of adding the `delta` value to the existing value on the server, then the
598
+ * value on the server will wrap around; thus for example, if the existing
599
+ * value was `UINT64_MAX-1` and `delta` was supplied as `2`, the new value
600
+ * would be `1`.
601
+ */
602
+ lcb_S64 delta;
603
+
604
+ /**
605
+ * If the `create` field is true, this is the initial value for the counter
606
+ * iff the item does not yet exist.
607
+ */
608
+ lcb_U64 initial;
609
+ LCB__HKFIELDS
610
+ } lcb_ARITHCMDv0;
611
+
612
+ /** @brief Wrapper structure for @ref lcb_ARITHCMDv0 */
613
+ typedef struct lcb_arithmetic_cmd_st {
614
+ int version;
615
+ /** @brief Wrapper union for @ref lcb_ARITHCMDv0 */
616
+ union { /** @brief Fill this structure */ lcb_ARITHCMDv0 v0; } v;
617
+
618
+ LCB_DEPR_CTORS_ARITH
619
+ } lcb_arithmetic_cmd_t;
620
+
621
+ typedef struct {
622
+ const void *key;
623
+ lcb_SIZE nkey;
624
+ lcb_U64 value; /**< Current numerical value of the counter */
625
+ lcb_cas_t cas;
626
+ /** mutation token for mutation. This is used with N1QL and durability */
627
+ const lcb_MUTATION_TOKEN *mutation_token;
628
+ } lcb_ARITHRESPv0;
629
+
630
+ typedef struct {
631
+ int version;
632
+ union {
633
+ lcb_ARITHRESPv0 v0;
634
+ } v;
635
+ } lcb_arithmetic_resp_t;
636
+
637
+ /**
638
+ * The callback function for an arithmetic request.
639
+ *
640
+ * @param instance the instance performing the operation
641
+ * @param cookie the cookie associated with with the command
642
+ * @param error The status of the operation
643
+ * @param resp More information about the operation (only key
644
+ * and nkey is valid if error != LCB_SUCCESS)
645
+ *
646
+ * @committed
647
+ */
648
+ typedef void (*lcb_arithmetic_callback)
649
+ (lcb_t instance, const void *cookie, lcb_error_t error, const lcb_arithmetic_resp_t *resp);
650
+
651
+ /**@committed*/
652
+ LIBCOUCHBASE_API
653
+ lcb_arithmetic_callback lcb_set_arithmetic_callback(lcb_t, lcb_arithmetic_callback);
654
+
655
+ /**
656
+ * Perform arithmetic operation on a keys value.
657
+ *
658
+ * You should initialize the key, nkey and expiration member in
659
+ * the lcb_item_st structure for the keys to update.
660
+ * Values larger than 30*24*60*60 seconds (30 days) are
661
+ * interpreted as absolute times (from the epoch). All other
662
+ * members should be set to zero.
663
+ *
664
+ * @code{.c}
665
+ * lcb_arithmetic_cmd_t *arithmetic = calloc(1, sizeof(*arithmetic));
666
+ * arithmetic->version = 0;
667
+ * arithmetic->v.v0.key = "counter";
668
+ * arithmetic->v.v0.nkey = strlen(arithmetic->v.v0.key);
669
+ * arithmetic->v.v0.initial = 0x666;
670
+ * arithmetic->v.v0.create = 1;
671
+ * arithmetic->v.v0.delta = 1;
672
+ * lcb_arithmetic_cmd_t* commands[] = { arithmetic };
673
+ * lcb_arithmetic(instance, NULL, 1, commands);
674
+ * @endcode
675
+ *
676
+ * @param instance the handle to lcb
677
+ * @param command_cookie A cookie passed to all of the notifications
678
+ * from this command
679
+ * @param num the total number of elements in the commands array
680
+ * @param commands the array containing the items to operate on
681
+ * @return_rc
682
+ *
683
+ * The following operation-specific error codes may be delivered in the callback:
684
+ * @cb_err ::LCB_KEY_ENOENT if the key does not exist (and `create` was not
685
+ * specified in the command
686
+ * @cb_err ::LCB_DELTA_BADVAL if the existing value could not be parsed into
687
+ * a number.
688
+ * @committed
689
+ */
690
+ LIBCOUCHBASE_API
691
+ lcb_error_t lcb_arithmetic(lcb_t instance,
692
+ const void *command_cookie,
693
+ lcb_SIZE num,
694
+ const lcb_arithmetic_cmd_t *const *commands);
695
+
696
+ typedef enum {
697
+ /**
698
+ * Only sends a command to the master. In this case the callback will
699
+ * be invoked only once for the master, and then another time with the
700
+ * NULL callback
701
+ */
702
+ LCB_OBSERVE_MASTER_ONLY = 0x01
703
+ } lcb_observe_options_t;
704
+
705
+ #define LCB_OBSERVE_FIELDS_COMMON \
706
+ const void *key; \
707
+ lcb_SIZE nkey; \
708
+ LCB__HKFIELDS /**<@private*/
709
+
710
+ typedef struct {
711
+ LCB_OBSERVE_FIELDS_COMMON
712
+ } lcb_OBSERVECMDv0;
713
+
714
+ /**@brief lcb_observe() Command structure */
715
+ typedef struct {
716
+ LCB_OBSERVE_FIELDS_COMMON
717
+ lcb_observe_options_t options;
718
+ } lcb_OBSERVECMDv1;
719
+
720
+ /**@brief lcb_observe() Command wrapper structure
721
+ * @see lcb_OBSERVECMDv1 */
722
+ typedef struct lcb_observe_cmd_st {
723
+ int version;
724
+ union {
725
+ lcb_OBSERVECMDv0 v0;
726
+ lcb_OBSERVECMDv1 v1;
727
+ } v;
728
+
729
+ LCB_DEPR_CTORS_OBS
730
+ } lcb_observe_cmd_t;
731
+
732
+ /**
733
+ * @brief Response Structure for lcb_observe()
734
+ */
735
+ typedef struct {
736
+ const void *key;
737
+ lcb_SIZE nkey;
738
+ lcb_cas_t cas; /**< CAS of the item on this server */
739
+ lcb_observe_t status; /**< Status flags */
740
+ int from_master; /**< zero if key came from replica */
741
+ lcb_time_t ttp; /**< average time to persist on this server */
742
+ lcb_time_t ttr; /**< average time to replicate on this server */
743
+ } lcb_OBSERVERESPv0;
744
+
745
+ typedef struct {
746
+ int version;
747
+ union {
748
+ lcb_OBSERVERESPv0 v0;
749
+ } v;
750
+ } lcb_observe_resp_t;
751
+
752
+ /**
753
+ * The callback function for an observe request.
754
+ *
755
+ * @param instance the instance performing the operation
756
+ * @param cookie the cookie associated with with the command
757
+ * @param error The status of the operation
758
+ * @param resp More information about the operation (only key
759
+ * and nkey is valid if error != LCB_SUCCESS)
760
+ */
761
+ typedef void (*lcb_observe_callback)(lcb_t instance,
762
+ const void *cookie,
763
+ lcb_error_t error,
764
+ const lcb_observe_resp_t *resp);
765
+
766
+ LIBCOUCHBASE_API
767
+ lcb_observe_callback lcb_set_observe_callback(lcb_t, lcb_observe_callback);
768
+
769
+ /**
770
+ * Observe key
771
+ *
772
+ * @code{.c}
773
+ * lcb_observe_cmd_t *observe = calloc(1, sizeof(*observe));
774
+ * observe->version = 0;
775
+ * observe->v.v0.key = "my-key";
776
+ * observe->v.v0.nkey = strlen(observe->v.v0.key);
777
+ * lcb_observe_cmd_t* commands[] = { observe };
778
+ * lcb_observe(instance, NULL, 1, commands);
779
+ * @endcode
780
+ *
781
+ * @param instance the instance used to batch the requests from
782
+ * @param command_cookie A cookie passed to all of the notifications
783
+ * from this command
784
+ * @param num the total number of elements in the commands array
785
+ * @param commands the array containing the items to observe
786
+ * @return_rc
787
+ *
788
+ * The following operation-specific error codes may be returned in the
789
+ * callback:
790
+ *
791
+ * @cb_err ::LCB_UNKNOWN_COMMAND, ::LCB_NOT_SUPPORTED if the cluster does not
792
+ * support this operation (such as a Couchbase cluster older than
793
+ * version 2.0, or a memcached bucket).
794
+ *
795
+ * @committed
796
+ */
797
+ LIBCOUCHBASE_API
798
+ lcb_error_t lcb_observe(lcb_t instance,
799
+ const void *command_cookie,
800
+ lcb_SIZE num,
801
+ const lcb_observe_cmd_t *const *commands);
802
+
803
+ /**
804
+ * @name Remove items from the cluster (Legacy API)
805
+ * Delete items from the cluster
806
+ * @{
807
+ */
808
+ typedef struct {
809
+ const void *key;
810
+ lcb_SIZE nkey;
811
+ lcb_cas_t cas;
812
+ LCB__HKFIELDS /**<@private*/
813
+ } lcb_REMOVECMDv0;
814
+
815
+ typedef struct lcb_remove_cmd_st {
816
+ int version;
817
+ union {
818
+ lcb_REMOVECMDv0 v0;
819
+ } v;
820
+ LCB_DEPR_CTORS_RM
821
+ } lcb_remove_cmd_t;
822
+
823
+
824
+ typedef struct {
825
+ const void *key;
826
+ lcb_SIZE nkey;
827
+ lcb_cas_t cas;
828
+ /** mutation token for mutation. This is used with N1QL and durability */
829
+ const lcb_MUTATION_TOKEN *mutation_token;
830
+ } lcb_REMOVERESPv0;
831
+
832
+ typedef struct {
833
+ int version;
834
+ union {
835
+ lcb_REMOVERESPv0 v0;
836
+ } v;
837
+ } lcb_remove_resp_t;
838
+
839
+ /**
840
+ * The callback function for a remove request.
841
+ *
842
+ * @param instance the instance performing the operation
843
+ * @param cookie the cookie associated with with the command
844
+ * @param error The status of the operation
845
+ * @param resp More information about the operation
846
+ */
847
+ typedef void (*lcb_remove_callback)(lcb_t instance, const void *cookie,
848
+ lcb_error_t error, const lcb_remove_resp_t *resp);
849
+
850
+ LIBCOUCHBASE_API
851
+ lcb_remove_callback lcb_set_remove_callback(lcb_t, lcb_remove_callback);
852
+
853
+ /**
854
+ * Remove a key from the cluster
855
+ *
856
+ * @code{.c}
857
+ * lcb_remove_cmd_t *remove = calloc(1, sizeof(*remove));
858
+ * remove->version = 0;
859
+ * remove->v.v0.key = "my-key";
860
+ * remove->v.v0.nkey = strlen(remove->v.v0.key);
861
+ * remove->v.v0.cas = 0x666;
862
+ * lcb_remove_cmd_t* commands[] = { remove };
863
+ * lcb_remove(instance, NULL, 1, commands);
864
+ * @endcode
865
+ *
866
+ * @param instance the instance used to batch the requests from
867
+ * @param command_cookie A cookie passed to all of the notifications
868
+ * from this command
869
+ * @param num the total number of elements in the commands array
870
+ * @param commands the array containing the items to remove
871
+ * @return_rc
872
+ *
873
+ * The following operation-specific error codes are returned in the callback
874
+ * @cb_err ::LCB_KEY_ENOENT if the key does not exist
875
+ * @cb_err ::LCB_KEY_EEXISTS if the CAS was specified and it does not match the
876
+ * CAS on the server
877
+ * @cb_err ::LCB_KEY_EEXISTS if the item was locked and no CAS (or an incorrect
878
+ * CAS) was specified.
879
+ *
880
+ * @committed
881
+ */
882
+ LIBCOUCHBASE_API
883
+ lcb_error_t lcb_remove(lcb_t instance,
884
+ const void *command_cookie,
885
+ lcb_SIZE num,
886
+ const lcb_remove_cmd_t *const *commands);
887
+
888
+ /**
889
+ * @name Modify an item's expiration time
890
+ * Modify an item's expiration time, keeping it alive without modifying
891
+ * it
892
+ * @{
893
+ */
894
+ typedef lcb_get_cmd_t lcb_touch_cmd_t;
895
+ typedef struct {
896
+ const void *key;
897
+ lcb_SIZE nkey;
898
+ lcb_cas_t cas;
899
+ } lcb_TOUCHRESPv0;
900
+ typedef struct {
901
+ int version;
902
+ union {
903
+ lcb_TOUCHRESPv0 v0;
904
+ } v;
905
+ } lcb_touch_resp_t;
906
+
907
+ /**
908
+ * The callback function for a touch request.
909
+ *
910
+ * @param instance the instance performing the operation
911
+ * @param cookie the cookie associated with with the command
912
+ * @param error The status of the operation
913
+ * @param resp More information about the operation
914
+ * @committed
915
+ */
916
+ typedef void (*lcb_touch_callback)(lcb_t instance,
917
+ const void *cookie,
918
+ lcb_error_t error,
919
+ const lcb_touch_resp_t *resp);
920
+ /**@committed*/
921
+ LIBCOUCHBASE_API
922
+ lcb_touch_callback lcb_set_touch_callback(lcb_t, lcb_touch_callback);
923
+
924
+ /**
925
+ * Touch (set expiration time) on a number of values in the cache.
926
+ *
927
+ * Values larger than 30*24*60*60 seconds (30 days) are
928
+ * interpreted as absolute times (from the epoch). All other
929
+ * members should be set to zero.
930
+ *
931
+ * @par Example
932
+ * @code{.c}
933
+ * lcb_touch_cmd_t touch = { 0 };
934
+ * lcb_touch_cmd_t *cmdlist = { &touch; }
935
+ * touch->v.v0.key = "my-key";
936
+ * touch->v.v0.nkey = strlen(item->v.v0.key);
937
+ * touch->v.v0.exptime = 300; // 5 minutes
938
+ * lcb_touch(instance, NULL, 1, cmdlist);
939
+ * @endcode
940
+ *
941
+ * @param instance the instance used to batch the requests from
942
+ * @param cookie A cookie passed to all of the notifications from this command
943
+ * @param num the total number of elements in the commnands array
944
+ * @param commands the array containing the items to touch
945
+ * @return_rc
946
+ *
947
+ * Errors received in callbacks:
948
+ * @cb_err ::LCB_KEY_ENOENT if the item does not exist
949
+ * @cb_err ::LCB_KEY_EEXISTS if the item is locked
950
+ */
951
+ LIBCOUCHBASE_API
952
+ lcb_error_t lcb_touch(lcb_t instance,
953
+ const void *cookie,
954
+ lcb_SIZE num,
955
+ const lcb_touch_cmd_t *const *commands);
956
+
957
+ /**
958
+ * @{
959
+ */
960
+
961
+ /** @brief Single-key command structure for lcb_durability_poll() */
962
+ typedef struct {
963
+ const void *key;
964
+ size_t nkey;
965
+ LCB__HKFIELDS /**<@private*/
966
+
967
+ /**
968
+ * CAS to be checked against. If the key exists on the server
969
+ * with a different CAS, the error (in the response) is set to
970
+ * LCB_KEY_EEXISTS
971
+ */
972
+ lcb_cas_t cas;
973
+ const lcb_MUTATION_TOKEN *mutation_token;
974
+ } lcb_DURABILITYCMDv0;
975
+
976
+ /**
977
+ * @brief lcb_durability_poll() Command wrapper
978
+ * @see lcb_DURABILITYCMDv0
979
+ */
980
+ typedef struct lcb_durability_cmd_st {
981
+ int version;
982
+ union {
983
+ lcb_DURABILITYCMDv0 v0;
984
+ } v;
985
+ } lcb_durability_cmd_t;
986
+
987
+
988
+ /** @brief Response structure for lcb_durability_poll() */
989
+ typedef struct {
990
+ const void *key;
991
+ lcb_SIZE nkey;
992
+ /**
993
+ * if this entry failed, this contains the reason, e.g.
994
+ *
995
+ * - `LCB_KEY_EEXISTS`: The key exists with a different CAS than expected
996
+ * - `LCB_KEY_ENOENT`: The key was not found in the master cache
997
+ * - `LCB_ETIMEDOUT`: The key may exist, but the required servers needed
998
+ * took too long to respond
999
+ */
1000
+ lcb_error_t err;
1001
+
1002
+ /** if found with a different CAS, this is the CAS */
1003
+ lcb_cas_t cas;
1004
+
1005
+ /**
1006
+ * Whether the key was persisted to the master.
1007
+ * For deletes, this means the key was removed from disk
1008
+ */
1009
+ unsigned char persisted_master;
1010
+
1011
+ /**
1012
+ * Whether the key exists on the master. For deletes, this means
1013
+ * the key does not exist in cache
1014
+ */
1015
+ unsigned char exists_master;
1016
+
1017
+ /** how many nodes (including master) this item was persisted to */
1018
+ unsigned char npersisted;
1019
+
1020
+ /** how many nodes (excluding master) this item was replicated to */
1021
+ unsigned char nreplicated;
1022
+
1023
+ /**
1024
+ * Total number of observe responses received for the node.
1025
+ * This can be used as a performance metric to determine how many
1026
+ * total OBSERVE probes were sent until this key was 'done'
1027
+ */
1028
+ unsigned short nresponses;
1029
+ } lcb_DURABILITYRESPv0;
1030
+
1031
+ typedef struct lcb_durability_resp_st {
1032
+ int version;
1033
+ union {
1034
+ lcb_DURABILITYRESPv0 v0;
1035
+ } v;
1036
+ } lcb_durability_resp_t;
1037
+
1038
+ /**
1039
+ * Schedule a durability check on a set of keys. This callback wraps (somewhat)
1040
+ * the lower-level OBSERVE (lcb_observe) operations so that users may check if
1041
+ * a key is endured, e.g. if a key is persisted accross "at least" n number of
1042
+ * servers
1043
+ *
1044
+ * When each key has its criteria satisfied, the durability callback (see above)
1045
+ * is invoked for it.
1046
+ *
1047
+ * The callback may also be invoked when a condition is encountered that will
1048
+ * prevent the key from ever satisfying the criteria.
1049
+ *
1050
+ * @param instance the lcb handle
1051
+ * @param cookie a pointer to be received with each callback
1052
+ * @param options a set of options and criteria for this durability check
1053
+ * @param cmds a list of key specifications to check for
1054
+ * @param ncmds how many key specifications reside in the list
1055
+ * @return ::LCB_SUCCESS if scheduled successfuly
1056
+ * @return ::LCB_DURABILITY_ETOOMANY if the criteria specified exceeds the
1057
+ * current satisfiable limit (e.g. `persist_to` was set to 4, but
1058
+ * there are only 2 servers online in the cluster) and `cap_max`
1059
+ * was not specified.
1060
+ * @return ::LCB_DUPLICATE_COMMANDS if the same key was found more than once
1061
+ * in the command list
1062
+ *
1063
+ * The following error codes may be returned in the callback
1064
+ * @cb_err ::LCB_ETIMEDOUT if the specified interval expired before the client
1065
+ * could verify the durability requirements were satisfied. See
1066
+ * @ref LCB_CNTL_DURABILITY_TIMEOUT and lcb_DURABILITYOPTSv0::timeout
1067
+ * for more information on how to increase this interval.
1068
+ *
1069
+ * Example (after receiving a store callback)
1070
+ * @code{.c}
1071
+ *
1072
+ * lcb_durability_cmd_t cmd, cmds[1];
1073
+ * lcb_durability_opts_t opts;
1074
+ * lcb_error_t err;
1075
+ *
1076
+ * memset(&opts, 0, sizeof(opts);
1077
+ * memset(&cmd, 0, sizeof(cmd);
1078
+ * cmds[0] = &cmd;
1079
+ *
1080
+ *
1081
+ * opts.persist_to = 2;
1082
+ * opts.replicate_to = 1;
1083
+ *
1084
+ * cmd.v.v0.key = resp->v.v0.key;
1085
+ * cmd.v.v0.nkey = resp->v.v0.nkey;
1086
+ * cmd.v.v0.cas = resp->v.v0.cas;
1087
+ *
1088
+ * //schedule the command --
1089
+ * err = lcb_durability_poll(instance, cookie, &opts, &cmds, 1);
1090
+ * // error checking omitted --
1091
+ *
1092
+ * // later on, in the callback. resp is now a durability_resp_t* --
1093
+ * if (resp->v.v0.err == LCB_SUCCESS) {
1094
+ * printf("Key was endured!\n");
1095
+ * } else {
1096
+ * printf("Key did not endure in time\n");
1097
+ * printf("Replicated to: %u replica nodes\n", resp->v.v0.nreplicated);
1098
+ * printf("Persisted to: %u total nodes\n", resp->v.v0.npersisted);
1099
+ * printf("Did we persist to master? %u\n",
1100
+ * resp->v.v0.persisted_master);
1101
+ * printf("Does the key exist in the master's cache? %u\n",
1102
+ * resp->v.v0.exists_master);
1103
+ *
1104
+ * switch (resp->v.v0.err) {
1105
+ *
1106
+ * case LCB_KEY_EEXISTS:
1107
+ * printf("Seems like someone modified the key already...\n");
1108
+ * break;
1109
+ *
1110
+ * case LCB_ETIMEDOUT:
1111
+ * printf("Either key does not exist, or the servers are too slow\n");
1112
+ * printf("If persisted_master or exists_master is true, then the"
1113
+ * "server is simply slow.",
1114
+ * "otherwise, the key does not exist\n");
1115
+ *
1116
+ * break;
1117
+ *
1118
+ * default:
1119
+ * printf("Got other error. This is probably a network error\n");
1120
+ * break;
1121
+ * }
1122
+ * }
1123
+ * @endcode
1124
+ * @committed
1125
+ */
1126
+ LIBCOUCHBASE_API
1127
+ lcb_error_t lcb_durability_poll(lcb_t instance,
1128
+ const void *cookie,
1129
+ const lcb_durability_opts_t *options,
1130
+ lcb_SIZE ncmds,
1131
+ const lcb_durability_cmd_t *const *cmds);
1132
+
1133
+ /**
1134
+ * Callback for durability status. The callback is invoked on completion
1135
+ * of each key (i.e. only one callback is invoked per-key).
1136
+ *
1137
+ * @param lcb_t the instance
1138
+ * @param cookie the user cookie
1139
+ * @param err an error
1140
+ * @param res a response containing information about the key.
1141
+ */
1142
+ typedef void (*lcb_durability_callback)(lcb_t instance,
1143
+ const void *cookie,
1144
+ lcb_error_t err,
1145
+ const lcb_durability_resp_t *res);
1146
+
1147
+ LIBCOUCHBASE_API
1148
+ lcb_durability_callback lcb_set_durability_callback(lcb_t,
1149
+ lcb_durability_callback);
1150
+
1151
+ /**@}*/
1152
+
1153
+ /**
1154
+ * @name Retrieve statistics from the cluster
1155
+ * @{
1156
+ */
1157
+ typedef struct {
1158
+ const void *name; /**< The name of the stats group to get */
1159
+ lcb_SIZE nname; /**< The number of bytes in name */
1160
+ } lcb_STATSCMDv0;
1161
+
1162
+ typedef struct lcb_server_stats_cmd_st {
1163
+ int version;
1164
+ union { lcb_STATSCMDv0 v0; } v;
1165
+ LCB_DEPR_CTORS_STATS
1166
+ } lcb_server_stats_cmd_t;
1167
+
1168
+ /**
1169
+ * @brief Per-server, per-stat response structure for lcb_server_stats()
1170
+ *
1171
+ * This structure is returned for each statistic requested by lcb_server_stats().
1172
+ * As both the number of servers replying to this function as well as the number
1173
+ * of stats per server is variable, the application should pay attention to the
1174
+ * following semantics:
1175
+ *
1176
+ * 1. A new statistic item is delivered with the `server_endpoint` and `key`
1177
+ * being non-`NULL`
1178
+ * 2. If a specific server encounters an error, the `key` and `bytes` fields
1179
+ * will be NULL.
1180
+ * 3. Once no more replies remain from any of the servers, a final callback
1181
+ * will be delivered with the `server_endpoint` field set to `NULL`.
1182
+ *
1183
+ * It is recommended to index statistics twice; first based on the
1184
+ * `server_endpoint` field and then on the `key` field. It is likely that the
1185
+ * same `key` will be received multiple times for different `server_endpoints`.
1186
+ */
1187
+ typedef struct {
1188
+ const char *server_endpoint; /**< Server which the statistic is from */
1189
+ const void *key; /**< Statistic name */
1190
+ lcb_SIZE nkey;
1191
+ const void *bytes; /**< Statistic value */
1192
+ lcb_SIZE nbytes;
1193
+ } lcb_STATSRESPv0;
1194
+
1195
+ /** @brief Wrapper structure for lcb_STATSRESPv0 */
1196
+ typedef struct lcb_server_stat_resp_st {
1197
+ int version;
1198
+ union {
1199
+ lcb_STATSRESPv0 v0;
1200
+ } v;
1201
+ } lcb_server_stat_resp_t;
1202
+
1203
+ /**
1204
+ * The callback function for a stat request
1205
+ *
1206
+ * @param instance the instance performing the operation
1207
+ * @param cookie the cookie associated with with the command
1208
+ * @param error The status of the operation
1209
+ * @param resp response data
1210
+ */
1211
+ typedef void (*lcb_stat_callback)(lcb_t instance,
1212
+ const void *cookie,
1213
+ lcb_error_t error,
1214
+ const lcb_server_stat_resp_t *resp);
1215
+ LIBCOUCHBASE_API
1216
+ lcb_stat_callback lcb_set_stat_callback(lcb_t, lcb_stat_callback);
1217
+
1218
+ /**
1219
+ * Request server statistics. Without a key specified the server will
1220
+ * respond with a "default" set of statistics information. Each piece of
1221
+ * statistical information is returned in its own packet (key contains
1222
+ * the name of the statistical item and the body contains the value in
1223
+ * ASCII format). The sequence of return packets is terminated with a
1224
+ * packet that contains no key and no value.
1225
+ *
1226
+ * The command will signal about transfer completion by passing NULL as
1227
+ * the server endpoint and 0 for key length. Note that key length will
1228
+ * be zero when some server responds with error. In latter case server
1229
+ * endpoint argument will indicate the server address.
1230
+ *
1231
+ * @code{.c}
1232
+ * lcb_server_stats_cmd_t *cmd = calloc(1, sizeof(*cmd));
1233
+ * cmd->version = 0;
1234
+ * cmd->v.v0.name = "tap";
1235
+ * cmd->v.v0.nname = strlen(cmd->v.v0.nname);
1236
+ * lcb_server_stats_cmd_t* commands[] = { cmd };
1237
+ * lcb_server_stats(instance, NULL, 1, commands);
1238
+ * @endcode
1239
+ *
1240
+ * @param instance the instance used to batch the requests from
1241
+ * @param command_cookie a cookie passed to all of the notifications
1242
+ * from this command
1243
+ * @param num the total number of elements in the commands array
1244
+ * @param commands the array containing the statistic to get
1245
+ * @return_rc
1246
+ *
1247
+ * The following callbacks may be returned in the callback
1248
+ * @cb_err ::LCB_KEY_ENOENT if key passed is unrecognized
1249
+ *
1250
+ * @todo Enumerate some useful stats here
1251
+ */
1252
+ LIBCOUCHBASE_API
1253
+ lcb_error_t lcb_server_stats(lcb_t instance,
1254
+ const void *command_cookie,
1255
+ lcb_SIZE num,
1256
+ const lcb_server_stats_cmd_t *const *commands);
1257
+
1258
+ /**@}*/
1259
+
1260
+
1261
+ typedef struct lcb_server_version_cmd_st {
1262
+ int version;
1263
+ union { struct { const void *notused; } v0; } v;
1264
+ LCB_DEPR_CTORS_VERSIONS
1265
+ } lcb_server_version_cmd_t;
1266
+
1267
+ /**
1268
+ * @brief Response structure for lcb_server_versions()
1269
+ */
1270
+ typedef struct lcb_server_version_resp_st {
1271
+ int version;
1272
+ union {
1273
+ struct {
1274
+ const char *server_endpoint;
1275
+ const char *vstring;
1276
+ lcb_SIZE nvstring;
1277
+ } v0;
1278
+ } v;
1279
+ } lcb_server_version_resp_t;
1280
+
1281
+ /**
1282
+ * Request server versions. The callback will be invoked with the
1283
+ * instance, server address, version string, and version string length.
1284
+ *
1285
+ * When all server versions have been received, the callback is invoked
1286
+ * with the server endpoint argument set to NULL
1287
+ *
1288
+ * @code{.c}
1289
+ * lcb_server_version_cmd_t *cmd = calloc(1, sizeof(*cmd));
1290
+ * cmd->version = 0;
1291
+ * lcb_server_version_cmd_t* commands[] = { cmd };
1292
+ * lcb_server_versions(instance, NULL, 1, commands);
1293
+ * @endcode
1294
+ *
1295
+ * @param instance the instance used to batch the requests from
1296
+ * @param command_cookie a cookie passed to all of the notifications
1297
+ * from this command
1298
+ * @param num the total number of elements in the commands array
1299
+ * @param commands the array containing the version commands
1300
+ * @return The status of the operation
1301
+ *
1302
+ * @attention
1303
+ * The name of this function may be slightly misleading. This does **not**
1304
+ * retrieve the Couchbase Server version, but only the version of its _memcached_
1305
+ * component. See lcb_server_stats() for a way to retrieve the server version
1306
+ * @committed
1307
+ */
1308
+ LIBCOUCHBASE_API
1309
+ lcb_error_t lcb_server_versions(lcb_t instance,
1310
+ const void *command_cookie,
1311
+ lcb_SIZE num,
1312
+ const lcb_server_version_cmd_t *const *commands);
1313
+
1314
+ /**
1315
+ * The callback function for a version request
1316
+ *
1317
+ * @param instance the instance performing the operation
1318
+ * @param cookie the cookie associated with with the command
1319
+ * @param error The status of the operation
1320
+ * @param resp response data
1321
+ */
1322
+ typedef void (*lcb_version_callback)(lcb_t instance,
1323
+ const void *cookie,
1324
+ lcb_error_t error,
1325
+ const lcb_server_version_resp_t *resp);
1326
+
1327
+ LIBCOUCHBASE_API
1328
+ lcb_version_callback lcb_set_version_callback(lcb_t, lcb_version_callback);
1329
+
1330
+ typedef struct {
1331
+ const char *server;
1332
+ lcb_verbosity_level_t level;
1333
+ } lcb_VERBOSITYCMDv0;
1334
+
1335
+ typedef struct lcb_verbosity_cmd_st {
1336
+ int version;
1337
+ union {
1338
+ lcb_VERBOSITYCMDv0 v0;
1339
+ } v;
1340
+ LCB_DEPR_CTORS_VERBOSITY
1341
+ } lcb_verbosity_cmd_t;
1342
+
1343
+ typedef struct lcb_verbosity_resp_st {
1344
+ int version;
1345
+ union {
1346
+ struct {
1347
+ const char *server_endpoint;
1348
+ } v0;
1349
+ } v;
1350
+ } lcb_verbosity_resp_t;
1351
+
1352
+ /**
1353
+ * Set the loglevel on the servers
1354
+ *
1355
+ * @code{.c}
1356
+ * lcb_verbosity_cmd_t *cmd = calloc(1, sizeof(*cmd));
1357
+ * cmd->version = 0;
1358
+ * cmd->v.v0.level = LCB_VERBOSITY_WARNING;
1359
+ * lcb_verbosity_cmd_t* commands[] = { cmd };
1360
+ * lcb_set_verbosity(instance, NULL, 1, commands);
1361
+ * @endcode
1362
+ *
1363
+ * @param instance the instance used to batch the requests from
1364
+ * @param command_cookie A cookie passed to all of the notifications
1365
+ * from this command
1366
+ * @param num the total number of elements in the commands array
1367
+ * @param commands the array containing the verbosity commands
1368
+ * @return The status of the operation.
1369
+ */
1370
+ LIBCOUCHBASE_API
1371
+ lcb_error_t lcb_set_verbosity(lcb_t instance,
1372
+ const void *command_cookie,
1373
+ lcb_SIZE num,
1374
+ const lcb_verbosity_cmd_t *const *commands);
1375
+
1376
+ /**
1377
+ * The callback function for a verbosity command
1378
+ *
1379
+ * @param instance the instance performing the operation
1380
+ * @param cookie the cookie associated with with the command
1381
+ * @param error The status of the operation
1382
+ * @param resp response data
1383
+ */
1384
+ typedef void (*lcb_verbosity_callback)(lcb_t instance,
1385
+ const void *cookie,
1386
+ lcb_error_t error,
1387
+ const lcb_verbosity_resp_t *resp);
1388
+
1389
+ LIBCOUCHBASE_API
1390
+ lcb_verbosity_callback lcb_set_verbosity_callback(lcb_t,
1391
+ lcb_verbosity_callback);
1392
+ typedef struct lcb_flush_cmd_st {
1393
+ int version;
1394
+ union { struct { int unused; } v0; } v;
1395
+ LCB_DEPR_CTORS_FLUSH
1396
+ } lcb_flush_cmd_t;
1397
+
1398
+ typedef struct lcb_flush_resp_st {
1399
+ int version;
1400
+ union {
1401
+ struct {
1402
+ const char *server_endpoint;
1403
+ } v0;
1404
+ } v;
1405
+ } lcb_flush_resp_t;
1406
+
1407
+ /**
1408
+ * Flush the entire couchbase cluster!
1409
+ *
1410
+ * @warning
1411
+ * From Couchbase Server 2.0 and higher, this command will only work on
1412
+ * _memcached_ buckets. To flush a Couchbase bucket, use the HTTP REST
1413
+ * API (See: http://docs.couchbase.com/admin/admin/REST/rest-bucket-flush.html)
1414
+ *
1415
+ * @code{.c}
1416
+ * lcb_flush_cmd_t *cmd = calloc(1, sizeof(*cmd));
1417
+ * cmd->version = 0;
1418
+ * lcb_flush_cmd_t* commands[] = { cmd };
1419
+ * lcb_flush(instance, NULL, 1, commands);
1420
+ * @endcode
1421
+ *
1422
+ * @param instance the instance used to batch the requests from
1423
+ * @param cookie A cookie passed to all of the notifications from this command
1424
+ * @param num the total number of elements in the commands array
1425
+ * @param commands the array containing the flush commands
1426
+ * @return_rc
1427
+ *
1428
+ * The following error codes may be returned in the callback
1429
+ * @cb_err ::LCB_NOT_SUPPORTED if trying to flush a Couchbase bucket.
1430
+ *
1431
+ * @committed
1432
+ */
1433
+ LIBCOUCHBASE_API
1434
+ lcb_error_t lcb_flush(lcb_t instance, const void *cookie,
1435
+ lcb_SIZE num,
1436
+ const lcb_flush_cmd_t *const *commands);
1437
+
1438
+ /**
1439
+ * The callback function for a flush request
1440
+ *
1441
+ * @param instance the instance performing the operation
1442
+ * @param cookie the cookie associated with with the command
1443
+ * @param error The status of the operation
1444
+ * @param resp Response data
1445
+ */
1446
+ typedef void (*lcb_flush_callback)(lcb_t instance,
1447
+ const void *cookie,
1448
+ lcb_error_t error,
1449
+ const lcb_flush_resp_t *resp);
1450
+ LIBCOUCHBASE_API
1451
+ lcb_flush_callback lcb_set_flush_callback(lcb_t, lcb_flush_callback);
1452
+
1453
+ /**
1454
+ * @name HTTP Operations (Legacy API)
1455
+ * Schedule HTTP requests to the server. This includes management
1456
+ * and view requests
1457
+ * @{
1458
+ */
1459
+
1460
+ /**
1461
+ * @brief Structure for lcb_make_http_request()
1462
+ */
1463
+ typedef struct {
1464
+ /** A view path string with optional query params (e.g. skip, limit etc.) */
1465
+ const char *path;
1466
+ lcb_SIZE npath; /**< Length of the path. Mandatory */
1467
+ const void *body; /**< The POST body for HTTP request */
1468
+ lcb_SIZE nbody; /**< Length of the body. Mandatory if `body != NULL`*/
1469
+ lcb_http_method_t method;
1470
+ /**If true the client will use lcb_http_data_callback to
1471
+ * notify about response and will call lcb_http_complete
1472
+ * with empty data eventually. */
1473
+ int chunked;
1474
+ /** The `Content-Type` header for request. For view requests
1475
+ * it is usually `application/json`, for management --
1476
+ * `application/x-www-form-urlencoded`. */
1477
+ const char *content_type;
1478
+ } lcb_HTTPCMDv0;
1479
+
1480
+ /**
1481
+ * v1 is used by the raw http requests. It is exactly the
1482
+ * same layout as v0, but it contains an extra field;
1483
+ * the hostname & port to use....
1484
+ */
1485
+ typedef struct {
1486
+ const char *path; /**< @see lcb_HTTPCMDv0::path */
1487
+ lcb_SIZE npath;
1488
+ const void *body; /**< @see lcb_HTTPCMDv0::body */
1489
+ lcb_SIZE nbody;
1490
+ lcb_http_method_t method;
1491
+ int chunked;
1492
+ const char *content_type;
1493
+ const char *host;
1494
+ const char *username;
1495
+ const char *password;
1496
+ } lcb_HTTPCMDv1;
1497
+
1498
+ /**@brief Wrapper structure for lcb_make_http_request
1499
+ * @see lcb_HTTPCMDv0
1500
+ * @see lcb_HTTPCMDv1
1501
+ */
1502
+ typedef struct lcb_http_cmd_st {
1503
+ int version;
1504
+ union {
1505
+ lcb_HTTPCMDv0 v0;
1506
+ lcb_HTTPCMDv1 v1;
1507
+ } v;
1508
+ LCB_DEPR_CTORS_HTTP
1509
+ } lcb_http_cmd_t;
1510
+
1511
+ /**
1512
+ * @brief Response structure received for HTTP requests
1513
+ *
1514
+ * The `headers` field is a list of key-value headers for HTTP, so it may
1515
+ * be traversed like so:
1516
+ *
1517
+ * @code{.c}
1518
+ * const char ** cur = resp->headers;
1519
+ * for (; *cur; cur+=2) {
1520
+ * printf("Header: %s:%s\n", cur[0], cur[1]);
1521
+ * }
1522
+ * @endcode
1523
+ */
1524
+ typedef struct {
1525
+ lcb_http_status_t status; /**< HTTP status code */
1526
+ const char *path; /**< Path used for request */
1527
+ lcb_SIZE npath;
1528
+ const char *const *headers; /**< List of headers */
1529
+ const void *bytes; /**< Body (if any) */
1530
+ lcb_SIZE nbytes;
1531
+ } lcb_HTTPRESPv0;
1532
+
1533
+ typedef struct {
1534
+ int version;
1535
+ union {
1536
+ lcb_HTTPRESPv0 v0;
1537
+ } v;
1538
+ } lcb_http_resp_t;
1539
+
1540
+ /**
1541
+ * Callback invoked for HTTP requests
1542
+ * @param request Original request handle
1543
+ * @param instance The instance on which the request was issued
1544
+ * @param cookie Cookie associated with the request
1545
+ * @param error Error code for request. Note that more information may likely
1546
+ * be found within the response structure itself, specifically the
1547
+ * lcb_HTTPRESPv0::status and lcb_HTTPRESPv0::bytes field
1548
+ *
1549
+ * @param resp The response structure
1550
+ */
1551
+ typedef void (*lcb_http_res_callback)(
1552
+ lcb_http_request_t request, lcb_t instance, const void *cookie,
1553
+ lcb_error_t error, const lcb_http_resp_t *resp);
1554
+
1555
+ typedef lcb_http_res_callback lcb_http_data_callback;
1556
+ typedef lcb_http_res_callback lcb_http_complete_callback;
1557
+
1558
+ /**
1559
+ * @brief Set the HTTP completion callback for HTTP request completion
1560
+ *
1561
+ * This callback will be
1562
+ * invoked once when the response is complete. If the lcb_HTTPCMDv0::chunked
1563
+ * flag was set, the lcb_HTTRESPv0::bytes will be `NULL`, otherwise it will
1564
+ * contain the fully buffered response.
1565
+ */
1566
+ LIBCOUCHBASE_API
1567
+ lcb_http_complete_callback
1568
+ lcb_set_http_complete_callback(lcb_t, lcb_http_complete_callback);
1569
+
1570
+ /**
1571
+ * @brief Set the HTTP data stream callback for streaming responses
1572
+ *
1573
+ * This callback is invoked only if the lcb_HTTPCMDv0::chunked flag is true.
1574
+ * The lcb_HTTRESPv0::bytes field will on each invocation contain a new
1575
+ * fragment of data which should be processed by the client. When the request
1576
+ * is complete, the the callback specified by lcb_set_http_complete_callback()
1577
+ * will be invoked with the lcb_HTTPRESPv0::bytes field set to `NULL`
1578
+ */
1579
+ LIBCOUCHBASE_API
1580
+ lcb_http_data_callback
1581
+ lcb_set_http_data_callback(lcb_t, lcb_http_data_callback);
1582
+
1583
+ /**
1584
+ * Execute HTTP request matching given path and yield JSON result object.
1585
+ * Depending on type it could be:
1586
+ *
1587
+ * - LCB_HTTP_TYPE_VIEW
1588
+ *
1589
+ * The client should setup view_complete callback in order to fetch
1590
+ * the result. Also he can setup view_data callback to fetch response
1591
+ * body in chunks as soon as possible, it will be called each time the
1592
+ * library receive a data chunk from socket. The empty <tt>bytes</tt>
1593
+ * argument (NULL pointer and zero size) is the sign of end of
1594
+ * response. Chunked callback allows to save memory on large datasets.
1595
+ *
1596
+ * - LCB_HTTP_TYPE_MANAGEMENT
1597
+ *
1598
+ * Management requests allow you to configure the cluster, add/remove
1599
+ * buckets, rebalance etc. The result will be passed to management
1600
+ * callbacks (data/complete).
1601
+ *
1602
+ * Fetch first 10 docs from `_design/test/_view/all` view
1603
+ * @code{.c}
1604
+ * lcb_http_request_t req;
1605
+ * lcb_http_cmd_t *cmd = calloc(1, sizeof(lcb_http_cmd_t));
1606
+ * cmd->version = 0;
1607
+ * cmd->v.v0.path = "_design/test/_view/all?limit=10";
1608
+ * cmd->v.v0.npath = strlen(item->v.v0.path);
1609
+ * cmd->v.v0.body = NULL;
1610
+ * cmd->v.v0.nbody = 0;
1611
+ * cmd->v.v0.method = LCB_HTTP_METHOD_GET;
1612
+ * cmd->v.v0.chunked = 1;
1613
+ * cmd->v.v0.content_type = "application/json";
1614
+ * lcb_error_t err = lcb_make_http_request(instance, NULL,
1615
+ * LCB_HTTP_TYPE_VIEW, &cmd, &req);
1616
+ * if (err != LCB_SUCCESS) {
1617
+ * .. failed to schedule request ..
1618
+ * @endcode
1619
+ *
1620
+ * The same as above but with POST filter
1621
+ * @code{.c}
1622
+ * lcb_http_request_t req;
1623
+ * lcb_http_cmd_t *cmd = calloc(1, sizeof(lcb_http_cmd_t));
1624
+ * cmd->version = 0;
1625
+ * cmd->v.v0.path = "_design/test/_view/all?limit=10";
1626
+ * cmd->v.v0.npath = strlen(item->v.v0.path);
1627
+ * cmd->v.v0.body = "{\"keys\": [\"test_1000\", \"test_10002\"]}"
1628
+ * cmd->v.v0.nbody = strlen(item->v.v0.body);
1629
+ * cmd->v.v0.method = LCB_HTTP_METHOD_POST;
1630
+ * cmd->v.v0.chunked = 1;
1631
+ * cmd->v.v0.content_type = "application/json";
1632
+ * lcb_error_t err = lcb_make_http_request(instance, NULL,
1633
+ * LCB_HTTP_TYPE_VIEW, &cmd, &req);
1634
+ * if (err != LCB_SUCCESS) {
1635
+ * .. failed to schedule request ..
1636
+ * @endcode
1637
+ *
1638
+ * @code{.c} Delete bucket via REST management API
1639
+ * lcb_http_request_t req;
1640
+ * lcb_http_cmd_t cmd;
1641
+ * cmd->version = 0;
1642
+ * cmd.v.v0.path = query.c_str();
1643
+ * cmd.v.v0.npath = query.length();
1644
+ * cmd.v.v0.body = NULL;
1645
+ * cmd.v.v0.nbody = 0;
1646
+ * cmd.v.v0.method = LCB_HTTP_METHOD_DELETE;
1647
+ * cmd.v.v0.chunked = false;
1648
+ * cmd.v.v0.content_type = "application/x-www-form-urlencoded";
1649
+ * lcb_error_t err = lcb_make_http_request(instance, NULL,
1650
+ * LCB_HTTP_TYPE_MANAGEMENT, &cmd, &req);
1651
+ * if (err != LCB_SUCCESS) {
1652
+ * .. failed to schedule request ..
1653
+ * @endcode
1654
+ *
1655
+ * @param instance The handle to lcb
1656
+ * @param command_cookie A cookie passed to all of the notifications
1657
+ * from this command
1658
+ * @param type The type of the request needed.
1659
+ * @param cmd The struct describing the command options
1660
+ * @param request Where to store request handle
1661
+ *
1662
+ * @return_rc
1663
+ *
1664
+ * The following errors may be received in the callback. Note that ::LCB_SUCCESS
1665
+ * will be delivered the callback so long as the operation received a full
1666
+ * HTTP response. You should inspect the individual HTTP status code to determine
1667
+ * if the actual HTTP request succeeded or not.
1668
+ *
1669
+ * @cb_err ::LCB_TOO_MANY_REDIRECTS if the request was redirected too many times.
1670
+ * @cb_err ::LCB_PROTOCOL_ERROR if the endpoint did not send back a well formed
1671
+ * HTTP response
1672
+ *
1673
+ * @committed
1674
+ */
1675
+ LIBCOUCHBASE_API
1676
+ lcb_error_t lcb_make_http_request(lcb_t instance,
1677
+ const void *command_cookie,
1678
+ lcb_http_type_t type,
1679
+ const lcb_http_cmd_t *cmd,
1680
+ lcb_http_request_t *request);
1681
+
1682
+ /**@}*/
1683
+
1684
+ /**@}*/
1685
+
1686
+ #ifdef __cplusplus
1687
+ }
1688
+ #endif
1689
+ #endif