mt-libcouchbase 1.4.0

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 (707) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +1 -0
  5. data/.travis.yml +38 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +24 -0
  8. data/README.md +445 -0
  9. data/Rakefile +76 -0
  10. data/ext/README.md +6 -0
  11. data/ext/Rakefile +19 -0
  12. data/ext/libcouchbase/.gitignore +132 -0
  13. data/ext/libcouchbase/CMakeLists.txt +455 -0
  14. data/ext/libcouchbase/CONTRIBUTING.md +105 -0
  15. data/ext/libcouchbase/LICENSE +202 -0
  16. data/ext/libcouchbase/README.markdown +195 -0
  17. data/ext/libcouchbase/RELEASE_NOTES.markdown +3523 -0
  18. data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +52 -0
  19. data/ext/libcouchbase/cmake/Modules/CopyPDB.cmake +42 -0
  20. data/ext/libcouchbase/cmake/Modules/DistScript.cmake +17 -0
  21. data/ext/libcouchbase/cmake/Modules/DownloadLcbDep.cmake +18 -0
  22. data/ext/libcouchbase/cmake/Modules/FindCouchbaseHdrHistogram.cmake +15 -0
  23. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibev.cmake +73 -0
  24. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibevent.cmake +54 -0
  25. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibuv.cmake +57 -0
  26. data/ext/libcouchbase/cmake/Modules/FindProfiler.cmake +16 -0
  27. data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +49 -0
  28. data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +142 -0
  29. data/ext/libcouchbase/cmake/Modules/GetPlatformCCInfo.cmake +45 -0
  30. data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +70 -0
  31. data/ext/libcouchbase/cmake/config-cmake.h.in +80 -0
  32. data/ext/libcouchbase/cmake/configure +355 -0
  33. data/ext/libcouchbase/cmake/defs.mk.in +6 -0
  34. data/ext/libcouchbase/cmake/dtrace-instr-link.pl +51 -0
  35. data/ext/libcouchbase/cmake/libcouchbase.stp.in +829 -0
  36. data/ext/libcouchbase/cmake/source_files.cmake +104 -0
  37. data/ext/libcouchbase/contrib/cJSON/cJSON.c +1022 -0
  38. data/ext/libcouchbase/contrib/cJSON/cJSON.h +158 -0
  39. data/ext/libcouchbase/contrib/cbsasl/CMakeLists.txt +25 -0
  40. data/ext/libcouchbase/contrib/cbsasl/COPYING +202 -0
  41. data/ext/libcouchbase/contrib/cbsasl/include/cbsasl/cbsasl.h +259 -0
  42. data/ext/libcouchbase/contrib/cbsasl/src/client.c +419 -0
  43. data/ext/libcouchbase/contrib/cbsasl/src/common.c +50 -0
  44. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.c +67 -0
  45. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.h +33 -0
  46. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.c +296 -0
  47. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.h +45 -0
  48. data/ext/libcouchbase/contrib/cbsasl/src/hash.c +573 -0
  49. data/ext/libcouchbase/contrib/cbsasl/src/hash.h +15 -0
  50. data/ext/libcouchbase/contrib/cbsasl/src/scram-sha/scram_utils.c +500 -0
  51. data/ext/libcouchbase/contrib/cbsasl/src/scram-sha/scram_utils.h +99 -0
  52. data/ext/libcouchbase/contrib/cbsasl/src/util.h +31 -0
  53. data/ext/libcouchbase/contrib/cliopts/CMakeLists.txt +2 -0
  54. data/ext/libcouchbase/contrib/cliopts/cliopts.c +938 -0
  55. data/ext/libcouchbase/contrib/cliopts/cliopts.h +610 -0
  56. data/ext/libcouchbase/contrib/genhash/genhash.c +371 -0
  57. data/ext/libcouchbase/contrib/genhash/genhash.h +241 -0
  58. data/ext/libcouchbase/contrib/gtest-1.7.0/CHANGES +157 -0
  59. data/ext/libcouchbase/contrib/gtest-1.7.0/CMakeLists.txt +252 -0
  60. data/ext/libcouchbase/contrib/gtest-1.7.0/CONTRIBUTORS +37 -0
  61. data/ext/libcouchbase/contrib/gtest-1.7.0/LICENSE +28 -0
  62. data/ext/libcouchbase/contrib/gtest-1.7.0/MINIFY.sh +15 -0
  63. data/ext/libcouchbase/contrib/gtest-1.7.0/README +435 -0
  64. data/ext/libcouchbase/contrib/gtest-1.7.0/cmake/internal_utils.cmake +227 -0
  65. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-death-test.h +294 -0
  66. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-message.h +250 -0
  67. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h +1421 -0
  68. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h.pump +487 -0
  69. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-printers.h +855 -0
  70. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-spi.h +232 -0
  71. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-test-part.h +179 -0
  72. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-typed-test.h +259 -0
  73. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest.h +2291 -0
  74. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_pred_impl.h +358 -0
  75. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_prod.h +58 -0
  76. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-death-test-internal.h +319 -0
  77. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-filepath.h +206 -0
  78. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-internal.h +1158 -0
  79. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-linked_ptr.h +233 -0
  80. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h +5143 -0
  81. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h.pump +301 -0
  82. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util.h +619 -0
  83. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-port.h +1947 -0
  84. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-string.h +167 -0
  85. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h +1012 -0
  86. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h.pump +339 -0
  87. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h +3331 -0
  88. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h.pump +297 -0
  89. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-all.cc +48 -0
  90. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-death-test.cc +1344 -0
  91. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-filepath.cc +382 -0
  92. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-internal-inl.h +1218 -0
  93. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-port.cc +805 -0
  94. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-printers.cc +363 -0
  95. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-test-part.cc +110 -0
  96. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-typed-test.cc +110 -0
  97. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest.cc +5015 -0
  98. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest_main.cc +38 -0
  99. data/ext/libcouchbase/contrib/http_parser/LICENSE-MIT +23 -0
  100. data/ext/libcouchbase/contrib/http_parser/README.md +178 -0
  101. data/ext/libcouchbase/contrib/http_parser/http_parser.c +2060 -0
  102. data/ext/libcouchbase/contrib/http_parser/http_parser.h +321 -0
  103. data/ext/libcouchbase/contrib/jsonsl/LICENSE +20 -0
  104. data/ext/libcouchbase/contrib/jsonsl/jsonsl.c +1452 -0
  105. data/ext/libcouchbase/contrib/jsonsl/jsonsl.h +971 -0
  106. data/ext/libcouchbase/contrib/lcb-jsoncpp/CMakeLists.txt +6 -0
  107. data/ext/libcouchbase/contrib/lcb-jsoncpp/LICENSE +55 -0
  108. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp-forwards.h +255 -0
  109. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.cpp +4893 -0
  110. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.h +1961 -0
  111. data/ext/libcouchbase/contrib/snappy/CMakeLists.txt +7 -0
  112. data/ext/libcouchbase/contrib/snappy/COPYING +28 -0
  113. data/ext/libcouchbase/contrib/snappy/snappy-c.cc +90 -0
  114. data/ext/libcouchbase/contrib/snappy/snappy-c.h +138 -0
  115. data/ext/libcouchbase/contrib/snappy/snappy-internal.h +150 -0
  116. data/ext/libcouchbase/contrib/snappy/snappy-lcb-msvc.h +5 -0
  117. data/ext/libcouchbase/contrib/snappy/snappy-sinksource.cc +75 -0
  118. data/ext/libcouchbase/contrib/snappy/snappy-sinksource.h +137 -0
  119. data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.cc +42 -0
  120. data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.h +491 -0
  121. data/ext/libcouchbase/contrib/snappy/snappy-stubs-public.h +100 -0
  122. data/ext/libcouchbase/contrib/snappy/snappy.cc +1312 -0
  123. data/ext/libcouchbase/contrib/snappy/snappy.h +184 -0
  124. data/ext/libcouchbase/contrib/win32-defs/iocpdefs.h +133 -0
  125. data/ext/libcouchbase/contrib/win32-defs/mingwdefs.h +4396 -0
  126. data/ext/libcouchbase/contrib/win32-defs/win_stdint.h +258 -0
  127. data/ext/libcouchbase/doc/Doxyfile +2495 -0
  128. data/ext/libcouchbase/doc/DoxygenLayout.xml +109 -0
  129. data/ext/libcouchbase/doc/Makefile +44 -0
  130. data/ext/libcouchbase/doc/apiattr.h +117 -0
  131. data/ext/libcouchbase/doc/cbc-n1qlback.markdown +88 -0
  132. data/ext/libcouchbase/doc/cbc-pillowfight.markdown +296 -0
  133. data/ext/libcouchbase/doc/cbc-subdoc.markdown +299 -0
  134. data/ext/libcouchbase/doc/cbc.markdown +763 -0
  135. data/ext/libcouchbase/doc/cbcrc.markdown +52 -0
  136. data/ext/libcouchbase/doc/common-additional-options.markdown +82 -0
  137. data/ext/libcouchbase/doc/common-options.markdown +71 -0
  138. data/ext/libcouchbase/doc/environment.h +93 -0
  139. data/ext/libcouchbase/doc/example/threads.c +77 -0
  140. data/ext/libcouchbase/doc/footer.html +22 -0
  141. data/ext/libcouchbase/doc/genman.sh +25 -0
  142. data/ext/libcouchbase/doc/header.html +52 -0
  143. data/ext/libcouchbase/doc/intro.h +130 -0
  144. data/ext/libcouchbase/doc/mainpage.h +136 -0
  145. data/ext/libcouchbase/doc/man/cbc-admin.1 +1 -0
  146. data/ext/libcouchbase/doc/man/cbc-bucket-create.1 +1 -0
  147. data/ext/libcouchbase/doc/man/cbc-bucket-delete.1 +1 -0
  148. data/ext/libcouchbase/doc/man/cbc-cat.1 +1 -0
  149. data/ext/libcouchbase/doc/man/cbc-connstr.1 +1 -0
  150. data/ext/libcouchbase/doc/man/cbc-cp.1 +1 -0
  151. data/ext/libcouchbase/doc/man/cbc-create.1 +1 -0
  152. data/ext/libcouchbase/doc/man/cbc-decr.1 +1 -0
  153. data/ext/libcouchbase/doc/man/cbc-flush.1 +1 -0
  154. data/ext/libcouchbase/doc/man/cbc-hash.1 +1 -0
  155. data/ext/libcouchbase/doc/man/cbc-incr.1 +1 -0
  156. data/ext/libcouchbase/doc/man/cbc-lock.1 +1 -0
  157. data/ext/libcouchbase/doc/man/cbc-mcflush.1 +1 -0
  158. data/ext/libcouchbase/doc/man/cbc-mcversion.1 +1 -0
  159. data/ext/libcouchbase/doc/man/cbc-n1ql.1 +1 -0
  160. data/ext/libcouchbase/doc/man/cbc-n1qlback.1 +198 -0
  161. data/ext/libcouchbase/doc/man/cbc-observe.1 +1 -0
  162. data/ext/libcouchbase/doc/man/cbc-pillowfight.1 +499 -0
  163. data/ext/libcouchbase/doc/man/cbc-ping.1 +1 -0
  164. data/ext/libcouchbase/doc/man/cbc-rm.1 +1 -0
  165. data/ext/libcouchbase/doc/man/cbc-role-list.1 +1 -0
  166. data/ext/libcouchbase/doc/man/cbc-stats.1 +1 -0
  167. data/ext/libcouchbase/doc/man/cbc-subdoc.1 +494 -0
  168. data/ext/libcouchbase/doc/man/cbc-unlock.1 +1 -0
  169. data/ext/libcouchbase/doc/man/cbc-user-delete.1 +1 -0
  170. data/ext/libcouchbase/doc/man/cbc-user-list.1 +1 -0
  171. data/ext/libcouchbase/doc/man/cbc-user-upsert.1 +1 -0
  172. data/ext/libcouchbase/doc/man/cbc-verbosity.1 +1 -0
  173. data/ext/libcouchbase/doc/man/cbc-version.1 +1 -0
  174. data/ext/libcouchbase/doc/man/cbc-view.1 +1 -0
  175. data/ext/libcouchbase/doc/man/cbc-watch.1 +1 -0
  176. data/ext/libcouchbase/doc/man/cbc.1 +1035 -0
  177. data/ext/libcouchbase/doc/man/cbcrc.4 +71 -0
  178. data/ext/libcouchbase/doc/style.css +1162 -0
  179. data/ext/libcouchbase/example/CMakeLists.txt +52 -0
  180. data/ext/libcouchbase/example/README.markdown +47 -0
  181. data/ext/libcouchbase/example/analytics/.gitignore +1 -0
  182. data/ext/libcouchbase/example/analytics/analytics.c +158 -0
  183. data/ext/libcouchbase/example/analytics/build-queries.rb +34 -0
  184. data/ext/libcouchbase/example/analytics/cJSON.c +1 -0
  185. data/ext/libcouchbase/example/analytics/cJSON.h +1 -0
  186. data/ext/libcouchbase/example/analytics/queries/00-show-dataverse.json +5 -0
  187. data/ext/libcouchbase/example/analytics/queries/01-setup-dataset-breweries.json +6 -0
  188. data/ext/libcouchbase/example/analytics/queries/02-setup-dataset-beers.json +6 -0
  189. data/ext/libcouchbase/example/analytics/queries/03-initiate-shadow.json +6 -0
  190. data/ext/libcouchbase/example/analytics/queries/04-list-datasets.json +7 -0
  191. data/ext/libcouchbase/example/analytics/queries/05-count-breweries.json +5 -0
  192. data/ext/libcouchbase/example/analytics/queries/06-first-brewery.json +6 -0
  193. data/ext/libcouchbase/example/analytics/queries/07-key-based-lookup.json +6 -0
  194. data/ext/libcouchbase/example/analytics/queries/08-exact-match-lookup.json +7 -0
  195. data/ext/libcouchbase/example/analytics/queries/09-exact-match-lookup-different-shape.json +6 -0
  196. data/ext/libcouchbase/example/analytics/queries/10-other-query-filters.json +6 -0
  197. data/ext/libcouchbase/example/analytics/queries/11-equijoin.json +9 -0
  198. data/ext/libcouchbase/example/analytics/queries/12-equijoin-select-star.json +10 -0
  199. data/ext/libcouchbase/example/analytics/queries/13-ansi-join.json +8 -0
  200. data/ext/libcouchbase/example/analytics/queries/14-join-select-values.json +8 -0
  201. data/ext/libcouchbase/example/analytics/queries/15-nested-outer-join.json +7 -0
  202. data/ext/libcouchbase/example/analytics/queries/16-theta-join.json +8 -0
  203. data/ext/libcouchbase/example/analytics/queries/17-existential-quantification.json +9 -0
  204. data/ext/libcouchbase/example/analytics/queries/18-universal-quantification.json +7 -0
  205. data/ext/libcouchbase/example/analytics/queries/19-simple-aggregation.json +6 -0
  206. data/ext/libcouchbase/example/analytics/queries/20-simple-aggregation-unwrapped-value.json +6 -0
  207. data/ext/libcouchbase/example/analytics/queries/21-simple-aggregation-explicit.json +6 -0
  208. data/ext/libcouchbase/example/analytics/queries/22-grouping-and-aggregation.json +6 -0
  209. data/ext/libcouchbase/example/analytics/queries/23-grouping-and-aggregation-with-hint.json +7 -0
  210. data/ext/libcouchbase/example/analytics/queries/24-grouping-and-limits.json +7 -0
  211. data/ext/libcouchbase/example/analytics/queries/25-named-parameters.json +7 -0
  212. data/ext/libcouchbase/example/analytics/queries/26-positional-parameters.json +7 -0
  213. data/ext/libcouchbase/example/analytics/queries.h +113 -0
  214. data/ext/libcouchbase/example/crypto/.gitignore +2 -0
  215. data/ext/libcouchbase/example/crypto/Makefile +13 -0
  216. data/ext/libcouchbase/example/crypto/common_provider.c +26 -0
  217. data/ext/libcouchbase/example/crypto/common_provider.h +33 -0
  218. data/ext/libcouchbase/example/crypto/openssl_symmetric_decrypt.c +144 -0
  219. data/ext/libcouchbase/example/crypto/openssl_symmetric_encrypt.c +146 -0
  220. data/ext/libcouchbase/example/crypto/openssl_symmetric_provider.c +271 -0
  221. data/ext/libcouchbase/example/crypto/openssl_symmetric_provider.h +29 -0
  222. data/ext/libcouchbase/example/db/db.c +171 -0
  223. data/ext/libcouchbase/example/db/vb.c +227 -0
  224. data/ext/libcouchbase/example/fts/.gitignore +1 -0
  225. data/ext/libcouchbase/example/fts/build-queries.rb +33 -0
  226. data/ext/libcouchbase/example/fts/fts.c +142 -0
  227. data/ext/libcouchbase/example/fts/queries/00-simple-text-query.json +12 -0
  228. data/ext/libcouchbase/example/fts/queries/01-simple-text-query-on-non-default-index.json +9 -0
  229. data/ext/libcouchbase/example/fts/queries/02-simple-text-query-on-stored-field.json +13 -0
  230. data/ext/libcouchbase/example/fts/queries/03-match-query-with-facet.json +19 -0
  231. data/ext/libcouchbase/example/fts/queries/04-docid-query.json +11 -0
  232. data/ext/libcouchbase/example/fts/queries/05-unanalyzed-term-query-with-fuzziness-level-of-0.json +13 -0
  233. data/ext/libcouchbase/example/fts/queries/06-unanalyzed-term-query-with-fuzziness-level-of-2.json +14 -0
  234. data/ext/libcouchbase/example/fts/queries/07-match-phrase-query.json +13 -0
  235. data/ext/libcouchbase/example/fts/queries/08-phrase-query.json +16 -0
  236. data/ext/libcouchbase/example/fts/queries/09-query-string-query.json +9 -0
  237. data/ext/libcouchbase/example/fts/queries/10-conjunction-query.json +21 -0
  238. data/ext/libcouchbase/example/fts/queries/11-wild-card-query.json +13 -0
  239. data/ext/libcouchbase/example/fts/queries/12-numeric-range-query.json +11 -0
  240. data/ext/libcouchbase/example/fts/queries/13-regexp-query.json +13 -0
  241. data/ext/libcouchbase/example/fts/queries.h +61 -0
  242. data/ext/libcouchbase/example/instancepool/main.cc +112 -0
  243. data/ext/libcouchbase/example/instancepool/pool.cc +102 -0
  244. data/ext/libcouchbase/example/instancepool/pool.h +69 -0
  245. data/ext/libcouchbase/example/libeventdirect/main.c +222 -0
  246. data/ext/libcouchbase/example/mcc/mcc.cc +246 -0
  247. data/ext/libcouchbase/example/minimal/.gitignore +1 -0
  248. data/ext/libcouchbase/example/minimal/minimal.c +132 -0
  249. data/ext/libcouchbase/example/minimal/query.c +185 -0
  250. data/ext/libcouchbase/example/observe/durability.c +102 -0
  251. data/ext/libcouchbase/example/observe/observe.c +159 -0
  252. data/ext/libcouchbase/example/subdoc/subdoc-multi.cc +143 -0
  253. data/ext/libcouchbase/example/subdoc/subdoc-simple.cc +201 -0
  254. data/ext/libcouchbase/example/subdoc/subdoc-xattrs.c +286 -0
  255. data/ext/libcouchbase/example/tick/tick.c +119 -0
  256. data/ext/libcouchbase/example/tracing/.gitignore +2 -0
  257. data/ext/libcouchbase/example/tracing/Makefile +8 -0
  258. data/ext/libcouchbase/example/tracing/cJSON.c +1 -0
  259. data/ext/libcouchbase/example/tracing/cJSON.h +1 -0
  260. data/ext/libcouchbase/example/tracing/tracing.c +439 -0
  261. data/ext/libcouchbase/example/tracing/views.c +444 -0
  262. data/ext/libcouchbase/example/users/README +48 -0
  263. data/ext/libcouchbase/example/users/users.c +147 -0
  264. data/ext/libcouchbase/example/views/views-example.cc +83 -0
  265. data/ext/libcouchbase/include/libcouchbase/_cxxwrap.h +150 -0
  266. data/ext/libcouchbase/include/libcouchbase/api-legacy.h +1689 -0
  267. data/ext/libcouchbase/include/libcouchbase/api3.h +2 -0
  268. data/ext/libcouchbase/include/libcouchbase/assert.h +44 -0
  269. data/ext/libcouchbase/include/libcouchbase/auth.h +297 -0
  270. data/ext/libcouchbase/include/libcouchbase/cbft.h +151 -0
  271. data/ext/libcouchbase/include/libcouchbase/cntl-private.h +319 -0
  272. data/ext/libcouchbase/include/libcouchbase/cntl.h +1418 -0
  273. data/ext/libcouchbase/include/libcouchbase/configuration.h.in +29 -0
  274. data/ext/libcouchbase/include/libcouchbase/couchbase.h +4089 -0
  275. data/ext/libcouchbase/include/libcouchbase/crypto.h +306 -0
  276. data/ext/libcouchbase/include/libcouchbase/deprecated.h +312 -0
  277. data/ext/libcouchbase/include/libcouchbase/error.h +680 -0
  278. data/ext/libcouchbase/include/libcouchbase/http.h +1 -0
  279. data/ext/libcouchbase/include/libcouchbase/iops.h +1053 -0
  280. data/ext/libcouchbase/include/libcouchbase/ixmgmt.h +263 -0
  281. data/ext/libcouchbase/include/libcouchbase/kvbuf.h +137 -0
  282. data/ext/libcouchbase/include/libcouchbase/metrics.h +79 -0
  283. data/ext/libcouchbase/include/libcouchbase/n1ql.h +539 -0
  284. data/ext/libcouchbase/include/libcouchbase/pktfwd.h +270 -0
  285. data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +370 -0
  286. data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr-inl.c +76 -0
  287. data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr.h +199 -0
  288. data/ext/libcouchbase/include/libcouchbase/subdoc.h +347 -0
  289. data/ext/libcouchbase/include/libcouchbase/sysdefs.h +98 -0
  290. data/ext/libcouchbase/include/libcouchbase/tracing.h +437 -0
  291. data/ext/libcouchbase/include/libcouchbase/vbucket.h +680 -0
  292. data/ext/libcouchbase/include/libcouchbase/views.h +357 -0
  293. data/ext/libcouchbase/include/libcouchbase/visibility.h +66 -0
  294. data/ext/libcouchbase/include/memcached/COPYING +30 -0
  295. data/ext/libcouchbase/include/memcached/README +10 -0
  296. data/ext/libcouchbase/include/memcached/protocol_binary.h +885 -0
  297. data/ext/libcouchbase/packaging/README +7 -0
  298. data/ext/libcouchbase/packaging/abicheck/.gitignore +4 -0
  299. data/ext/libcouchbase/packaging/abicheck/Makefile +17 -0
  300. data/ext/libcouchbase/packaging/abicheck/README.md +27 -0
  301. data/ext/libcouchbase/packaging/abicheck/template.xml +3 -0
  302. data/ext/libcouchbase/packaging/deb/compat +1 -0
  303. data/ext/libcouchbase/packaging/deb/control +72 -0
  304. data/ext/libcouchbase/packaging/deb/copyright +10 -0
  305. data/ext/libcouchbase/packaging/deb/libcouchbase-dev.docs +3 -0
  306. data/ext/libcouchbase/packaging/deb/package.mk +31 -0
  307. data/ext/libcouchbase/packaging/deb/rules +46 -0
  308. data/ext/libcouchbase/packaging/deb/source/format +1 -0
  309. data/ext/libcouchbase/packaging/distinfo/README +1 -0
  310. data/ext/libcouchbase/packaging/distinfo/distinfo.cmake.in +4 -0
  311. data/ext/libcouchbase/packaging/dllversion.rc.in +39 -0
  312. data/ext/libcouchbase/packaging/libcouchbase.pc.in +10 -0
  313. data/ext/libcouchbase/packaging/nuget/libcouchbase.autopkg +76 -0
  314. data/ext/libcouchbase/packaging/parse-git-describe.pl +166 -0
  315. data/ext/libcouchbase/packaging/rpm/libcouchbase.spec.in +101 -0
  316. data/ext/libcouchbase/packaging/rpm/package.mk +40 -0
  317. data/ext/libcouchbase/plugins/io/iocp/CMakeLists.txt +9 -0
  318. data/ext/libcouchbase/plugins/io/iocp/iocp_iops.c +467 -0
  319. data/ext/libcouchbase/plugins/io/iocp/iocp_iops.h +217 -0
  320. data/ext/libcouchbase/plugins/io/iocp/iocp_loop.c +295 -0
  321. data/ext/libcouchbase/plugins/io/iocp/iocp_timer.c +79 -0
  322. data/ext/libcouchbase/plugins/io/iocp/iocp_util.c +229 -0
  323. data/ext/libcouchbase/plugins/io/libev/CMakeLists.txt +31 -0
  324. data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +66 -0
  325. data/ext/libcouchbase/plugins/io/libev/plugin-libev.c +289 -0
  326. data/ext/libcouchbase/plugins/io/libevent/CMakeLists.txt +31 -0
  327. data/ext/libcouchbase/plugins/io/libevent/libevent_io_opts.h +67 -0
  328. data/ext/libcouchbase/plugins/io/libevent/plugin-libevent.c +292 -0
  329. data/ext/libcouchbase/plugins/io/libuv/CMakeLists.txt +44 -0
  330. data/ext/libcouchbase/plugins/io/libuv/libuv_compat.h +218 -0
  331. data/ext/libcouchbase/plugins/io/libuv/libuv_io_opts.h +118 -0
  332. data/ext/libcouchbase/plugins/io/libuv/plugin-internal.h +155 -0
  333. data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +709 -0
  334. data/ext/libcouchbase/plugins/io/select/CMakeLists.txt +13 -0
  335. data/ext/libcouchbase/plugins/io/select/plugin-select.c +451 -0
  336. data/ext/libcouchbase/plugins/io/select/select_io_opts.h +39 -0
  337. data/ext/libcouchbase/src/README.md +101 -0
  338. data/ext/libcouchbase/src/aspend.h +105 -0
  339. data/ext/libcouchbase/src/auth-priv.h +85 -0
  340. data/ext/libcouchbase/src/auth.cc +146 -0
  341. data/ext/libcouchbase/src/bootstrap.cc +263 -0
  342. data/ext/libcouchbase/src/bootstrap.h +149 -0
  343. data/ext/libcouchbase/src/bucketconfig/bc_cccp.cc +450 -0
  344. data/ext/libcouchbase/src/bucketconfig/bc_file.cc +281 -0
  345. data/ext/libcouchbase/src/bucketconfig/bc_http.cc +527 -0
  346. data/ext/libcouchbase/src/bucketconfig/bc_http.h +107 -0
  347. data/ext/libcouchbase/src/bucketconfig/bc_static.cc +150 -0
  348. data/ext/libcouchbase/src/bucketconfig/clconfig.h +700 -0
  349. data/ext/libcouchbase/src/bucketconfig/confmon.cc +403 -0
  350. data/ext/libcouchbase/src/callbacks.c +380 -0
  351. data/ext/libcouchbase/src/cbft.cc +253 -0
  352. data/ext/libcouchbase/src/cntl.cc +1057 -0
  353. data/ext/libcouchbase/src/config_static.h +176 -0
  354. data/ext/libcouchbase/src/connspec.cc +555 -0
  355. data/ext/libcouchbase/src/connspec.h +155 -0
  356. data/ext/libcouchbase/src/crypto.cc +399 -0
  357. data/ext/libcouchbase/src/ctx-log-inl.h +44 -0
  358. data/ext/libcouchbase/src/dns-srv.cc +146 -0
  359. data/ext/libcouchbase/src/dump.cc +103 -0
  360. data/ext/libcouchbase/src/errmap.cc +173 -0
  361. data/ext/libcouchbase/src/errmap.h +271 -0
  362. data/ext/libcouchbase/src/getconfig.cc +72 -0
  363. data/ext/libcouchbase/src/gethrtime.c +109 -0
  364. data/ext/libcouchbase/src/handler.cc +1101 -0
  365. data/ext/libcouchbase/src/hashtable.c +75 -0
  366. data/ext/libcouchbase/src/hdr_timings.c +92 -0
  367. data/ext/libcouchbase/src/hostlist.cc +293 -0
  368. data/ext/libcouchbase/src/hostlist.h +160 -0
  369. data/ext/libcouchbase/src/http/http-priv.h +326 -0
  370. data/ext/libcouchbase/src/http/http.cc +672 -0
  371. data/ext/libcouchbase/src/http/http.h +1 -0
  372. data/ext/libcouchbase/src/http/http_io.cc +316 -0
  373. data/ext/libcouchbase/src/instance.cc +917 -0
  374. data/ext/libcouchbase/src/internal.h +285 -0
  375. data/ext/libcouchbase/src/iofactory.c +575 -0
  376. data/ext/libcouchbase/src/jsparse/parser.cc +445 -0
  377. data/ext/libcouchbase/src/jsparse/parser.h +159 -0
  378. data/ext/libcouchbase/src/lcbht/lcbht.cc +177 -0
  379. data/ext/libcouchbase/src/lcbht/lcbht.h +210 -0
  380. data/ext/libcouchbase/src/lcbio/connect.cc +603 -0
  381. data/ext/libcouchbase/src/lcbio/connect.h +400 -0
  382. data/ext/libcouchbase/src/lcbio/ctx.c +658 -0
  383. data/ext/libcouchbase/src/lcbio/ctx.h +405 -0
  384. data/ext/libcouchbase/src/lcbio/iotable.c +290 -0
  385. data/ext/libcouchbase/src/lcbio/iotable.h +169 -0
  386. data/ext/libcouchbase/src/lcbio/ioutils.cc +356 -0
  387. data/ext/libcouchbase/src/lcbio/ioutils.h +144 -0
  388. data/ext/libcouchbase/src/lcbio/lcbio.h +51 -0
  389. data/ext/libcouchbase/src/lcbio/manager.cc +579 -0
  390. data/ext/libcouchbase/src/lcbio/manager.h +195 -0
  391. data/ext/libcouchbase/src/lcbio/protoctx.c +84 -0
  392. data/ext/libcouchbase/src/lcbio/rw-inl.h +137 -0
  393. data/ext/libcouchbase/src/lcbio/ssl.h +159 -0
  394. data/ext/libcouchbase/src/lcbio/timer-cxx.h +87 -0
  395. data/ext/libcouchbase/src/lcbio/timer-ng.h +179 -0
  396. data/ext/libcouchbase/src/lcbio/timer.c +132 -0
  397. data/ext/libcouchbase/src/legacy.c +431 -0
  398. data/ext/libcouchbase/src/list.c +144 -0
  399. data/ext/libcouchbase/src/list.h +127 -0
  400. data/ext/libcouchbase/src/logging.c +244 -0
  401. data/ext/libcouchbase/src/logging.h +88 -0
  402. data/ext/libcouchbase/src/mc/compress.cc +171 -0
  403. data/ext/libcouchbase/src/mc/compress.h +56 -0
  404. data/ext/libcouchbase/src/mc/forward.c +186 -0
  405. data/ext/libcouchbase/src/mc/forward.h +90 -0
  406. data/ext/libcouchbase/src/mc/iovcursor-inl.h +279 -0
  407. data/ext/libcouchbase/src/mc/iovcursor.h +66 -0
  408. data/ext/libcouchbase/src/mc/mcreq-flush-inl.h +115 -0
  409. data/ext/libcouchbase/src/mc/mcreq.c +983 -0
  410. data/ext/libcouchbase/src/mc/mcreq.h +1015 -0
  411. data/ext/libcouchbase/src/mcserver/mcserver.cc +1055 -0
  412. data/ext/libcouchbase/src/mcserver/mcserver.h +221 -0
  413. data/ext/libcouchbase/src/mcserver/negotiate.cc +757 -0
  414. data/ext/libcouchbase/src/mcserver/negotiate.h +128 -0
  415. data/ext/libcouchbase/src/mctx-helper.h +62 -0
  416. data/ext/libcouchbase/src/metrics.cc +132 -0
  417. data/ext/libcouchbase/src/n1ql/ixmgmt.cc +857 -0
  418. data/ext/libcouchbase/src/n1ql/n1ql-internal.h +22 -0
  419. data/ext/libcouchbase/src/n1ql/n1ql.cc +830 -0
  420. data/ext/libcouchbase/src/n1ql/params.cc +260 -0
  421. data/ext/libcouchbase/src/netbuf/netbuf-defs.h +89 -0
  422. data/ext/libcouchbase/src/netbuf/netbuf-mblock.h +235 -0
  423. data/ext/libcouchbase/src/netbuf/netbuf.c +929 -0
  424. data/ext/libcouchbase/src/netbuf/netbuf.h +452 -0
  425. data/ext/libcouchbase/src/newconfig.cc +365 -0
  426. data/ext/libcouchbase/src/nodeinfo.cc +184 -0
  427. data/ext/libcouchbase/src/operations/cbflush.cc +63 -0
  428. data/ext/libcouchbase/src/operations/counter.cc +117 -0
  429. data/ext/libcouchbase/src/operations/durability-cas.cc +251 -0
  430. data/ext/libcouchbase/src/operations/durability-seqno.cc +170 -0
  431. data/ext/libcouchbase/src/operations/durability.cc +668 -0
  432. data/ext/libcouchbase/src/operations/durability_internal.h +306 -0
  433. data/ext/libcouchbase/src/operations/get.cc +409 -0
  434. data/ext/libcouchbase/src/operations/observe-seqno.cc +94 -0
  435. data/ext/libcouchbase/src/operations/observe.cc +367 -0
  436. data/ext/libcouchbase/src/operations/ping.cc +496 -0
  437. data/ext/libcouchbase/src/operations/pktfwd.cc +86 -0
  438. data/ext/libcouchbase/src/operations/remove.cc +84 -0
  439. data/ext/libcouchbase/src/operations/stats.cc +459 -0
  440. data/ext/libcouchbase/src/operations/store.cc +358 -0
  441. data/ext/libcouchbase/src/operations/subdoc.cc +614 -0
  442. data/ext/libcouchbase/src/operations/touch.cc +84 -0
  443. data/ext/libcouchbase/src/packetutils.h +388 -0
  444. data/ext/libcouchbase/src/probes.d +182 -0
  445. data/ext/libcouchbase/src/rdb/bigalloc.c +225 -0
  446. data/ext/libcouchbase/src/rdb/bigalloc.h +73 -0
  447. data/ext/libcouchbase/src/rdb/chunkalloc.c +174 -0
  448. data/ext/libcouchbase/src/rdb/libcalloc.c +94 -0
  449. data/ext/libcouchbase/src/rdb/rope.c +419 -0
  450. data/ext/libcouchbase/src/rdb/rope.h +488 -0
  451. data/ext/libcouchbase/src/retrychk.cc +113 -0
  452. data/ext/libcouchbase/src/retryq.cc +458 -0
  453. data/ext/libcouchbase/src/retryq.h +170 -0
  454. data/ext/libcouchbase/src/ringbuffer.c +442 -0
  455. data/ext/libcouchbase/src/ringbuffer.h +100 -0
  456. data/ext/libcouchbase/src/rnd.cc +61 -0
  457. data/ext/libcouchbase/src/rnd.h +39 -0
  458. data/ext/libcouchbase/src/settings.c +125 -0
  459. data/ext/libcouchbase/src/settings.h +273 -0
  460. data/ext/libcouchbase/src/sllist-inl.h +197 -0
  461. data/ext/libcouchbase/src/sllist.h +76 -0
  462. data/ext/libcouchbase/src/ssl/CMakeLists.txt +11 -0
  463. data/ext/libcouchbase/src/ssl/ssl_c.c +442 -0
  464. data/ext/libcouchbase/src/ssl/ssl_common.c +478 -0
  465. data/ext/libcouchbase/src/ssl/ssl_e.c +421 -0
  466. data/ext/libcouchbase/src/ssl/ssl_iot_common.h +182 -0
  467. data/ext/libcouchbase/src/strcodecs/base64.c +307 -0
  468. data/ext/libcouchbase/src/strcodecs/strcodecs.h +302 -0
  469. data/ext/libcouchbase/src/timings.c +207 -0
  470. data/ext/libcouchbase/src/trace.h +117 -0
  471. data/ext/libcouchbase/src/tracing/span.cc +421 -0
  472. data/ext/libcouchbase/src/tracing/threshold_logging_tracer.cc +213 -0
  473. data/ext/libcouchbase/src/tracing/tracer.cc +53 -0
  474. data/ext/libcouchbase/src/tracing/tracing-internal.h +198 -0
  475. data/ext/libcouchbase/src/utilities.c +176 -0
  476. data/ext/libcouchbase/src/vbucket/CMakeLists.txt +2 -0
  477. data/ext/libcouchbase/src/vbucket/aliases.h +35 -0
  478. data/ext/libcouchbase/src/vbucket/crc32.h +83 -0
  479. data/ext/libcouchbase/src/vbucket/hash.h +30 -0
  480. data/ext/libcouchbase/src/vbucket/json-inl.h +112 -0
  481. data/ext/libcouchbase/src/vbucket/ketama.c +66 -0
  482. data/ext/libcouchbase/src/vbucket/rfc1321/global.h +32 -0
  483. data/ext/libcouchbase/src/vbucket/rfc1321/md5.h +35 -0
  484. data/ext/libcouchbase/src/vbucket/rfc1321/md5c-inl.h +335 -0
  485. data/ext/libcouchbase/src/vbucket/vbucket.c +1735 -0
  486. data/ext/libcouchbase/src/views/docreq.cc +213 -0
  487. data/ext/libcouchbase/src/views/docreq.h +94 -0
  488. data/ext/libcouchbase/src/views/viewreq.cc +381 -0
  489. data/ext/libcouchbase/src/views/viewreq.h +87 -0
  490. data/ext/libcouchbase/src/wait.cc +156 -0
  491. data/ext/libcouchbase/tests/CMakeLists.txt +149 -0
  492. data/ext/libcouchbase/tests/basic/t_base64.cc +109 -0
  493. data/ext/libcouchbase/tests/basic/t_ccbc103.cc +95 -0
  494. data/ext/libcouchbase/tests/basic/t_connstr.cc +456 -0
  495. data/ext/libcouchbase/tests/basic/t_creds.cc +96 -0
  496. data/ext/libcouchbase/tests/basic/t_ctlcodes.cc +92 -0
  497. data/ext/libcouchbase/tests/basic/t_host.cc +210 -0
  498. data/ext/libcouchbase/tests/basic/t_jsparse.cc +82 -0
  499. data/ext/libcouchbase/tests/basic/t_jsparse.h +589 -0
  500. data/ext/libcouchbase/tests/basic/t_list.cc +155 -0
  501. data/ext/libcouchbase/tests/basic/t_logger.cc +65 -0
  502. data/ext/libcouchbase/tests/basic/t_misc.cc +24 -0
  503. data/ext/libcouchbase/tests/basic/t_n1qlstrings.cc +17 -0
  504. data/ext/libcouchbase/tests/basic/t_netbuf.cc +446 -0
  505. data/ext/libcouchbase/tests/basic/t_packet.cc +215 -0
  506. data/ext/libcouchbase/tests/basic/t_ringbuffer.cc +278 -0
  507. data/ext/libcouchbase/tests/basic/t_scram.cc +514 -0
  508. data/ext/libcouchbase/tests/basic/t_slist.cc +429 -0
  509. data/ext/libcouchbase/tests/basic/t_strerror.cc +64 -0
  510. data/ext/libcouchbase/tests/basic/t_urlencode.cc +132 -0
  511. data/ext/libcouchbase/tests/check-all.cc +612 -0
  512. data/ext/libcouchbase/tests/htparse/t_basic.cc +173 -0
  513. data/ext/libcouchbase/tests/ioserver/connection.cc +166 -0
  514. data/ext/libcouchbase/tests/ioserver/future.cc +50 -0
  515. data/ext/libcouchbase/tests/ioserver/ioserver.cc +117 -0
  516. data/ext/libcouchbase/tests/ioserver/ioserver.h +478 -0
  517. data/ext/libcouchbase/tests/ioserver/socket.cc +88 -0
  518. data/ext/libcouchbase/tests/ioserver/ssl_connection.cc +145 -0
  519. data/ext/libcouchbase/tests/ioserver/threads-pthreads.cc +119 -0
  520. data/ext/libcouchbase/tests/ioserver/threads-win32.cc +117 -0
  521. data/ext/libcouchbase/tests/ioserver/threads.h +66 -0
  522. data/ext/libcouchbase/tests/iotests/iotests.h +15 -0
  523. data/ext/libcouchbase/tests/iotests/mock-environment.cc +632 -0
  524. data/ext/libcouchbase/tests/iotests/mock-environment.h +480 -0
  525. data/ext/libcouchbase/tests/iotests/mock-unit-test.cc +67 -0
  526. data/ext/libcouchbase/tests/iotests/mock-unit-test.h +61 -0
  527. data/ext/libcouchbase/tests/iotests/serverparams.h +76 -0
  528. data/ext/libcouchbase/tests/iotests/t_arithmetic.cc +143 -0
  529. data/ext/libcouchbase/tests/iotests/t_behavior.cc +220 -0
  530. data/ext/libcouchbase/tests/iotests/t_configcache.cc +117 -0
  531. data/ext/libcouchbase/tests/iotests/t_confmon.cc +223 -0
  532. data/ext/libcouchbase/tests/iotests/t_durability.cc +1108 -0
  533. data/ext/libcouchbase/tests/iotests/t_eerrs.cc +121 -0
  534. data/ext/libcouchbase/tests/iotests/t_errmap.cc +181 -0
  535. data/ext/libcouchbase/tests/iotests/t_forward.cc +118 -0
  536. data/ext/libcouchbase/tests/iotests/t_get.cc +512 -0
  537. data/ext/libcouchbase/tests/iotests/t_http.cc +438 -0
  538. data/ext/libcouchbase/tests/iotests/t_iops.cc +175 -0
  539. data/ext/libcouchbase/tests/iotests/t_lock.cc +274 -0
  540. data/ext/libcouchbase/tests/iotests/t_misc.cc +777 -0
  541. data/ext/libcouchbase/tests/iotests/t_mutate.cc +609 -0
  542. data/ext/libcouchbase/tests/iotests/t_n1ql.cc +270 -0
  543. data/ext/libcouchbase/tests/iotests/t_netfail.cc +778 -0
  544. data/ext/libcouchbase/tests/iotests/t_obseqno.cc +156 -0
  545. data/ext/libcouchbase/tests/iotests/t_regression.cc +321 -0
  546. data/ext/libcouchbase/tests/iotests/t_sched.cc +87 -0
  547. data/ext/libcouchbase/tests/iotests/t_serverops.cc +231 -0
  548. data/ext/libcouchbase/tests/iotests/t_smoke.cc +528 -0
  549. data/ext/libcouchbase/tests/iotests/t_snappy.cc +316 -0
  550. data/ext/libcouchbase/tests/iotests/t_subdoc.cc +857 -0
  551. data/ext/libcouchbase/tests/iotests/t_syncmode.cc +64 -0
  552. data/ext/libcouchbase/tests/iotests/t_views.cc +417 -0
  553. data/ext/libcouchbase/tests/iotests/testutil.cc +251 -0
  554. data/ext/libcouchbase/tests/iotests/testutil.h +163 -0
  555. data/ext/libcouchbase/tests/mc/mctest.h +119 -0
  556. data/ext/libcouchbase/tests/mc/pktmaker.h +101 -0
  557. data/ext/libcouchbase/tests/mc/t_alloc.cc +269 -0
  558. data/ext/libcouchbase/tests/mc/t_context.cc +100 -0
  559. data/ext/libcouchbase/tests/mc/t_flush.cc +185 -0
  560. data/ext/libcouchbase/tests/mc/t_forward.cc +239 -0
  561. data/ext/libcouchbase/tests/mc/t_ioflush.cc +102 -0
  562. data/ext/libcouchbase/tests/mc/t_iovcursor.cc +173 -0
  563. data/ext/libcouchbase/tests/mocksupport/procutil.c +305 -0
  564. data/ext/libcouchbase/tests/mocksupport/procutil.h +89 -0
  565. data/ext/libcouchbase/tests/mocksupport/server.c +391 -0
  566. data/ext/libcouchbase/tests/mocksupport/server.h +72 -0
  567. data/ext/libcouchbase/tests/mocksupport/timeout.c +69 -0
  568. data/ext/libcouchbase/tests/nonio_tests.cc +23 -0
  569. data/ext/libcouchbase/tests/rdb/rdbtest.h +133 -0
  570. data/ext/libcouchbase/tests/rdb/t_basic.cc +128 -0
  571. data/ext/libcouchbase/tests/rdb/t_bigalloc.cc +93 -0
  572. data/ext/libcouchbase/tests/rdb/t_refs.cc +112 -0
  573. data/ext/libcouchbase/tests/socktests/socktest.cc +344 -0
  574. data/ext/libcouchbase/tests/socktests/socktest.h +447 -0
  575. data/ext/libcouchbase/tests/socktests/t_basic.cc +143 -0
  576. data/ext/libcouchbase/tests/socktests/t_ctx.cc +73 -0
  577. data/ext/libcouchbase/tests/socktests/t_manager.cc +159 -0
  578. data/ext/libcouchbase/tests/socktests/t_putex.cc +256 -0
  579. data/ext/libcouchbase/tests/socktests/t_read.cc +187 -0
  580. data/ext/libcouchbase/tests/socktests/t_reentrant.cc +143 -0
  581. data/ext/libcouchbase/tests/socktests/t_ssl.cc +80 -0
  582. data/ext/libcouchbase/tests/socktests/t_write.cc +95 -0
  583. data/ext/libcouchbase/tests/start_mock.bat +15 -0
  584. data/ext/libcouchbase/tests/start_mock.sh +42 -0
  585. data/ext/libcouchbase/tests/unit_tests.cc +43 -0
  586. data/ext/libcouchbase/tests/vbucket/confdata/bad.json +101 -0
  587. data/ext/libcouchbase/tests/vbucket/confdata/full_25.json +363 -0
  588. data/ext/libcouchbase/tests/vbucket/confdata/ketama_expected.json +2562 -0
  589. data/ext/libcouchbase/tests/vbucket/confdata/map_node_present_nodesext_missing_nodes.json +94 -0
  590. data/ext/libcouchbase/tests/vbucket/confdata/memd_25.json +90 -0
  591. data/ext/libcouchbase/tests/vbucket/confdata/memd_30.json +1 -0
  592. data/ext/libcouchbase/tests/vbucket/confdata/memd_45.json +1 -0
  593. data/ext/libcouchbase/tests/vbucket/confdata/memd_ketama_config.json +31 -0
  594. data/ext/libcouchbase/tests/vbucket/confdata/terse_25.json +291 -0
  595. data/ext/libcouchbase/tests/vbucket/confdata/terse_30.json +1 -0
  596. data/ext/libcouchbase/tests/vbucket/t_config.cc +386 -0
  597. data/ext/libcouchbase/tools/CMakeLists.txt +80 -0
  598. data/ext/libcouchbase/tools/cbc-handlers.h +636 -0
  599. data/ext/libcouchbase/tools/cbc-n1qlback.cc +496 -0
  600. data/ext/libcouchbase/tools/cbc-pillowfight.cc +1230 -0
  601. data/ext/libcouchbase/tools/cbc-proxy.cc +534 -0
  602. data/ext/libcouchbase/tools/cbc-subdoc.cc +825 -0
  603. data/ext/libcouchbase/tools/cbc.cc +1928 -0
  604. data/ext/libcouchbase/tools/common/histogram.cc +44 -0
  605. data/ext/libcouchbase/tools/common/histogram.h +23 -0
  606. data/ext/libcouchbase/tools/common/options.cc +451 -0
  607. data/ext/libcouchbase/tools/common/options.h +90 -0
  608. data/ext/libcouchbase/tools/docgen/docgen.h +495 -0
  609. data/ext/libcouchbase/tools/docgen/loc.h +211 -0
  610. data/ext/libcouchbase/tools/docgen/placeholders.h +211 -0
  611. data/ext/libcouchbase/tools/docgen/seqgen.h +122 -0
  612. data/ext/libcouchbase/tools/extract-packets.rb +110 -0
  613. data/ext/libcouchbase/tools/linenoise/linenoise.c +1199 -0
  614. data/ext/libcouchbase/tools/linenoise/linenoise.h +73 -0
  615. data/lib/mt-libcouchbase/bucket.rb +825 -0
  616. data/lib/mt-libcouchbase/callbacks.rb +69 -0
  617. data/lib/mt-libcouchbase/connection.rb +896 -0
  618. data/lib/mt-libcouchbase/design_docs.rb +92 -0
  619. data/lib/mt-libcouchbase/error.rb +68 -0
  620. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdbase.rb +23 -0
  621. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdcounter.rb +36 -0
  622. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdendure.rb +26 -0
  623. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdfts.rb +24 -0
  624. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdget.rb +30 -0
  625. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdgetreplica.rb +49 -0
  626. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdhttp.rb +58 -0
  627. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdn1ql.rb +40 -0
  628. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdobseqno.rb +33 -0
  629. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdobserve.rb +30 -0
  630. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdstore.rb +40 -0
  631. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdstoredur.rb +45 -0
  632. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdsubdoc.rb +61 -0
  633. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdverbosity.rb +29 -0
  634. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdviewquery.rb +61 -0
  635. data/lib/mt-libcouchbase/ext/mt-libcouchbase/contigbuf.rb +14 -0
  636. data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st.rb +15 -0
  637. data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st0.rb +23 -0
  638. data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st1.rb +26 -0
  639. data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st2.rb +32 -0
  640. data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st3.rb +26 -0
  641. data/lib/mt-libcouchbase/ext/mt-libcouchbase/crst_u.rb +20 -0
  642. data/lib/mt-libcouchbase/ext/mt-libcouchbase/durability_opts_st_v.rb +11 -0
  643. data/lib/mt-libcouchbase/ext/mt-libcouchbase/durability_opts_t.rb +14 -0
  644. data/lib/mt-libcouchbase/ext/mt-libcouchbase/durabilityopt_sv0.rb +63 -0
  645. data/lib/mt-libcouchbase/ext/mt-libcouchbase/enums.rb +1007 -0
  646. data/lib/mt-libcouchbase/ext/mt-libcouchbase/fragbuf.rb +18 -0
  647. data/lib/mt-libcouchbase/ext/mt-libcouchbase/ftshandle.rb +7 -0
  648. data/lib/mt-libcouchbase/ext/mt-libcouchbase/histogram.rb +34 -0
  649. data/lib/mt-libcouchbase/ext/mt-libcouchbase/http_request_t.rb +7 -0
  650. data/lib/mt-libcouchbase/ext/mt-libcouchbase/keybuf.rb +20 -0
  651. data/lib/mt-libcouchbase/ext/mt-libcouchbase/multicmd_ctx.rb +30 -0
  652. data/lib/mt-libcouchbase/ext/mt-libcouchbase/mutation_token.rb +17 -0
  653. data/lib/mt-libcouchbase/ext/mt-libcouchbase/n1qlhandle.rb +7 -0
  654. data/lib/mt-libcouchbase/ext/mt-libcouchbase/n1qlparams.rb +7 -0
  655. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respbase.rb +29 -0
  656. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respcounter.rb +32 -0
  657. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respendure.rb +49 -0
  658. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respfts.rb +40 -0
  659. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respget.rb +44 -0
  660. data/lib/mt-libcouchbase/ext/mt-libcouchbase/resphttp.rb +48 -0
  661. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respmcversion.rb +38 -0
  662. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respn1ql.rb +41 -0
  663. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respobseqno.rb +52 -0
  664. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respobserve.rb +41 -0
  665. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respserverbase.rb +32 -0
  666. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respstats.rb +38 -0
  667. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respstore.rb +32 -0
  668. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respstoredur.rb +38 -0
  669. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respsubdoc.rb +35 -0
  670. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respviewquery.rb +67 -0
  671. data/lib/mt-libcouchbase/ext/mt-libcouchbase/sdentry.rb +22 -0
  672. data/lib/mt-libcouchbase/ext/mt-libcouchbase/sdspec.rb +31 -0
  673. data/lib/mt-libcouchbase/ext/mt-libcouchbase/t.rb +7 -0
  674. data/lib/mt-libcouchbase/ext/mt-libcouchbase/valbuf.rb +22 -0
  675. data/lib/mt-libcouchbase/ext/mt-libcouchbase/valbuf_u_buf.rb +14 -0
  676. data/lib/mt-libcouchbase/ext/mt-libcouchbase/viewhandle.rb +7 -0
  677. data/lib/mt-libcouchbase/ext/mt-libcouchbase.rb +1175 -0
  678. data/lib/mt-libcouchbase/ext/mt-libcouchbase_libuv.rb +22 -0
  679. data/lib/mt-libcouchbase/ext/tasks.rb +39 -0
  680. data/lib/mt-libcouchbase/n1ql.rb +80 -0
  681. data/lib/mt-libcouchbase/query_full_text.rb +147 -0
  682. data/lib/mt-libcouchbase/query_n1ql.rb +123 -0
  683. data/lib/mt-libcouchbase/query_view.rb +135 -0
  684. data/lib/mt-libcouchbase/results_fiber.rb +281 -0
  685. data/lib/mt-libcouchbase/results_native.rb +220 -0
  686. data/lib/mt-libcouchbase/subdoc_request.rb +139 -0
  687. data/lib/mt-libcouchbase/version.rb +5 -0
  688. data/lib/mt-libcouchbase.rb +40 -0
  689. data/mt-libcouchbase.gemspec +68 -0
  690. data/spec/bucket_spec.rb +290 -0
  691. data/spec/connection_spec.rb +257 -0
  692. data/spec/design_docs_spec.rb +31 -0
  693. data/spec/error_spec.rb +26 -0
  694. data/spec/fts_spec.rb +135 -0
  695. data/spec/n1ql_spec.rb +260 -0
  696. data/spec/results_libuv_spec.rb +244 -0
  697. data/spec/results_native_spec.rb +259 -0
  698. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/design.json +1 -0
  699. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/data-0000.cbb +0 -0
  700. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/failover.json +1 -0
  701. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/meta.json +1 -0
  702. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/seqno.json +1 -0
  703. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/snapshot_markers.json +1 -0
  704. data/spec/subdoc_spec.rb +192 -0
  705. data/spec/view_spec.rb +201 -0
  706. data/windows_build.md +36 -0
  707. metadata +873 -0
