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,179 @@
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 LCBIO_TIMER_H
19
+ #define LCBIO_TIMER_H
20
+
21
+ #ifdef __cplusplus
22
+ extern "C" {
23
+ #endif /** __cplusplus */
24
+
25
+ /**
26
+ * @file
27
+ * @brief Timer Routines
28
+ *
29
+ * This file contains the timer routines. This provides a simpler interface
30
+ * than the one provided via the `lcb_timer_*` functions.
31
+ */
32
+
33
+ /**
34
+ * @ingroup lcbio
35
+ * @defgroup lcbio-timers Timer Routines
36
+ *
37
+ * @details
38
+ *
39
+ * The timer routines here allow for an asynchronous event to be scheduled
40
+ * within a given amount of time, or "immediately". The basic idea is that
41
+ * these allow "Safe" invocation of routines without worrying about reentrancy
42
+ * issues.
43
+ *
44
+ * There is natually a performance hit in using these functions (since this needs
45
+ * to operate with the event loop) so this shouldn't be used for normal steady
46
+ * state operations (such as memcached operations).
47
+ *
48
+ * A timer may be created via lcbio_timer_new(). The timer's initial state
49
+ * is _unarmed_, meaning it will not be invoked until one of the scheduling
50
+ * routines are invoked.
51
+ *
52
+ * When a timer is armed, its callback (passed lcbio_timer_new()) will be
53
+ * invoked with the argument provided to lcbio_timer_new() as well.
54
+ *
55
+ * To schedule a timer, use the lcbio_timer_rearm() to unconditionally schedule
56
+ * an event within a certain timeframe, or lcbio_async_signal() to invoke the
57
+ * timer as soon as possible, once the event loop regains control.
58
+ *
59
+ * To cancel an armed timer (that is, to ensure the event is _not_ called), use
60
+ * the lcbio_timer_disarm() function or the lcbio_async_cancel() function (which
61
+ * itself is just an alias).
62
+ *
63
+ * Timers are not persistent, meaning that once they are fired they will enter
64
+ * an inactive state.
65
+ *
66
+ * @addtogroup lcbio-timers
67
+ * @{
68
+ */
69
+
70
+ /** @private */
71
+ typedef enum {
72
+ LCBIO_TIMER_S_ENTERED = 0x01,
73
+ LCBIO_TIMER_S_DESTROYED = 0x02,
74
+ LCBIO_TIMER_S_ARMED = 0x04
75
+ } lcbio_TIMERSTATE;
76
+
77
+ /**
78
+ * @brief Timer callback
79
+ * @see lcb_timer_new()
80
+ */
81
+ typedef void (*lcbio_TIMER_cb)(void *);
82
+
83
+ typedef struct lcbio_TIMER {
84
+ void *event;
85
+ void *data;
86
+ lcbio_TIMER_cb callback;
87
+ uint32_t usec_;
88
+ lcbio_TIMERSTATE state;
89
+ lcbio_pTABLE io;
90
+ } lcbio_TIMER, lcbio_ASYNC;
91
+
92
+ /**
93
+ * @brief Creates a new timer object.
94
+ *
95
+ * The newly created timer will be in an _unarmed_ state, but may
96
+ * may be activated with lcbio_timer_rearm()
97
+ *
98
+ * @param iot
99
+ * @param data
100
+ * @param callback
101
+ * @return A new timer object. Destroy with lcbio_timer_destroy()
102
+ */
103
+ lcbio_TIMER *
104
+ lcbio_timer_new(lcbio_pTABLE iot, void *data, lcbio_TIMER_cb callback);
105
+
106
+ /**
107
+ * @brief Release the memory allocated by the timers
108
+ * @param tm the timer to free
109
+ */
110
+ void
111
+ lcbio_timer_destroy(lcbio_TIMER *tm);
112
+
113
+ /**
114
+ * @brief Schedule the timer invocation
115
+ * @param timer The timer
116
+ * @param usec The number of microseconds (from now) in which the callback
117
+ * should be invoked
118
+ */
119
+ void
120
+ lcbio_timer_rearm(lcbio_TIMER *timer, uint32_t usec);
121
+
122
+ /**
123
+ * @brief Cancel a pending invocation
124
+ * @param timer The timer
125
+ * If no pending invocation is present, this does nothing
126
+ */
127
+ void
128
+ lcbio_timer_disarm(lcbio_TIMER *timer);
129
+
130
+ /**
131
+ * @brief Schedule an asynchronous call
132
+ * @param timer The timer to schedule
133
+ *
134
+ * This function is equivalent to calling
135
+ * @code{.c}
136
+ * lcbio_timer_rearm(timer, 0);
137
+ * @endcode
138
+ */
139
+ void
140
+ lcbio_async_signal(lcbio_TIMER *timer);
141
+
142
+ /**
143
+ * @brief alias for lcbio_timer_disarm()
144
+ * @param timer
145
+ */
146
+ void
147
+ lcbio_async_cancel(lcbio_TIMER *timer);
148
+
149
+ /**
150
+ * @brief Check if timer is armed
151
+ * @param timer the timer to inspect
152
+ * @return nonzero if armed, zero if unarmed.
153
+ */
154
+ #define lcbio_timer_armed(timer) ((timer)->state & LCBIO_TIMER_S_ARMED)
155
+
156
+ /**
157
+ * Get the callback that is to be invoked for the timer
158
+ * @param timer the timer to query
159
+ * @return the current callback
160
+ * @see lcbio_timer_set_target()
161
+ */
162
+ #define lcbio_timer_get_target(timer) (timer)->callback
163
+
164
+ /**
165
+ * Change the target callback for the timer
166
+ * @param timer the timer to modify
167
+ * @param tgt the target callback to set.
168
+ */
169
+ #define lcbio_timer_set_target(timer, tgt) (timer)->callback = tgt
170
+
171
+ void
172
+ lcbio_timer_dump(lcbio_TIMER *timer, FILE *fp);
173
+
174
+ /**@}*/
175
+
176
+ #ifdef __cplusplus
177
+ }
178
+ #endif /** __cplusplus */
179
+ #endif /* LCBIO_TIMER_H */
@@ -0,0 +1,132 @@
1
+ /* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2012 Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #include "connect.h"
19
+ #include "iotable.h"
20
+ #include "timer-ng.h"
21
+
22
+ #define TMR_IS_DESTROYED(timer) ((timer)->state & LCBIO_TIMER_S_DESTROYED)
23
+ #define TMR_IS_ARMED(timer) ((timer)->state & LCBIO_TIMER_S_ARMED)
24
+
25
+ static void
26
+ destroy_timer(lcbio_TIMER *timer)
27
+ {
28
+ if (timer->event) {
29
+ timer->io->timer.destroy(timer->io->p, timer->event);
30
+ }
31
+ lcbio_table_unref(timer->io);
32
+ free(timer);
33
+ }
34
+
35
+ static void
36
+ timer_callback(lcb_socket_t sock, short which, void *arg)
37
+ {
38
+ lcbio_TIMER *timer = arg;
39
+
40
+ lcb_assert(TMR_IS_ARMED(timer));
41
+ lcb_assert(!TMR_IS_DESTROYED(timer));
42
+ timer->state |= LCBIO_TIMER_S_ENTERED;
43
+
44
+ lcbio_timer_disarm(timer);
45
+ timer->callback(timer->data);
46
+
47
+ if (TMR_IS_DESTROYED(timer)) {
48
+ destroy_timer(timer);
49
+ } else {
50
+ timer->state &= ~LCBIO_TIMER_S_ENTERED;
51
+ }
52
+
53
+ (void)sock;
54
+ (void)which;
55
+ }
56
+
57
+
58
+ lcbio_TIMER *
59
+ lcbio_timer_new(lcbio_TABLE *io, void *data, lcbio_TIMER_cb callback)
60
+ {
61
+ lcbio_TIMER *ret = calloc(1, sizeof(*ret));
62
+
63
+ if (!ret) {
64
+ return NULL;
65
+ }
66
+
67
+ ret->callback = callback;
68
+ ret->data = data;
69
+ ret->io = io;
70
+ ret->event = io->timer.create(IOT_ARG(io));
71
+ lcbio_table_ref(io);
72
+ return ret;
73
+ }
74
+
75
+ void
76
+ lcbio_timer_destroy(lcbio_TIMER *timer)
77
+ {
78
+ lcbio_timer_disarm(timer);
79
+ if (timer->state & LCBIO_TIMER_S_ENTERED) {
80
+ timer->state |= LCBIO_TIMER_S_DESTROYED;
81
+ } else {
82
+ destroy_timer(timer);
83
+ }
84
+ }
85
+
86
+ void
87
+ lcbio_timer_disarm(lcbio_TIMER *timer)
88
+ {
89
+ if (!TMR_IS_ARMED(timer)) {
90
+ return;
91
+ }
92
+
93
+ timer->state &= ~LCBIO_TIMER_S_ARMED;
94
+ timer->io->timer.cancel(timer->io->p, timer->event);
95
+ }
96
+
97
+ void
98
+ lcbio_timer_rearm(lcbio_TIMER * timer, uint32_t usec)
99
+ {
100
+ if (TMR_IS_ARMED(timer)) {
101
+ lcbio_timer_disarm(timer);
102
+ }
103
+
104
+ timer->usec_ = usec;
105
+ timer->io->timer.schedule(timer->io->p,
106
+ timer->event, usec, timer, timer_callback);
107
+ timer->state |= LCBIO_TIMER_S_ARMED;
108
+ }
109
+
110
+ void
111
+ lcbio_async_signal(lcbio_TIMER *timer)
112
+ {
113
+ lcbio_timer_rearm(timer, 0);
114
+ }
115
+
116
+ void
117
+ lcbio_async_cancel(lcbio_TIMER *timer)
118
+ {
119
+ lcbio_timer_disarm(timer);
120
+ }
121
+
122
+ void
123
+ lcbio_timer_dump(lcbio_TIMER *timer, FILE *fp)
124
+ {
125
+ fprintf(fp, "~~ DUMP TIMER BEGIN ~~\n");
126
+ fprintf(fp, "TIMER=%p\n", (void*)timer);
127
+ fprintf(fp, "INNER PTR=%p\n", timer->event);
128
+ fprintf(fp, "USERDATA=%p\n", timer->data);
129
+ fprintf(fp, "ACTIVE: %s\n", (timer->state & LCBIO_TIMER_S_ARMED) ? "YES":"NO");
130
+ fprintf(fp, "INTERVAL: %lu\n", (unsigned long)timer->usec_);
131
+ fprintf(fp, "~~ DUMP TIMER END ~~\n");
132
+ }
@@ -0,0 +1,430 @@
1
+ /* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2010-2014 Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #include "internal.h"
19
+ #include <lcbio/iotable.h>
20
+
21
+ #if defined(__clang__) || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
22
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
23
+ #endif
24
+
25
+ typedef enum {
26
+ LCB_TIMER_STANDALONE = 1 << 0,
27
+ LCB_TIMER_PERIODIC = 1 << 1,
28
+ LCB_TIMER_EX = 1 << 2
29
+ } lcb_timer_options;
30
+
31
+ typedef enum {
32
+ LCB_TIMER_S_ENTERED = 0x01,
33
+ LCB_TIMER_S_DESTROYED = 0x02,
34
+ LCB_TIMER_S_ARMED = 0x04
35
+ } lcb_timer_state;
36
+
37
+ struct lcb_timer_st {
38
+ lcb_uint32_t usec_;
39
+ lcb_timer_state state;
40
+ lcb_timer_options options;
41
+ void *event;
42
+ const void *cookie;
43
+ lcb_timer_callback callback;
44
+ lcb_t instance;
45
+ struct lcbio_TABLE *io;
46
+ };
47
+
48
+ static void timer_rearm(lcb_timer_t timer, lcb_uint32_t usec);
49
+ static void timer_disarm(lcb_timer_t timer);
50
+ #define lcb_timer_armed(timer) ((timer)->state & LCB_TIMER_S_ARMED)
51
+ #define lcb_async_signal(async) lcb_timer_rearm(async, 0)
52
+ #define lcb_async_cancel(async) lcb_timer_disarm(async)
53
+ #define TMR_IS_PERIODIC(timer) ((timer)->options & LCB_TIMER_PERIODIC)
54
+ #define TMR_IS_DESTROYED(timer) ((timer)->state & LCB_TIMER_S_DESTROYED)
55
+ #define TMR_IS_STANDALONE(timer) ((timer)->options & LCB_TIMER_STANDALONE)
56
+ #define TMR_IS_ARMED(timer) ((timer)->state & LCB_TIMER_S_ARMED)
57
+
58
+ static void destroy_timer(lcb_timer_t timer) {
59
+ if (timer->event) {
60
+ timer->io->timer.destroy(timer->io->p, timer->event);
61
+ }
62
+ lcbio_table_unref(timer->io);
63
+ memset(timer, 0xff, sizeof(*timer));
64
+ free(timer);
65
+ }
66
+
67
+ static void timer_callback(lcb_socket_t sock, short which, void *arg) {
68
+ lcb_timer_t timer = arg;
69
+ lcb_t instance = timer->instance;
70
+
71
+ lcb_assert(TMR_IS_ARMED(timer));
72
+ lcb_assert(!TMR_IS_DESTROYED(timer));
73
+
74
+ timer->state |= LCB_TIMER_S_ENTERED;
75
+ timer_disarm(timer);
76
+ timer->callback(timer, instance, timer->cookie);
77
+
78
+ if (TMR_IS_DESTROYED(timer) == 0 && TMR_IS_PERIODIC(timer) != 0) {
79
+ timer_rearm(timer, timer->usec_);
80
+ return;
81
+ }
82
+ if (! TMR_IS_STANDALONE(timer)) {
83
+ lcb_aspend_del(&instance->pendops, LCB_PENDTYPE_TIMER, timer);
84
+ lcb_maybe_breakout(instance);
85
+ }
86
+ if (TMR_IS_DESTROYED(timer)) {
87
+ destroy_timer(timer);
88
+ } else {
89
+ timer->state &= ~LCB_TIMER_S_ENTERED;
90
+ }
91
+ (void)sock;(void)which;
92
+ }
93
+
94
+ LIBCOUCHBASE_API
95
+ lcb_timer_t lcb_timer_create(lcb_t instance, const void *command_cookie, lcb_uint32_t usec, int periodic, lcb_timer_callback callback, lcb_error_t *error) {
96
+ lcb_timer_options options = 0;
97
+ lcb_timer_t tmr = calloc(1, sizeof(struct lcb_timer_st));
98
+ tmr->io = instance->iotable;
99
+
100
+ if (periodic) {
101
+ options |= LCB_TIMER_PERIODIC;
102
+ }
103
+ if (!tmr) {
104
+ *error = LCB_CLIENT_ENOMEM;
105
+ return NULL;
106
+ }
107
+ if (!callback) {
108
+ *error = LCB_EINVAL;
109
+ return NULL;
110
+ }
111
+ if (! (options & LCB_TIMER_STANDALONE)) {
112
+ lcb_assert(instance);
113
+ }
114
+
115
+ lcbio_table_ref(tmr->io);
116
+ tmr->instance = instance;
117
+ tmr->callback = callback;
118
+ tmr->cookie = command_cookie;
119
+ tmr->options = options;
120
+ tmr->event = tmr->io->timer.create(tmr->io->p);
121
+
122
+ if (tmr->event == NULL) {
123
+ free(tmr);
124
+ *error = LCB_CLIENT_ENOMEM;
125
+ return NULL;
126
+ }
127
+
128
+ if ( (options & LCB_TIMER_STANDALONE) == 0) {
129
+ lcb_aspend_add(&instance->pendops, LCB_PENDTYPE_TIMER, tmr);
130
+ }
131
+
132
+ timer_rearm(tmr, usec);
133
+
134
+ *error = LCB_SUCCESS;
135
+ return tmr;
136
+ }
137
+
138
+ LIBCOUCHBASE_API
139
+ lcb_error_t lcb_timer_destroy(lcb_t instance, lcb_timer_t timer) {
140
+ int standalone = timer->options & LCB_TIMER_STANDALONE;
141
+ if (!standalone) {
142
+ lcb_aspend_del(&instance->pendops, LCB_PENDTYPE_TIMER, timer);
143
+ }
144
+ timer_disarm(timer);
145
+ if (timer->state & LCB_TIMER_S_ENTERED) {
146
+ timer->state |= LCB_TIMER_S_DESTROYED;
147
+ lcb_assert(TMR_IS_DESTROYED(timer));
148
+ } else {
149
+ destroy_timer(timer);
150
+ }
151
+ return LCB_SUCCESS;
152
+ }
153
+ static void timer_disarm(lcb_timer_t timer) {
154
+ if (!TMR_IS_ARMED(timer)) {
155
+ return;
156
+ }
157
+ timer->state &= ~LCB_TIMER_S_ARMED;
158
+ timer->io->timer.cancel(timer->io->p, timer->event);
159
+ }
160
+ static void timer_rearm(lcb_timer_t timer, lcb_uint32_t usec) {
161
+ if (TMR_IS_ARMED(timer)) {
162
+ timer_disarm(timer);
163
+ }
164
+ timer->usec_ = usec;
165
+ timer->io->timer.schedule(timer->io->p, timer->event, usec, timer, timer_callback);
166
+ timer->state |= LCB_TIMER_S_ARMED;
167
+ }
168
+
169
+ LCB_INTERNAL_API void lcb__timer_destroy_nowarn(lcb_t instance, lcb_timer_t timer) {
170
+ lcb_timer_destroy(instance, timer);
171
+ }
172
+
173
+ struct user_cookie {
174
+ void *cookie;
175
+ struct lcb_callback_st callbacks;
176
+ lcb_error_t retcode;
177
+ };
178
+
179
+ static void restore_user_env(lcb_t instance);
180
+ static void restore_wrapping_env(lcb_t instance, struct user_cookie *user, lcb_error_t error);
181
+ static void bootstrap_callback(lcb_t instance, lcb_error_t err) {
182
+ struct user_cookie *c = (void *)instance->cookie;
183
+ c->retcode = err;
184
+ }
185
+ static void stat_callback(lcb_t instance, const void *command_cookie, lcb_error_t error, const lcb_server_stat_resp_t *resp) {
186
+ struct user_cookie *c = (void *)instance->cookie;
187
+ restore_user_env(instance);
188
+ c->callbacks.stat(instance, command_cookie, error, resp);
189
+ restore_wrapping_env(instance, c, error);
190
+ }
191
+ static void version_callback(lcb_t instance, const void *command_cookie, lcb_error_t error, const lcb_server_version_resp_t *resp) {
192
+ struct user_cookie *c = (void *)instance->cookie;
193
+ restore_user_env(instance);
194
+ c->callbacks.version(instance, command_cookie, error, resp);
195
+ restore_wrapping_env(instance, c, error);
196
+ }
197
+ static void verbosity_callback(lcb_t instance, const void *command_cookie, lcb_error_t error, const lcb_verbosity_resp_t *resp) {
198
+ struct user_cookie *c = (void *)instance->cookie;
199
+ restore_user_env(instance);
200
+ c->callbacks.verbosity(instance, command_cookie, error, resp);
201
+ restore_wrapping_env(instance, c, error);
202
+ }
203
+ static void get_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_get_resp_t *resp) {
204
+ struct user_cookie *c = (void *)instance->cookie;
205
+ restore_user_env(instance);
206
+ c->callbacks.get(instance, cookie, error, resp);
207
+ restore_wrapping_env(instance, c, error);
208
+ }
209
+ static void store_callback(lcb_t instance, const void *cookie, lcb_storage_t operation, lcb_error_t error, const lcb_store_resp_t *resp) {
210
+ struct user_cookie *c = (void *)instance->cookie;
211
+ restore_user_env(instance);
212
+ c->callbacks.store(instance, cookie, operation, error, resp);
213
+ restore_wrapping_env(instance, c, error);
214
+ }
215
+ static void arithmetic_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_arithmetic_resp_t *resp) {
216
+ struct user_cookie *c = (void *)instance->cookie;
217
+ restore_user_env(instance);
218
+ c->callbacks.arithmetic(instance, cookie, error, resp);
219
+ restore_wrapping_env(instance, c, error);
220
+ }
221
+ static void remove_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_remove_resp_t *resp) {
222
+ struct user_cookie *c = (void *)instance->cookie;
223
+ restore_user_env(instance);
224
+ c->callbacks.remove(instance, cookie, error, resp);
225
+ restore_wrapping_env(instance, c, error);
226
+ }
227
+ static void touch_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_touch_resp_t *resp) {
228
+ struct user_cookie *c = (void *)instance->cookie;
229
+ restore_user_env(instance);
230
+ c->callbacks.touch(instance, cookie, error, resp);
231
+ restore_wrapping_env(instance, c, error);
232
+ }
233
+ static void http_complete_callback(lcb_http_request_t request, lcb_t instance, const void *cookie, lcb_error_t error, const lcb_http_resp_t *resp) {
234
+ struct user_cookie *c = (void *)instance->cookie;
235
+ restore_user_env(instance);
236
+ c->callbacks.http_complete(request, instance, cookie, error, resp);
237
+ restore_wrapping_env(instance, c, error);
238
+ }
239
+ static void http_data_callback(lcb_http_request_t request, lcb_t instance, const void *cookie, lcb_error_t error, const lcb_http_resp_t *resp) {
240
+ struct user_cookie *c = (void *)instance->cookie;
241
+ restore_user_env(instance);
242
+ c->callbacks.http_data(request, instance, cookie, error, resp);
243
+ restore_wrapping_env(instance, c, error);
244
+ }
245
+ static void flush_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_flush_resp_t *resp) {
246
+ struct user_cookie *c = (void *)instance->cookie;
247
+ restore_user_env(instance);
248
+ c->callbacks.flush(instance, cookie, error, resp);
249
+ restore_wrapping_env(instance, c, error);
250
+ }
251
+ static void observe_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_observe_resp_t *resp) {
252
+ struct user_cookie *c = (void *)instance->cookie;
253
+ restore_user_env(instance);
254
+ c->callbacks.observe(instance, cookie, error, resp);
255
+ restore_wrapping_env(instance, c, error);
256
+ }
257
+ static void durability_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_durability_resp_t *resp) {
258
+ struct user_cookie *c = (void *)instance->cookie;
259
+ restore_user_env(instance);
260
+ c->callbacks.durability(instance, cookie, error, resp);
261
+ restore_wrapping_env(instance, c, error);
262
+ }
263
+ static void unlock_callback(lcb_t instance, const void *cookie, lcb_error_t error, const lcb_unlock_resp_t *resp) {
264
+ struct user_cookie *c = (void *)instance->cookie;
265
+ restore_user_env(instance);
266
+ c->callbacks.unlock(instance, cookie, error, resp);
267
+ restore_wrapping_env(instance, c, error);
268
+ }
269
+ static void restore_user_env(lcb_t instance) {
270
+ struct user_cookie *cookie = (void *)instance->cookie;
271
+ /* Restore the users environment */
272
+ instance->cookie = cookie->cookie;
273
+ instance->callbacks = cookie->callbacks;
274
+ }
275
+
276
+ static void
277
+ restore_wrapping_env(lcb_t instance, struct user_cookie *user, lcb_error_t error) {
278
+ user->callbacks = instance->callbacks;
279
+ /* Install new callbacks */
280
+ instance->callbacks.get = get_callback;
281
+ instance->callbacks.store = store_callback;
282
+ instance->callbacks.arithmetic = arithmetic_callback;
283
+ instance->callbacks.remove = remove_callback;
284
+ instance->callbacks.stat = stat_callback;
285
+ instance->callbacks.version = version_callback;
286
+ instance->callbacks.verbosity = verbosity_callback;
287
+ instance->callbacks.touch = touch_callback;
288
+ instance->callbacks.flush = flush_callback;
289
+ instance->callbacks.bootstrap = bootstrap_callback;
290
+ instance->callbacks.http_complete = http_complete_callback;
291
+ instance->callbacks.http_data = http_data_callback;
292
+ instance->callbacks.observe = observe_callback;
293
+ instance->callbacks.unlock = unlock_callback;
294
+ instance->callbacks.durability = durability_callback;
295
+
296
+ user->cookie = (void *)instance->cookie;
297
+ user->retcode = error;
298
+ instance->cookie = user;
299
+ }
300
+
301
+ lcb_error_t
302
+ lcb__synchandler_return(lcb_t instance)
303
+ {
304
+ struct user_cookie cookie;
305
+ restore_wrapping_env(instance, &cookie, LCB_SUCCESS);
306
+ lcb_wait(instance);
307
+ restore_user_env(instance);
308
+ return cookie.retcode;
309
+ }
310
+
311
+ LIBCOUCHBASE_API
312
+ void
313
+ lcb_behavior_set_syncmode(lcb_t instance, lcb_syncmode_t mode)
314
+ {
315
+ LCBT_SETTING(instance, syncmode) = mode;
316
+ }
317
+ LIBCOUCHBASE_API
318
+ lcb_syncmode_t
319
+ lcb_behavior_get_syncmode(lcb_t instance)
320
+ {
321
+ return LCBT_SETTING(instance, syncmode);
322
+ }
323
+
324
+ LIBCOUCHBASE_API
325
+ lcb_error_t lcb_get_last_error(lcb_t instance){return instance->last_error;}
326
+
327
+ LIBCOUCHBASE_API
328
+ lcb_error_t lcb__create_compat_230(lcb_cluster_t type, const void *specific, lcb_t *instance, struct lcb_io_opt_st *io)
329
+ {
330
+ struct lcb_create_st cst = { 0 };
331
+ const struct lcb_cached_config_st *cfg = specific;
332
+ const struct lcb_create_st *crp = &cfg->createopt;
333
+ lcb_error_t err;
334
+ lcb_size_t to_copy = 0;
335
+
336
+ if (type != LCB_CACHED_CONFIG) {
337
+ return LCB_NOT_SUPPORTED;
338
+ }
339
+
340
+ if (crp->version == 0) {
341
+ to_copy = sizeof(cst.v.v0);
342
+ } else if (crp->version == 1) {
343
+ to_copy = sizeof(cst.v.v1);
344
+ } else if (crp->version >= 2) {
345
+ to_copy = sizeof(cst.v.v2);
346
+ } else {
347
+ /* using version 3? */
348
+ return LCB_NOT_SUPPORTED;
349
+ }
350
+ memcpy(&cst, crp, to_copy);
351
+
352
+ if (io) {
353
+ cst.v.v0.io = io;
354
+ }
355
+ err = lcb_create(instance, &cst);
356
+ if (err != LCB_SUCCESS) {
357
+ return err;
358
+ }
359
+ err = lcb_cntl(*instance, LCB_CNTL_SET, LCB_CNTL_CONFIGCACHE,
360
+ (void *)cfg->cachefile);
361
+ if (err != LCB_SUCCESS) {
362
+ lcb_destroy(*instance);
363
+ }
364
+ return err;
365
+ }
366
+ struct compat_220 {
367
+ struct {
368
+ int version;
369
+ struct lcb_create_st1 v1;
370
+ } createopt;
371
+ const char *cachefile;
372
+ };
373
+
374
+ struct compat_230 {
375
+ struct {
376
+ int version;
377
+ struct lcb_create_st2 v2;
378
+ } createopt;
379
+ const char *cachefile;
380
+ };
381
+
382
+ #undef lcb_create_compat
383
+ /**
384
+ * This is _only_ called for versions <= 2.3.0.
385
+ * >= 2.3.0 uses the _230() symbol.
386
+ *
387
+ * The big difference between this and the _230 function is the struct layout,
388
+ * where the newer one contains the filename _before_ the creation options.
389
+ *
390
+ * Woe to he who relies on the compat_st as a 'subclass' of create_st..
391
+ */
392
+
393
+ LIBCOUCHBASE_API
394
+ lcb_error_t lcb_create_compat(lcb_cluster_t type, const void *specific, lcb_t *instance, struct lcb_io_opt_st *io);
395
+ LIBCOUCHBASE_API
396
+ lcb_error_t lcb_create_compat(lcb_cluster_t type, const void *specific, lcb_t *instance, struct lcb_io_opt_st *io)
397
+ {
398
+ struct lcb_cached_config_st dst;
399
+ const struct compat_220* src220 = specific;
400
+
401
+ if (type == LCB_MEMCACHED_CLUSTER) {
402
+ return lcb__create_compat_230(type, specific, instance, io);
403
+ } else if (type != LCB_CACHED_CONFIG) {
404
+ return LCB_NOT_SUPPORTED;
405
+ }
406
+ #define copy_compat(v) \
407
+ memcpy(&dst.createopt, &v->createopt, sizeof(v->createopt)); \
408
+ dst.cachefile = v->cachefile;
409
+
410
+ if (src220->createopt.version >= 2 || src220->cachefile == NULL) {
411
+ const struct compat_230* src230 = specific;
412
+ copy_compat(src230);
413
+ } else {
414
+ copy_compat(src220);
415
+ }
416
+ return lcb__create_compat_230(type, &dst, instance, io);
417
+ }
418
+ LIBCOUCHBASE_API void lcb_flush_buffers(lcb_t instance, const void *cookie) {
419
+ (void)instance;(void)cookie;
420
+ }
421
+
422
+ LIBCOUCHBASE_API
423
+ lcb_error_t lcb_verify_struct_size(lcb_U32 id, lcb_U32 version, lcb_SIZE size)
424
+ {
425
+ #define X(sname, sabbrev, idval, vernum) \
426
+ if (idval == id && size == sizeof(sname) && version <= vernum) { return LCB_SUCCESS; }
427
+ LCB_XSSIZES(X);
428
+ #undef X
429
+ return LCB_EINVAL;
430
+ }