@@ -0,0 +1,917 @@
1
+ /* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2010-2013 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
+ #include "internal.h"
18
+ #include "auth-priv.h"
19
+ #include "connspec.h"
20
+ #include "logging.h"
21
+ #include "hostlist.h"
22
+ #include "rnd.h"
23
+ #include "http/http.h"
24
+ #include "bucketconfig/clconfig.h"
25
+ #include <lcbio/iotable.h>
26
+ #include <lcbio/ssl.h>
27
+ #define LOGARGS(obj,lvl) (obj)->settings, "instance", LCB_LOG_##lvl, __FILE__, __LINE__
28
+
29
+ using namespace lcb;
30
+
31
+ LIBCOUCHBASE_API
32
+ const char *lcb_get_version(lcb_uint32_t *version)
33
+ {
34
+ if (version != NULL) {
35
+ *version = (lcb_uint32_t)LCB_VERSION;
36
+ }
37
+
38
+ return LCB_VERSION_STRING;
39
+ }
40
+
41
+ const lcb_U32 lcb_version_g = LCB_VERSION;
42
+
43
+ LIBCOUCHBASE_API
44
+ void lcb_set_cookie(lcb_t instance, const void *cookie)
45
+ {
46
+ instance->cookie = cookie;
47
+ }
48
+
49
+ LIBCOUCHBASE_API
50
+ const void *lcb_get_cookie(lcb_t instance)
51
+ {
52
+ return instance->cookie;
53
+ }
54
+
55
+ LIBCOUCHBASE_API
56
+ void
57
+ lcb_set_auth(lcb_t instance, lcb_AUTHENTICATOR *auth)
58
+ {
59
+ if (LCBT_SETTING(instance, keypath)) {
60
+ lcb_log(LOGARGS(instance, WARN),
61
+ "Custom authenticator ignored when SSL client certificate authentication in use");
62
+ return;
63
+ }
64
+ /* First increase refcount in case they are the same object(!) */
65
+ lcbauth_ref(auth);
66
+ lcbauth_unref(instance->settings->auth);
67
+ instance->settings->auth = auth;
68
+ }
69
+
70
+ void
71
+ lcb_st::add_bs_host(const char *host, int port, unsigned bstype)
72
+ {
73
+ const char *tname = NULL;
74
+ lcb::Hostlist* target;
75
+ if (bstype == LCB_CONFIG_TRANSPORT_CCCP) {
76
+ tname = "CCCP";
77
+ target = mc_nodes;
78
+ } else {
79
+ tname = "HTTP";
80
+ target = ht_nodes;
81
+ }
82
+ bool ipv6 = strchr(host, ':') != NULL;
83
+ lcb_log(LOGARGS(this, DEBUG), "Adding host " LCB_LOG_SPEC("%s%s%s:%d") " to initial %s bootstrap list",
84
+ this->settings->log_redaction ? LCB_LOG_SD_OTAG : "",
85
+ ipv6 ? "[" : "", host, ipv6 ? "]" : "", port,
86
+ this->settings->log_redaction ? LCB_LOG_SD_CTAG : "", tname);
87
+ target->add(host, port);
88
+ }
89
+
90
+ void
91
+ lcb_st::add_bs_host(const lcb::Spechost& host, int defl_http, int defl_cccp)
92
+ {
93
+ if (host.isTypeless()) {
94
+ add_bs_host(host.hostname.c_str(), defl_http, LCB_CONFIG_TRANSPORT_HTTP);
95
+ add_bs_host(host.hostname.c_str(), defl_cccp, LCB_CONFIG_TRANSPORT_CCCP);
96
+ return;
97
+ } else {
98
+ add_bs_host(host.hostname.c_str(), host.port,
99
+ host.isAnyHttp()
100
+ ? LCB_CONFIG_TRANSPORT_HTTP : LCB_CONFIG_TRANSPORT_CCCP);
101
+ }
102
+ }
103
+
104
+ void
105
+ lcb_st::populate_nodes(const Connspec& spec)
106
+ {
107
+ int has_ssl = settings->sslopts & LCB_SSL_ENABLED;
108
+ int defl_http, defl_cccp;
109
+
110
+ if (spec.default_port() == LCB_CONFIG_MCCOMPAT_PORT) {
111
+ defl_http = -1;
112
+ defl_cccp = LCB_CONFIG_MCCOMPAT_PORT;
113
+
114
+ } else if (has_ssl) {
115
+ defl_http = LCB_CONFIG_HTTP_SSL_PORT;
116
+ defl_cccp = LCB_CONFIG_MCD_SSL_PORT;
117
+ } else {
118
+ defl_http = LCB_CONFIG_HTTP_PORT;
119
+ defl_cccp = LCB_CONFIG_MCD_PORT;
120
+ }
121
+
122
+ for (size_t ii = 0; ii < spec.hosts().size(); ++ii) {
123
+ const Spechost &dh = spec.hosts()[ii];
124
+ add_bs_host(dh, defl_http, defl_cccp);
125
+ }
126
+ lcb_log(LOGARGS(this, TRACE), "Bootstrap hosts loaded (cccp:%d, http:%d)", (int)mc_nodes->size(),
127
+ (int)ht_nodes->size());
128
+ }
129
+
130
+ lcb_error_t
131
+ lcb_st::process_dns_srv(Connspec& spec)
132
+ {
133
+ if (!spec.can_dnssrv()) {
134
+ return LCB_SUCCESS;
135
+ }
136
+ if (spec.hosts().empty()) {
137
+ lcb_log(LOGARGS(this, ERR), "Cannot use DNS SRV without a hostname");
138
+ return spec.is_explicit_dnssrv() ? LCB_EINVAL : LCB_SUCCESS;
139
+ }
140
+
141
+ const Spechost& host = spec.hosts().front();
142
+ lcb_error_t rc = LCB_ERROR;
143
+ Hostlist* hl = dnssrv_getbslist(host.hostname.c_str(), spec.sslopts() & LCB_SSL_ENABLED, rc);
144
+
145
+ if (hl == NULL) {
146
+ lcb_log(LOGARGS(this, INFO), "DNS SRV lookup failed: %s. Ignore this if not relying on DNS SRV records", lcb_strerror(this, rc));
147
+ if (spec.is_explicit_dnssrv()) {
148
+ return rc;
149
+ } else {
150
+ return LCB_SUCCESS;
151
+ }
152
+ }
153
+
154
+ spec.clear_hosts();
155
+ for (size_t ii = 0; ii < hl->size(); ++ii) {
156
+ const lcb_host_t& src = (*hl)[ii];
157
+ Spechost sh;
158
+ sh.hostname = src.host;
159
+ sh.port = std::atoi(src.port);
160
+ sh.type = spec.default_port();
161
+ spec.add_host(sh);
162
+ bool ipv6 = sh.hostname.find(':') != std::string::npos;
163
+ lcb_log(LOGARGS(this, INFO), "Found host %s%s%s:%d via DNS SRV", ipv6 ? "[" : "", sh.hostname.c_str(),
164
+ ipv6 ? "]" : "", (int)sh.port);
165
+ }
166
+ delete hl;
167
+
168
+ return LCB_SUCCESS;
169
+ }
170
+
171
+ static lcb_error_t
172
+ init_providers(lcb_t obj, const Connspec &spec)
173
+ {
174
+ using namespace lcb::clconfig;
175
+ Provider *http, *cccp, *mcraw;
176
+ http = obj->confmon->get_provider(CLCONFIG_HTTP);
177
+ cccp = obj->confmon->get_provider(CLCONFIG_CCCP);
178
+ mcraw = obj->confmon->get_provider(CLCONFIG_MCRAW);
179
+
180
+ if (spec.default_port() == LCB_CONFIG_MCCOMPAT_PORT) {
181
+ obj->confmon->set_active(CLCONFIG_MCRAW, true);
182
+ mcraw->configure_nodes(*obj->mc_nodes);
183
+ return LCB_SUCCESS;
184
+ }
185
+
186
+ bool cccp_found = spec.is_bs_cccp();
187
+ bool http_found = spec.is_bs_http();
188
+ bool cccp_enabled = true, http_enabled = true;
189
+
190
+ if (cccp_found || http_found || spec.is_bs_file()) {
191
+ http_enabled = http_found;
192
+ cccp_enabled = cccp_found;
193
+
194
+ }
195
+
196
+ if (lcb_getenv_boolean("LCB_NO_CCCP")) {
197
+ cccp_enabled = false;
198
+ }
199
+ if (lcb_getenv_boolean("LCB_NO_HTTP")) {
200
+ http_enabled = false;
201
+ }
202
+ if (spec.is_bs_file()) {
203
+ cccp_found = false;
204
+ http_found = false;
205
+ }
206
+
207
+ if (cccp_enabled == 0 && http_enabled == 0) {
208
+ if (spec.is_bs_file()) {
209
+ /* If the 'file_only' provider is set, just assume something else
210
+ * will provide us with the config, and forget about it. */
211
+ Provider *prov = obj->confmon->get_provider(CLCONFIG_FILE);
212
+ if (prov && prov->enabled) {
213
+ return LCB_SUCCESS;
214
+ }
215
+ }
216
+ if (obj->type == LCB_TYPE_CLUSTER) {
217
+ /* Cluster-level connection always falls back to static config */
218
+ Provider *cladmin;
219
+ cladmin = obj->confmon->get_provider(CLCONFIG_CLADMIN);
220
+ cladmin->enable();
221
+ cladmin->configure_nodes(*obj->ht_nodes);
222
+ } else {
223
+ return LCB_BAD_ENVIRONMENT;
224
+ }
225
+ }
226
+
227
+ if (http_enabled) {
228
+ http->enable();
229
+ http->configure_nodes(*obj->ht_nodes);
230
+ } else {
231
+ obj->confmon->set_active(CLCONFIG_HTTP, false);
232
+ }
233
+
234
+ if (cccp_enabled && obj->type != LCB_TYPE_CLUSTER) {
235
+ cccp->enable(obj);
236
+ cccp->configure_nodes(*obj->mc_nodes);
237
+ } else {
238
+ obj->confmon->set_active(CLCONFIG_CCCP, false);
239
+ }
240
+ return LCB_SUCCESS;
241
+ }
242
+
243
+ static lcb_error_t
244
+ setup_ssl(lcb_t obj, const Connspec& params)
245
+ {
246
+ char optbuf[4096];
247
+ int env_policy = -1;
248
+ lcb_settings *settings = obj->settings;
249
+ lcb_error_t err = LCB_SUCCESS;
250
+
251
+ if (lcb_getenv_nonempty("LCB_SSL_CACERT", optbuf, sizeof optbuf)) {
252
+ lcb_log(LOGARGS(obj, INFO), "SSL CA certificate %s specified on environment", optbuf);
253
+ settings->certpath = strdup(optbuf);
254
+ }
255
+
256
+ if (lcb_getenv_nonempty("LCB_SSL_KEY", optbuf, sizeof optbuf)) {
257
+ lcb_log(LOGARGS(obj, INFO), "SSL key %s specified on environment", optbuf);
258
+ settings->keypath = strdup(optbuf);
259
+ }
260
+
261
+ if (lcb_getenv_nonempty("LCB_SSL_MODE", optbuf, sizeof optbuf)) {
262
+ if (sscanf(optbuf, "%d", &env_policy) != 1) {
263
+ lcb_log(LOGARGS(obj, ERR), "Invalid value for environment LCB_SSL. (%s)", optbuf);
264
+ return LCB_BAD_ENVIRONMENT;
265
+ } else {
266
+ lcb_log(LOGARGS(obj, INFO), "SSL modified from environment. Policy is 0x%x", env_policy);
267
+ settings->sslopts = env_policy;
268
+ }
269
+ }
270
+
271
+ if (settings->truststorepath == NULL && !params.truststorepath().empty()) {
272
+ settings->truststorepath = strdup(params.truststorepath().c_str());
273
+ }
274
+
275
+ if (settings->certpath == NULL && !params.certpath().empty()) {
276
+ settings->certpath = strdup(params.certpath().c_str());
277
+ }
278
+
279
+ if (settings->keypath == NULL && !params.keypath().empty()) {
280
+ settings->keypath = strdup(params.keypath().c_str());
281
+ }
282
+
283
+ if (env_policy == -1) {
284
+ settings->sslopts = params.sslopts();
285
+ }
286
+
287
+ if (settings->sslopts & LCB_SSL_ENABLED) {
288
+ if (! (settings->sslopts & LCB_SSL_NOGLOBALINIT)) {
289
+ lcbio_ssl_global_init();
290
+ } else {
291
+ lcb_log(LOGARGS(obj, INFO), "ssl=no_global_init. Not initializing openssl globals");
292
+ }
293
+ if (settings->keypath && !settings->certpath) {
294
+ lcb_log(LOGARGS(obj, ERR), "SSL key have to be specified with certificate");
295
+ return LCB_EINVAL;
296
+ }
297
+ settings->ssl_ctx =
298
+ lcbio_ssl_new(settings->truststorepath, settings->certpath, settings->keypath,
299
+ settings->sslopts & LCB_SSL_NOVERIFY, &err, settings);
300
+ if (!settings->ssl_ctx) {
301
+ return err;
302
+ }
303
+ } else {
304
+ // keypath might be used to flag, that library is using SSL authentication
305
+ // To avoid skipping other authentication mechanisms, cleanup the keypath.
306
+ free(settings->keypath);
307
+ settings->keypath = NULL;
308
+ }
309
+ return LCB_SUCCESS;
310
+ }
311
+
312
+ static lcb_error_t
313
+ apply_spec_options(lcb_t obj, const Connspec& params)
314
+ {
315
+ lcb_error_t err;
316
+ Connspec::Options::const_iterator ii = params.options().begin();
317
+ for (; ii != params.options().end(); ++ii) {
318
+ lcb_log(LOGARGS(obj, DEBUG), "Applying initial cntl %s=%s",
319
+ ii->first.c_str(), ii->second.c_str());
320
+
321
+ err = lcb_cntl_string(obj, ii->first.c_str(), ii->second.c_str());
322
+ if (err != LCB_SUCCESS) {
323
+ return err;
324
+ }
325
+ }
326
+ return LCB_SUCCESS;
327
+ }
328
+
329
+ static lcb_error_t
330
+ apply_env_options(lcb_t obj)
331
+ {
332
+ Connspec tmpspec;
333
+ const char *options = getenv("LCB_OPTIONS");
334
+
335
+ if (!options) {
336
+ return LCB_SUCCESS;
337
+ }
338
+
339
+ std::string tmp("couchbase://?");
340
+ tmp.append(options);
341
+ if (tmpspec.parse(tmp.c_str()) != LCB_SUCCESS) {
342
+ return LCB_BAD_ENVIRONMENT;
343
+ }
344
+ return apply_spec_options(obj, tmpspec);
345
+ }
346
+
347
+ lcb_error_t
348
+ lcb_init_providers2(lcb_t obj, const struct lcb_create_st2 *options)
349
+ {
350
+ Connspec params;
351
+ lcb_error_t err;
352
+ struct lcb_create_st cropts;
353
+ cropts.version = 2;
354
+ cropts.v.v2 = *options;
355
+ err = params.load(cropts);
356
+ if (err == LCB_SUCCESS) {
357
+ err = init_providers(obj, params);
358
+ }
359
+ return err;
360
+ }
361
+
362
+ lcb_error_t
363
+ lcb_reinit3(lcb_t obj, const char *connstr)
364
+ {
365
+ Connspec params;
366
+ lcb_error_t err;
367
+ const char *errmsg = NULL;
368
+ err = params.parse(connstr, &errmsg);
369
+
370
+ if (err != LCB_SUCCESS) {
371
+ lcb_log(LOGARGS(obj, ERROR), "Couldn't reinit: %s", errmsg);
372
+ }
373
+
374
+ if (params.sslopts() != LCBT_SETTING(obj, sslopts) ||
375
+ !params.certpath().empty()) {
376
+ lcb_log(LOGARGS(obj, WARN), "Ignoring SSL reinit options");
377
+ }
378
+
379
+ /* apply the options */
380
+ err = apply_spec_options(obj, params);
381
+ if (err != LCB_SUCCESS) {
382
+ goto GT_DONE;
383
+ }
384
+ obj->populate_nodes(params);
385
+ err = init_providers(obj, params);
386
+ if (err != LCB_SUCCESS) {
387
+ goto GT_DONE;
388
+ }
389
+
390
+ GT_DONE:
391
+ return err;
392
+ }
393
+
394
+ LIBCOUCHBASE_API
395
+ lcb_error_t lcb_create(lcb_t *instance,
396
+ const struct lcb_create_st *options)
397
+ {
398
+ Connspec spec;
399
+ struct lcb_io_opt_st *io_priv = NULL;
400
+ lcb_type_t type = LCB_TYPE_BUCKET;
401
+ lcb_t obj = NULL;
402
+ lcb_error_t err;
403
+ lcb_settings *settings;
404
+
405
+ #if !defined(COMPILER_SUPPORTS_CXX11) || (defined(_MSC_VER) && _MSC_VER < 1600)
406
+ lcb_rnd_global_init();
407
+ #endif
408
+
409
+ if (options) {
410
+ io_priv = options->v.v0.io;
411
+ if (options->version > 0) {
412
+ type = options->v.v1.type;
413
+ }
414
+ err = spec.load(*options);
415
+ } else {
416
+ const char *errmsg;
417
+ err = spec.parse("couchbase://", &errmsg);
418
+ }
419
+ if (err != LCB_SUCCESS) {
420
+ goto GT_DONE;
421
+ }
422
+
423
+ if ((obj = (lcb_t)calloc(1, sizeof(*obj))) == NULL) {
424
+ err = LCB_CLIENT_ENOMEM;
425
+ goto GT_DONE;
426
+ }
427
+ obj->crypto = new std::map<std::string, lcbcrypto_PROVIDER*>();
428
+ if (!(settings = lcb_settings_new())) {
429
+ err = LCB_CLIENT_ENOMEM;
430
+ goto GT_DONE;
431
+ }
432
+
433
+ /* initialize the settings */
434
+ obj->type = type;
435
+ obj->settings = settings;
436
+ obj->settings->conntype = type;
437
+ obj->settings->ipv6 = spec.ipv6_policy();
438
+
439
+ settings->bucket = strdup(spec.bucket().c_str());
440
+
441
+ if (!spec.username().empty()) {
442
+ settings->auth->set_mode(LCBAUTH_MODE_RBAC);
443
+ err = settings->auth->add(spec.username(), spec.password(),
444
+ LCBAUTH_F_CLUSTER);
445
+ } else {
446
+ settings->auth->set_mode(LCBAUTH_MODE_CLASSIC);
447
+ err = settings->auth->add(spec.bucket(), spec.password(),
448
+ LCBAUTH_F_BUCKET);
449
+ }
450
+ if (err != LCB_SUCCESS) {
451
+ goto GT_DONE;
452
+ }
453
+
454
+ settings->logger = spec.logger();
455
+ if (settings->logger == NULL) {
456
+ settings->logger = lcb_init_console_logger();
457
+ }
458
+ settings->iid = lcb_next_rand32();
459
+ if (spec.loglevel()) {
460
+ lcb_U32 val = spec.loglevel();
461
+ lcb_cntl(obj, LCB_CNTL_SET, LCB_CNTL_CONLOGGER_LEVEL, &val);
462
+ }
463
+ settings->log_redaction = spec.logredact();
464
+ if (settings->log_redaction) {
465
+ lcb_log(LOGARGS(obj, INFO), "Logging redaction enabled. Logs have reduced identifying information. Diagnosis "
466
+ "and support of issues may be challenging or not possible in this configuration");
467
+ }
468
+
469
+ lcb_log(LOGARGS(obj, INFO), "Version=%s, Changeset=%s", lcb_get_version(NULL), LCB_VERSION_CHANGESET);
470
+ lcb_log(LOGARGS(obj, INFO), "Effective connection string: " LCB_LOG_SPEC("%s") ". Bucket=" LCB_LOG_SPEC("%s"),
471
+ settings->log_redaction ? LCB_LOG_SD_OTAG : "", spec.connstr().c_str(), settings->log_redaction ? LCB_LOG_SD_CTAG : "",
472
+ settings->log_redaction ? LCB_LOG_MD_OTAG : "", settings->bucket, settings->log_redaction ? LCB_LOG_MD_CTAG : "");
473
+
474
+ if (io_priv == NULL) {
475
+ lcb_io_opt_t ops;
476
+ if ((err = lcb_create_io_ops(&ops, NULL)) != LCB_SUCCESS) {
477
+ goto GT_DONE;
478
+ }
479
+ io_priv = ops;
480
+ LCB_IOPS_BASEFLD(io_priv, need_cleanup) = 1;
481
+ }
482
+
483
+ obj->cmdq.cqdata = obj;
484
+ obj->iotable = lcbio_table_new(io_priv);
485
+ obj->memd_sockpool = new io::Pool(settings, obj->iotable);
486
+ obj->http_sockpool = new io::Pool(settings, obj->iotable);
487
+
488
+ {
489
+ // Needs its own scope because there are prior GOTOs
490
+ io::Pool::Options pool_opts;
491
+ pool_opts.maxidle = 1;
492
+ pool_opts.tmoidle = LCB_MS2US(10000); // 10 seconds
493
+ obj->memd_sockpool->set_options(pool_opts);
494
+ obj->http_sockpool->set_options(pool_opts);
495
+ }
496
+
497
+ obj->confmon = new clconfig::Confmon(settings, obj->iotable, obj);
498
+ obj->ht_nodes = new Hostlist();
499
+ obj->mc_nodes = new Hostlist();
500
+ obj->retryq = new RetryQueue(&obj->cmdq, obj->iotable, obj->settings);
501
+ obj->n1ql_cache = lcb_n1qlcache_create();
502
+ lcb_initialize_packet_handlers(obj);
503
+ lcb_aspend_init(&obj->pendops);
504
+
505
+ if ((err = setup_ssl(obj, spec)) != LCB_SUCCESS) {
506
+ goto GT_DONE;
507
+ }
508
+
509
+ if ((err = apply_spec_options(obj, spec)) != LCB_SUCCESS) {
510
+ goto GT_DONE;
511
+ }
512
+ if ((err = apply_env_options(obj)) != LCB_SUCCESS) {
513
+ goto GT_DONE;
514
+ }
515
+
516
+ if ((err = obj->process_dns_srv(spec)) != LCB_SUCCESS) {
517
+ goto GT_DONE;
518
+ }
519
+
520
+ obj->populate_nodes(spec);
521
+ if ((err = init_providers(obj, spec)) != LCB_SUCCESS) {
522
+ goto GT_DONE;
523
+ }
524
+ #ifdef LCB_TRACING
525
+ if (settings->use_tracing) {
526
+ settings->tracer = lcbtrace_new(obj, LCBTRACE_F_THRESHOLD);
527
+ }
528
+ #endif
529
+
530
+ obj->last_error = err;
531
+ GT_DONE:
532
+ if (err != LCB_SUCCESS && obj) {
533
+ lcb_destroy(obj);
534
+ *instance = NULL;
535
+ } else {
536
+ *instance = obj;
537
+ }
538
+ return err;
539
+ }
540
+
541
+ LIBCOUCHBASE_API
542
+ int lcb_is_redacting_logs(lcb_t instance)
543
+ {
544
+ return instance && instance->settings && instance->settings->log_redaction;
545
+ }
546
+
547
+ typedef struct {
548
+ lcbio_pTABLE table;
549
+ lcbio_pTIMER timer;
550
+ int stopped;
551
+ } SYNCDTOR;
552
+
553
+ static void
554
+ sync_dtor_cb(void *arg)
555
+ {
556
+ SYNCDTOR *sd = (SYNCDTOR*)arg;
557
+ if (sd->table->refcount == 2) {
558
+ lcbio_timer_destroy(sd->timer);
559
+ IOT_STOP(sd->table);
560
+ sd->stopped = 1;
561
+ }
562
+ }
563
+
564
+ extern "C" {
565
+ void lcbdur_destroy(void*);
566
+ }
567
+
568
+ static void do_pool_shutdown(io::Pool *pool) { pool->shutdown(); }
569
+
570
+ LIBCOUCHBASE_API
571
+ void lcb_destroy(lcb_t instance)
572
+ {
573
+ #define DESTROY(fn,fld) if(instance->fld){fn(instance->fld);instance->fld=NULL;}
574
+
575
+ lcb_ASPEND *po = &instance->pendops;
576
+ lcb_ASPEND_SETTYPE::iterator it;
577
+ lcb_ASPEND_SETTYPE *pendq;
578
+
579
+ if (instance->cur_configinfo) {
580
+ instance->cur_configinfo->decref();
581
+ instance->cur_configinfo = NULL;
582
+ }
583
+ instance->cmdq.config = NULL;
584
+ DESTROY(delete, bs_state);
585
+ DESTROY(delete, ht_nodes);
586
+ DESTROY(delete, mc_nodes);
587
+
588
+ if ((pendq = po->items[LCB_PENDTYPE_TIMER])) {
589
+ for (it = pendq->begin(); it != pendq->end(); ++it) {
590
+ lcb__timer_destroy_nowarn(instance, (lcb_timer_t)*it);
591
+ }
592
+ }
593
+
594
+ if ((pendq = po->items[LCB_PENDTYPE_DURABILITY])) {
595
+ std::vector<void*> dsets(pendq->begin(), pendq->end());
596
+ for (size_t ii = 0; ii < dsets.size(); ++ii) {
597
+ lcbdur_destroy(dsets[ii]);
598
+ }
599
+ pendq->clear();
600
+ }
601
+
602
+ for (size_t ii = 0; ii < LCBT_NSERVERS(instance); ++ii) {
603
+ instance->get_server(ii)->close();
604
+ }
605
+
606
+ if ((pendq = po->items[LCB_PENDTYPE_HTTP])) {
607
+ for (it = pendq->begin(); it != pendq->end(); ++it) {
608
+ http::Request *htreq = reinterpret_cast<http::Request*>(*it);
609
+ htreq->block_callback();
610
+ htreq->finish(LCB_ERROR);
611
+ }
612
+ }
613
+
614
+ DESTROY(delete, retryq);
615
+ DESTROY(delete, confmon);
616
+ DESTROY(do_pool_shutdown, memd_sockpool);
617
+ DESTROY(do_pool_shutdown, http_sockpool);
618
+ DESTROY(lcb_vbguess_destroy, vbguess);
619
+ DESTROY(lcb_n1qlcache_destroy, n1ql_cache);
620
+
621
+ if (instance->cmdq.pipelines) {
622
+ unsigned ii;
623
+ for (ii = 0; ii < instance->cmdq.npipelines; ii++) {
624
+ lcb::Server *server = static_cast<lcb::Server*>(instance->cmdq.pipelines[ii]);
625
+ if (server) {
626
+ server->instance = NULL;
627
+ }
628
+ }
629
+ }
630
+ mcreq_queue_cleanup(&instance->cmdq);
631
+ lcb_aspend_cleanup(po);
632
+
633
+ #ifdef LCB_TRACING
634
+ if (instance->settings && instance->settings->tracer) {
635
+ lcbtrace_destroy(instance->settings->tracer);
636
+ instance->settings->tracer = NULL;
637
+ }
638
+ #endif
639
+
640
+ if (instance->iotable && instance->iotable->refcount > 1 &&
641
+ instance->settings && instance->settings->syncdtor) {
642
+ /* create an async object */
643
+ SYNCDTOR sd;
644
+ sd.table = instance->iotable;
645
+ sd.timer = lcbio_timer_new(instance->iotable, &sd, sync_dtor_cb);
646
+ sd.stopped = 0;
647
+ lcbio_async_signal(sd.timer);
648
+ lcb_log(LOGARGS(instance, WARN), "Running event loop to drain any pending I/O events");
649
+ do {
650
+ IOT_START(instance->iotable);
651
+ } while (!sd.stopped);
652
+ }
653
+
654
+ DESTROY(lcbio_table_unref, iotable);
655
+ DESTROY(lcb_settings_unref, settings);
656
+ DESTROY(lcb_histogram_destroy, kv_timings);
657
+ if (instance->scratch) {
658
+ delete instance->scratch;
659
+ instance->scratch = NULL;
660
+ }
661
+
662
+ for (std::map< std::string, lcbcrypto_PROVIDER * >::iterator ii = instance->crypto->begin();
663
+ ii != instance->crypto->end(); ++ii) {
664
+ lcbcrypto_unref(ii->second);
665
+ }
666
+ delete instance->crypto;
667
+ instance->crypto = NULL;
668
+
669
+ delete[] instance->dcpinfo;
670
+ memset(instance, 0xff, sizeof(*instance));
671
+ free(instance);
672
+ #undef DESTROY
673
+ }
674
+
675
+ static void
676
+ destroy_cb(void *arg)
677
+ {
678
+ lcb_t instance = (lcb_t)arg;
679
+ lcbio_timer_destroy(instance->dtor_timer);
680
+ lcb_destroy(instance);
681
+ }
682
+
683
+ LIBCOUCHBASE_API
684
+ void
685
+ lcb_destroy_async(lcb_t instance, const void *arg)
686
+ {
687
+ instance->dtor_timer = lcbio_timer_new(instance->iotable, instance, destroy_cb);
688
+ instance->settings->dtorarg = (void *)arg;
689
+ lcbio_async_signal(instance->dtor_timer);
690
+ }
691
+
692
+ lcb::Server *
693
+ lcb_st::find_server(const lcb_host_t& host) const
694
+ {
695
+ unsigned ii;
696
+ for (ii = 0; ii < cmdq.npipelines; ii++) {
697
+ lcb::Server *server = static_cast<lcb::Server*>(cmdq.pipelines[ii]);
698
+ if (server && lcb_host_equals(&server->get_host(), &host)) {
699
+ return server;
700
+ }
701
+ }
702
+ return NULL;
703
+ }
704
+
705
+ LIBCOUCHBASE_API
706
+ lcb_error_t lcb_connect(lcb_t instance)
707
+ {
708
+ lcb_error_t err = instance->bootstrap(BS_REFRESH_INITIAL);
709
+ if (err == LCB_SUCCESS) {
710
+ SYNCMODE_INTERCEPT(instance);
711
+ } else {
712
+ return err;
713
+ }
714
+ }
715
+
716
+ LIBCOUCHBASE_API
717
+ void *lcb_mem_alloc(lcb_size_t size)
718
+ {
719
+ return malloc(size);
720
+ }
721
+
722
+ LIBCOUCHBASE_API
723
+ void lcb_mem_free(void *ptr)
724
+ {
725
+ free(ptr);
726
+ }
727
+
728
+ LCB_INTERNAL_API
729
+ void lcb_run_loop(lcb_t instance)
730
+ {
731
+ IOT_START(instance->iotable);
732
+ }
733
+
734
+ LCB_INTERNAL_API
735
+ void lcb_stop_loop(lcb_t instance)
736
+ {
737
+ IOT_STOP(instance->iotable);
738
+ }
739
+
740
+ void
741
+ lcb_aspend_init(lcb_ASPEND *ops)
742
+ {
743
+ unsigned ii;
744
+ for (ii = 0; ii < LCB_PENDTYPE_MAX; ++ii) {
745
+ ops->items[ii] = new lcb_ASPEND_SETTYPE();
746
+ }
747
+ ops->count = 0;
748
+ }
749
+
750
+ void
751
+ lcb_aspend_add(lcb_ASPEND *ops, lcb_ASPENDTYPE type, const void *item)
752
+ {
753
+ ops->count++;
754
+ if (type == LCB_PENDTYPE_COUNTER) {
755
+ return;
756
+ }
757
+ ops->items[type]->insert(const_cast<void*>(item));
758
+ }
759
+
760
+ void
761
+ lcb_aspend_del(lcb_ASPEND *ops, lcb_ASPENDTYPE type, const void *item)
762
+ {
763
+ if (type == LCB_PENDTYPE_COUNTER) {
764
+ ops->count--;
765
+ return;
766
+ }
767
+ if (ops->items[type]->erase(const_cast<void*>(item)) != 0) {
768
+ ops->count--;
769
+ }
770
+ }
771
+
772
+ void
773
+ lcb_aspend_cleanup(lcb_ASPEND *ops)
774
+ {
775
+ unsigned ii;
776
+ for (ii = 0; ii < LCB_PENDTYPE_MAX; ii++) {
777
+ delete ops->items[ii];
778
+ }
779
+ }
780
+
781
+ LIBCOUCHBASE_API
782
+ void
783
+ lcb_sched_enter(lcb_t instance)
784
+ {
785
+ mcreq_sched_enter(&instance->cmdq);
786
+ }
787
+ LIBCOUCHBASE_API
788
+ void
789
+ lcb_sched_leave(lcb_t instance)
790
+ {
791
+ mcreq_sched_leave(&instance->cmdq, LCBT_SETTING(instance, sched_implicit_flush));
792
+ }
793
+ LIBCOUCHBASE_API
794
+ void
795
+ lcb_sched_fail(lcb_t instance)
796
+ {
797
+ mcreq_sched_fail(&instance->cmdq);
798
+ }
799
+
800
+ LIBCOUCHBASE_API
801
+ int
802
+ lcb_supports_feature(int n)
803
+ {
804
+ if (n == LCB_SUPPORTS_TRACING) {
805
+ #ifdef LCB_TRACING
806
+ return 1;
807
+ #else
808
+ return 0;
809
+ #endif
810
+ }
811
+ if (n == LCB_SUPPORTS_SNAPPY) {
812
+ return 1;
813
+ }
814
+ if (n == LCB_SUPPORTS_SSL) {
815
+ return lcbio_ssl_supported();
816
+ } else {
817
+ return 0;
818
+ }
819
+ }
820
+
821
+
822
+ LCB_INTERNAL_API void lcb_loop_ref(lcb_t instance) {
823
+ lcb_aspend_add(&instance->pendops, LCB_PENDTYPE_COUNTER, NULL);
824
+ }
825
+ LCB_INTERNAL_API void lcb_loop_unref(lcb_t instance) {
826
+ lcb_aspend_del(&instance->pendops, LCB_PENDTYPE_COUNTER, NULL);
827
+ lcb_maybe_breakout(instance);
828
+ }
829
+
830
+ LIBCOUCHBASE_API
831
+ lcb_error_t lcb_enable_timings(lcb_t instance)
832
+ {
833
+ if (instance->kv_timings != NULL) {
834
+ return LCB_KEY_EEXISTS;
835
+ }
836
+ instance->kv_timings = lcb_histogram_create();
837
+ return instance->kv_timings == NULL ? LCB_CLIENT_ENOMEM : LCB_SUCCESS;
838
+ }
839
+
840
+ LIBCOUCHBASE_API
841
+ lcb_error_t lcb_disable_timings(lcb_t instance)
842
+ {
843
+ if (instance->kv_timings == NULL) {
844
+ return LCB_KEY_ENOENT;
845
+ }
846
+ lcb_histogram_destroy(instance->kv_timings);
847
+ instance->kv_timings = NULL;
848
+ return LCB_SUCCESS;
849
+ }
850
+
851
+ typedef struct {
852
+ lcb_t instance;
853
+ const void *real_cookie;
854
+ lcb_timings_callback real_cb;
855
+ } timings_wrapper;
856
+
857
+ static void
858
+ timings_wrapper_callback(const void *cookie, lcb_timeunit_t unit, lcb_U32 start,
859
+ lcb_U32 end, lcb_U32 val, lcb_U32 max)
860
+ {
861
+ const timings_wrapper *wrap = (const timings_wrapper*)cookie;
862
+ wrap->real_cb(wrap->instance, wrap->real_cookie, unit, start, end, val, max);
863
+ }
864
+
865
+ LIBCOUCHBASE_API
866
+ lcb_error_t
867
+ lcb_get_timings(lcb_t instance, const void *cookie, lcb_timings_callback cb)
868
+ {
869
+ timings_wrapper wrap;
870
+ wrap.instance = instance;
871
+ wrap.real_cookie = cookie;
872
+ wrap.real_cb = cb;
873
+
874
+ if (!instance->kv_timings) {
875
+ return LCB_KEY_ENOENT;
876
+ }
877
+ lcb_histogram_read(instance->kv_timings, &wrap, timings_wrapper_callback);
878
+ return LCB_SUCCESS;
879
+ }
880
+
881
+ LIBCOUCHBASE_API
882
+ const char *lcb_strerror(lcb_t instance, lcb_error_t error)
883
+ {
884
+ #define X(c, v, t, s) if (error == c) { return s; }
885
+ LCB_XERR(X)
886
+ #undef X
887
+
888
+ (void)instance;
889
+ return "Unknown error";
890
+ }
891
+
892
+ LCB_INTERNAL_API
893
+ const char *lcb_strerror_short(lcb_error_t error)
894
+ {
895
+ #define X(c, v, t, s) if (error == c) { return #c " (" #v ")"; }
896
+ LCB_XERR(X)
897
+ #undef X
898
+ return "<FIXME: Not an LCB error>";
899
+ }
900
+
901
+ LCB_INTERNAL_API
902
+ const char *lcb_strerror_long(lcb_error_t error)
903
+ {
904
+ #define X(c, v, t, s) if (error == c) { return #c " (" #v "): " s; }
905
+ LCB_XERR(X)
906
+ #undef X
907
+ return "<FIXME: Not an LCB error>";
908
+ }
909
+
910
+ LIBCOUCHBASE_API
911
+ int lcb_get_errtype(lcb_error_t err)
912
+ {
913
+ #define X(c, v, t, s) if (err == c) { return t; }
914
+ LCB_XERR(X)
915
+ #undef X
916
+ return -1;
917
+ }