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,3523 @@
1
+ # Release Notes
2
+
3
+ ## 2.9.5 (September 21 2018)
4
+
5
+ * [CCBC-980](https://issues.couchbase.com/browse/CCBC-980): Make idle timeout
6
+ for HTTP pool tunable
7
+
8
+ * [CCBC-977](https://issues.couchbase.com/browse/CCBC-977): Update
9
+ documentation analytics. Add example demonstrating analytics queries
10
+
11
+ * [CCBC-968](https://issues.couchbase.com/browse/CCBC-968): Improve log message
12
+ for `SELECT_BUCKET` on `EACCESS`. Add note saying that this error code might
13
+ be because of missing bucket.
14
+
15
+ * [CCBC-976](https://issues.couchbase.com/browse/CCBC-976): Keep HTTP
16
+ connections pooled after `lcb_ping3`
17
+
18
+ * [CCBC-975](https://issues.couchbase.com/browse/CCBC-975): Make sure kv
19
+ service is only enabled if in nodes list.
20
+
21
+ * [CCBC-972](https://issues.couchbase.com/browse/CCBC-972): Fix memory issues
22
+ reported by valgrind
23
+
24
+ * [CCBC-973](https://issues.couchbase.com/browse/CCBC-974): Correctly convert
25
+ non-null terminated tag buffers to `Json::Value`
26
+
27
+ ## 2.9.4 (August 29 2018)
28
+
29
+ * [CCBC-970](https://issues.couchbase.com/browse/CCBC-970): Update list of retriable errors for
30
+ analytics
31
+
32
+ * [CCBC-965](https://issues.couchbase.com/browse/CCBC-965): Update log level in config cache
33
+ provider
34
+
35
+ * [CCBC-967](https://issues.couchbase.com/browse/CCBC-967): optimize Threshold Tracer queues/sorting
36
+
37
+ * [CCBC-963](https://issues.couchbase.com/browse/CCBC-963): remove global state from random
38
+ generator, and make it thread-safe.
39
+
40
+ * [CCBC-966](https://issues.couchbase.com/browse/CCBC-966): return current network for
41
+ LCB_CNTL_NETWORK
42
+
43
+ * [CCBC-969](https://issues.couchbase.com/browse/CCBC-969): Allow to skip version from git tags
44
+
45
+ * [CCBC-961](https://issues.couchbase.com/browse/CCBC-961): Add examples for FTS queries
46
+
47
+ * [CCBC-971](https://issues.couchbase.com/browse/CCBC-971): disable dead socket detection for older
48
+ libuv (fixes build on platforms, where old libuv-dev package installed).
49
+
50
+ * Report HELO features to logger in the single line.
51
+
52
+ * Allow to select compression mode in connection string. This might be useful for debugging
53
+ purposes. For example, to bypass inflation step when receiving data.
54
+
55
+ $ CONNSTRING=couchbase://localhost/default?compression=deflate_only
56
+ $ cbc cat -U $CONNSTRING 00000000.json > bindoc.dat
57
+ 00000000.json CAS=0x15431f831dc60000, Flags=0x0, Size=739, Datatype=0x03(JSON,SNAPPY)
58
+
59
+ ## 2.9.3 (July 18 2018)
60
+
61
+ * [CCBC-955](https://issues.couchbase.com/browse/CCBC-955): Parse uint32 as
62
+ unsigned ints instead of timeouts. Some settings were interpreted as time
63
+ values, while they should not (e.g. console_log_level, compression_min_size
64
+ etc). This issue forced the library to misinterpret user input (converter was
65
+ multiplying all values to 1000000, e.g. log level was always TRACE).
66
+
67
+ * [CCBC-957](https://issues.couchbase.com/browse/CCBC-957): Automatically
68
+ disable SSL support, when OpenSSL is unavailable.
69
+
70
+ * [CCBC-954](https://issues.couchbase.com/browse/CCBC-954): Define EFTYPE
71
+ error code if it does not exist. Fixes support of libuv 1.21 and higher.
72
+
73
+ * [CCBC-951](https://issues.couchbase.com/browse/CCBC-951): Remove
74
+ experimental warning from subdoc API.
75
+
76
+ * [CCBC-948](https://issues.couchbase.com/browse/CCBC-948): Consider retry
77
+ queue with only 0xb5 as empty. This allows a breakout from lcb_wait earlier
78
+ (when application operates in synchronous style). The old behavior, where
79
+ lcb_wait does not breakout until the library gets the first successful
80
+ configuration, still can be restored with `lcb_cntl(...,
81
+ LCB_CNTL_WAIT_FOR_CONFIG, ...)`.
82
+
83
+ * [CCBC-939](https://issues.couchbase.com/browse/CCBC-939): Optimize
84
+ the performance of built-in tracer. It now uses sllist for tags container
85
+ instead of Json::Value.
86
+
87
+ * [CCBC-958](https://issues.couchbase.com/browse/CCBC-958): Check tracing span
88
+ tags argument more pedantically and return error if arguments are not valid.
89
+
90
+ * [CCBC-956](https://issues.couchbase.com/browse/CCBC-956): Combine operation
91
+ id and name into single field in the threshold tracer.
92
+
93
+ * [CCBC-949](https://issues.couchbase.com/browse/CCBC-949): Do not hardcode
94
+ libevent dependencies in DEB packages. Instead let `dh_shlibdeps` script to
95
+ detect dependencies for each platform. This fixes a usless dependency on libevent-1
96
+ for ubuntu 18.04.
97
+
98
+ * [CCBC-947](https://issues.couchbase.com/browse/CCBC-947): Fix build scripts
99
+ for examples (when built with `-DLCB_BUILD_EXAMPLES=ON`).
100
+
101
+ And other small fixes and improvements.
102
+
103
+ ## 2.9.2 (June 22 2018)
104
+
105
+ * [CCBC-946](https://issues.couchbase.com/browse/CCBC-946): Restore broken ABI in 360ea68ef7738d543bbd3feac3f2c3c6c8ff976b
106
+
107
+ ## 2.9.1 (June 22 2018)
108
+
109
+ * [CCBC-942](https://issues.couchbase.com/browse/CCBC-942): Expose new error
110
+ codes for subdocument operations.
111
+
112
+ * [CCBC-866](https://issues.couchbase.com/browse/CCBC-866): Check cached
113
+ provider isn't NULL.
114
+
115
+ * [CCBC-890](https://issues.couchbase.com/browse/CCBC-890): Always check if SSL
116
+ used when getting ports.
117
+
118
+ * [CCBC-945](https://issues.couchbase.com/browse/CCBC-945): Allow to specify
119
+ logger in lcb_create().
120
+
121
+ * [CCBC-935](https://issues.couchbase.com/browse/CCBC-935): Display orphan
122
+ tracer report on WARN log level.
123
+
124
+ * [CCBC-936](https://issues.couchbase.com/browse/CCBC-936): Update default
125
+ tracing interval to 10 seconds.
126
+
127
+ * [CCBC-937](https://issues.couchbase.com/browse/CCBC-937): Implement support
128
+ for alternate addresses.
129
+
130
+ * [CCBC-943](https://issues.couchbase.com/browse/CCBC-943): Implement option to
131
+ dump TCP packets.
132
+
133
+ This change introduces new cmake option, which will force library to report
134
+ all incoming/outgoing TCP packets on TRACE log level. It renders the bytes
135
+ in Base64 encoding.
136
+
137
+ Also there is simple extraction tool, which beautifies packet traces, and
138
+ could be used like this:
139
+
140
+ cbc cat -vvv foo bar 2>&1 | tools/extract-packets.rb
141
+
142
+ ## 2.9.0 (May 24 2018)
143
+
144
+ This release is mostly about API visibility bump from uncommited to committed,
145
+ but also includes several bug fixes.
146
+
147
+ * [CCBC-930](https://issues.couchbase.com/browse/CCBC-930): Dump threshold
148
+ logging tracer queues before destroying the tracer.
149
+
150
+ * Updates in crypto API as per RFC. This basically change of the API (ABI has
151
+ preserved compatible, but `v0` crypto API will return runtime error with 2.9.0
152
+ library. From this release, all encryption key management encapsulated into
153
+ crypto provider, so it does not need to expose key loader interface. In
154
+ addition, that user API is changed to conform RFC, and use noun `fields`
155
+ instead of `document` (e.g. `lcbcrypt_encrypt_fields`).
156
+
157
+ * [CCBC-925](https://issues.couchbase.com/browse/CCBC-925): Fix existence checks
158
+ for registered crypto providers.
159
+
160
+ * [CCBC-924](https://issues.couchbase.com/browse/CCBC-924): Initialize flag for
161
+ JSON server feature. Otherwise it might be left uninitialized and the library
162
+ will send JSON datatype to servers, which do not support it.
163
+
164
+ * [PCBC-543](https://issues.couchbase.com/browse/PCBC-543), [CCBC-932](https://issues.couchbase.com/browse/CCBC-932), [CCBC-933](https://issues.couchbase.com/browse/CCBC-933): Update log levels
165
+
166
+ ## 2.8.7 (May 2 2018)
167
+
168
+ * [CCBC-917](https://issues.couchbase.com/browse/CCBC-917): Add tracing for
169
+ observe. So now the library will group all CAS-observe operations, and in
170
+ general will nest observe operations under common parent when
171
+ `lcb_storedur3` API used.
172
+
173
+ * [CCBC-918](https://issues.couchbase.com/browse/CCBC-918): Don't ping KV on
174
+ nodes without DATA service.
175
+
176
+ * [CCBC-685](https://issues.couchbase.com/browse/CCBC-685): Implementation of
177
+ SCRAM-SHA{1,256,512} authentication mechanisms for KV service. Support for
178
+ SCRAM-SHA* SASL auth is disabled by default, because it is not portable, and
179
+ not every Couchbase service supports it. But if it is necessary, it could be
180
+ enabled using `lcb_cntl(..., LCB_CNTL_FORCE_SASL_MECH, ...)` operation, or
181
+ `"force_sasl_mech=SCRAM-SHA512"` option in connection string.
182
+
183
+ * [CCBC-919](https://issues.couchbase.com/browse/CCBC-919): More granular
184
+ settings for compression. Now it is possible to specify minimum size of the
185
+ value to be considered for compression, and also the minimal ratio
186
+ `(compressed / original)`. See `LCB_CNTL_COMPRESSION_MIN_SIZE` (or
187
+ `"compression_min_size=100"` in bytes), and `LCB_CNTL_COMPRESSION_MIN_RATIO`
188
+ (or `"compression=0.9"`).
189
+
190
+ * [CCBC-916](https://issues.couchbase.com/browse/CCBC-916): Do not set JSON
191
+ datatype if server didn't ack it. Fixes behavior where old server rejecting
192
+ commands as invalid when compression is enabled.
193
+
194
+ * [CCBC-923](https://issues.couchbase.com/browse/CCBC-923): Allow to disable
195
+ fast-forward map for NMV handler. See `LCB_CNTL_VB_NOREMAP`
196
+ (`"vb_noremap=true"`). This option is disabled by default.
197
+
198
+ Build improvements:
199
+
200
+ * [CCBC-915](https://issues.couchbase.com/browse/CCBC-915): Fix builds
201
+ where DEBUG macro is defined
202
+
203
+ * [CBD-2405](https://issues.couchbase.com/browse/CBD-2405): Change
204
+ target names in conflict with Server targets
205
+
206
+ ## 2.8.6 (April 5 2018)
207
+
208
+ * [CCBC-888](https://issues.couchbase.com/browse/CCBC-888): Add threshold
209
+ logging tracer, which tracks and reports above threshold and orphaned operations.
210
+ This is beta functionality, which is disabled by default. To enable it, use
211
+ `enable_tracing=on` in the connection string.
212
+
213
+ * [CCBC-910](https://issues.couchbase.com/browse/CCBC-910): Field encryption
214
+ API. The `lcbcrypto_*` functions abstracts encrypted field layout from actual
215
+ crypto implementations (OpenSSL, libsodium, etc.). The wrapper or application
216
+ using libcouchbase is expected to connect their own crypto and key providers, while
217
+ libcouchbase provides transformation of the encrypted data. See
218
+ sample crypto provider in [example/crypto](example/crypto).
219
+
220
+ * [CCBC-904](https://issues.couchbase.com/browse/CCBC-904): Remove trailing
221
+ comma in `lcb_KVBUFTYPE` enum. Fixes build on some older
222
+ compilers.
223
+
224
+ * [CCBC-907](https://issues.couchbase.com/browse/CCBC-907): cbc-n1qlback: Do
225
+ not require trailing empty line for input.
226
+
227
+ * [CCBC-908](https://issues.couchbase.com/browse/CCBC-908): cbc-n1qlback:
228
+ Report number of loaded queries.
229
+
230
+ * Add ability to write OPS/SEC from cbc-pillowfight to a file
231
+
232
+ cbc-pillowfight 2> /tmp/stats.txt
233
+
234
+ or, when writing to terminal required
235
+
236
+ cbc-pillowfight 2>&1 | tee /tmp/stats.txt
237
+
238
+ * Build improvements for easier integration into with server manifest (and TLM project).
239
+
240
+ ## 2.8.5 (February 23 2018)
241
+
242
+ * [CCBC-883](https://issues.couchbase.com/browse/CCBC-883): Always use built-in compression.
243
+ It is not possible to unbundle the Snappy library, as libcouchbase uses the C++ API which is not
244
+ exported in the headers. Also, compression can now work on all types of buffers, including
245
+ `LCB_KV_IOV` and `LCB_KV_IOVCOPY`. This fixes compression in `cbc-pillowfight` tool.
246
+
247
+ * [CCBC-895](https://issues.couchbase.com/browse/CCBC-895): Fix typo in rendering IPv6 addresses
248
+ in `lcb_diag`.
249
+
250
+ * [CCBC-879](https://issues.couchbase.com/browse/CCBC-879): Implement log redaction. When
251
+ `log_redaction=on` is specified in the connection string, the library will wrap sensitive
252
+ data in the logs in special tags, which can be processed by the
253
+ `cblogredaction` tool from the server distribution.
254
+
255
+ * [CCBC-893](https://issues.couchbase.com/browse/CCBC-894): Updated list of subdoc error codes.
256
+
257
+ * [CCBC-892](https://issues.couchbase.com/browse/CCBC-892): Enable the SSL trust store to be in
258
+ a separate file. Trust store has to be specified with option `truststorepath=…`, otherwise
259
+ the library will expect it to be stored with the certificate in `certpath=`.
260
+
261
+ * [CCBC-888](https://issues.couchbase.com/browse/CCBC-888): Per operation tracing. When
262
+ compiled with tracing support (`cmake -DLCB_TRACING=ON`), the library will expose the tracing
263
+ API, which allows to measure time of every data operation, and include some extra information.
264
+ The API is modeled after OpenTracing and allows one to write custom tracers to consume this
265
+ information. For more information, see an example in
266
+ [example/tracing/tracing.c](example/tracing/tracing.c). This is uncommitted API at this time.
267
+
268
+ Also this feature includes support for new type of the server responses, which include
269
+ time spent to execute the KV command on the server. This feature controlled by `enable_tracing`
270
+ option in connection string or `lcb_cntl(..., LCB_CNTL_ENABLE_TRACING, ...)`.
271
+
272
+ * Added basic support of JSON datatype. The library will negotiate a mode, in which the
273
+ application will see `LCB_VALUE_F_JSON` flag on datatype field of the response in the
274
+ operation callback, if the cluster detected the content of the document to be valid JSON.
275
+ Also the application can send this flag on the outgoing documents to notify the server
276
+ about payload format.
277
+
278
+ * Refresh dtrace/systemtap integration. Also adds tapset for SystemTap to simplify access to
279
+ trace points.
280
+
281
+ * cbc-pillowfight improvements and changes:
282
+ * dump diagnostics on `SIGQUIT` (CTRL-\ in terminal).
283
+ * with `-J`/`--json`, the JSON datatype will be sent on the documents.
284
+ * enable randomized document bodies with `-R`/`--random-body` switch.
285
+ * durability checks for pillowfight with `--persist-to`/`--replicate-to`.
286
+ * pessimistic locking of keys before updating with `--lock`.
287
+ * when requesting timings with `-T`/`--timings`, the application will no longer dump them
288
+ periodically.Instead it will await for the user to signal `SIGQUIT` and also dump
289
+ them on exit. The old mode of reporting regularly is enabled by repeating the switch more than
290
+ once (e.g. `-TT`).
291
+
292
+ * Added the cbc-watch command to monitor server stats. By default it tracks `cmd_total_ops`,
293
+ `cmd_total_gets` and `cmd_total_sets` updating stats once a second, and displaying
294
+ diff with the previous value.
295
+
296
+
297
+ ## 2.8.4 (December 20 2017)
298
+
299
+ * [CCBC-880](https://issues.couchbase.com/browse/CCBC-880): Implement x.509 client
300
+ certificate authentication. Connection string must use TLS-enabled scheme
301
+ (`couchbases://` or `https://`) and set options `certpath` and `keypath`. For example,
302
+
303
+ couchbases://127.0.0.1?certpath=/path/to/chain.pem&keypath=/path/to/client.key
304
+
305
+ Read more at server docs: https://developer.couchbase.com/documentation/server/5.0/security/security-x509certsintro.html
306
+
307
+ * [CCBC-883](https://issues.couchbase.com/browse/CCBC-883): Revisit builtin compression
308
+ implementation (snappy). Add compression to cbc tools (see `--compress`, `-y` options).
309
+ Future versions of Couchbase Server will have end-to-end compression.
310
+
311
+ * [CCBC-885](https://issues.couchbase.com/browse/CCBC-885): Do not skip HTTP Basic
312
+ authentication when password is empty.
313
+
314
+ * [CCBC-876](https://issues.couchbase.com/browse/CCBC-876): Make sure that server
315
+ authority is always specified. In some cases, when libcouchbase generates vbucket
316
+ configuration or data service is not available, the authority of the server might be
317
+ NULL. This could cause issues, as we compare servers from configs using their authority
318
+ fields.
319
+
320
+ * [CCBC-878](https://issues.couchbase.com/browse/CCBC-878): Support collections in
321
+ cbc-pillowfight.
322
+
323
+ Note that this change does not expose anything related to Collections API for
324
+ libcouchbase. It defines hidden switches for pillowfight tool to allow benchmark of
325
+ collections. The switches are not documented and might be removed in the future. Use
326
+ with care.
327
+
328
+ Generate only `beer:<seqno>` keys:
329
+
330
+ cbc pillowfight --separator : --collection beer
331
+
332
+ Using many --collection will alternate in generating `beer:<seqno>`, `brewery:<seqno>`
333
+ keys (default separator is ":"):
334
+
335
+ cbc pillowfight --collection beer --collection brewery
336
+
337
+ * [CCBC-801](https://issues.couchbase.com/browse/CCBC-801): Expose information about
338
+ network IO for monitoring. The diagnostics exposed as string with encoded JSON object.
339
+
340
+ void diag_callback(lcb_t instance, int cbtype, const lcb_RESPBASE *rb)
341
+ {
342
+ const lcb_RESPDIAG *resp = (const lcb_RESPDIAG *)rb;
343
+ if (resp->rc != LCB_SUCCESS) {
344
+ fprintf(stderr, "failed: %s ", lcb_strerror(NULL, resp->rc));
345
+ } else {
346
+ if (resp->njson) {
347
+ fprintf(stderr, "%.*s", (int)resp->njson, resp->json);
348
+ }
349
+ }
350
+ }
351
+
352
+ lcb_install_callback3(instance, LCB_CALLBACK_DIAG, diag_callback);
353
+ lcb_CMDDIAG cmd = { 0 };
354
+ lcb_diag(instance, NULL, &cmd);
355
+ lcb_wait(instance);
356
+
357
+ * [CCBC-874](https://issues.couchbase.com/browse/CCBC-874): Dynamic authenticator. Note
358
+ that this feature should not be considered at public interface. To use it, application
359
+ have to define two callbacks, which will return username and password dependending on
360
+ bucket name and hostname/port of the endpoint.
361
+
362
+ std::map< std::string, std::string > credentials = {
363
+ {"protected", "secret"}
364
+ };
365
+ extern "C" {
366
+ static const char *get_username(void *cookie,
367
+ const char *host,
368
+ const char *port,
369
+ const char *bucket)
370
+ {
371
+ return bucket;
372
+ }
373
+
374
+ static const char *get_password(void *cookie,
375
+ const char *host,
376
+ const char *port,
377
+ const char *bucket)
378
+ {
379
+ std::map< std::string, std::string > *credentials =
380
+ static_cast<std::map< std::string, std::string > *>(cookie);
381
+ return (*credentials)[bucket].c_str();
382
+ }
383
+ }
384
+
385
+
386
+ and later pass these callbacks to authenticator like this:
387
+
388
+
389
+ lcb_AUTHENTICATOR *auth = lcbauth_new();
390
+ lcbauth_set_callbacks(auth, &credentials, get_username, get_password);
391
+ lcbauth_set_mode(auth, LCBAUTH_MODE_DYNAMIC);
392
+ lcb_set_auth(instance, auth);
393
+
394
+ * Include platform/compiler into client id, which included into HELLO and HTTP requests.
395
+
396
+ * Fix parallel build on Linux when dtrace enabled
397
+
398
+ * cbc-proxy: proxy N1QL, FTS and Analytics queries using STAT command.
399
+
400
+ ## 2.8.3 (November 21 2017)
401
+
402
+ * [CCBC-415](https://issues.couchbase.com/browse/CCBC-415): Fixes in IPv6 support.
403
+ To use IPv6 addresses, the application should connect to IPv6-enabled Couchbase Server,
404
+ and explicitly switch on option via connection string `ipv6=allow` or `ipv6=only`,
405
+ where first variant permits the library to use both IPv6 and IPv4, and the second --
406
+ disables IPv4. Alternatively this setting controlled with `LCB_CNTL_IP6POLICY` and
407
+ `lcb_cntl`.
408
+
409
+ * [CCBC-872](https://issues.couchbase.com/browse/CCBC-872): Metrics management
410
+ These metrics are intended at providing information on libcouchbase operations performed
411
+ over the lifetime of the current `lcb_t` instance (processed request packets, processed
412
+ response packets, request packets pending emission, server errors, server timeouts,
413
+ misrouted operations, retried operations).
414
+
415
+ Metrics collection is currently disabled by default. To enable metrics collection,
416
+ the user should call:
417
+
418
+ int activate = 1;
419
+ lcb_cntl(instance, LCB_CNTL_SET, LCB_CNTL_METRICS, &activate);
420
+
421
+ Access to the collected metrics is done using:
422
+
423
+ lcb_METRICS* my_metrics;
424
+ lcb_cntl(instance, LCB_CNTL_GET, LCB_CNTL_METRICS, &my_metrics);
425
+
426
+ * [CCBC-870](https://issues.couchbase.com/browse/CCBC-870): Fix updating URL on retry. When retrying HTTP request, instead of replacing just `host:port` part of the old URL, the library inserted full URL.
427
+
428
+ * [CCBC-547](https://issues.couchbase.com/browse/CCBC-547): Detect dead sockets under libuv.
429
+
430
+ * Ensure macros safe by surrounding values with parentheses
431
+
432
+ ## 2.8.2 (October 17 2017)
433
+
434
+ * [CCBC-833](https://issues.couchbase.com/browse/CCBC-833), [CCBC-834](https://issues.couchbase.com/browse/CCBC-834):
435
+ Update real cluster integration in the test suite.
436
+
437
+ * [CCBC-860](https://issues.couchbase.com/browse/CCBC-860): cbc-connstr: Do not zero out C++ instances.
438
+
439
+ * [CCBC-859](https://issues.couchbase.com/browse/CCBC-859): Fix libm shared object detection on Debian 9.
440
+
441
+ * Bugs reported by [clang analyzer](http://clang-analyzer.llvm.org/):
442
+
443
+ * [CCBC-858](https://issues.couchbase.com/browse/CCBC-858): Fix memory leak for compressed packet.
444
+ * [CCBC-857](https://issues.couchbase.com/browse/CCBC-857): Fix possible NULL pointer dereference in `mcreq_reserve_key`.
445
+ * [CCBC-856](https://issues.couchbase.com/browse/CCBC-856): Initialize response struct in `H_config`.
446
+ * [CCBC-855](https://issues.couchbase.com/browse/CCBC-855): Fix dead assignments in `contrib/genhash`.
447
+ * [CCBC-854](https://issues.couchbase.com/browse/CCBC-854): Init vbguess array before entry lookup.
448
+ * [CCBC-853](https://issues.couchbase.com/browse/CCBC-853): cbc-proxy: do not use client object after free.
449
+ * [CCBC-852](https://issues.couchbase.com/browse/CCBC-852): Do not free memory twice in N1QL index manager.
450
+
451
+ ## 2.8.1 (September 20 2017)
452
+
453
+ * Check nodes number for durability checks. The store with durability
454
+ requirements will report more specific error when the library cannot
455
+ fulfill the condition during failover.
456
+ * Issues: [CCBC-817](https://issues.couchbase.com/browse/CCBC-817)
457
+
458
+ * Handle enhanced error messages for subdoc operations. The subdoc
459
+ responses will now expose context and reference ID if present.
460
+ * Issues: [CCBC-846](https://issues.couchbase.com/browse/CCBC-846)
461
+
462
+ * Discover and bootstrap analytics service from cluster configuration.
463
+ * Issues: [CCBC-840](https://issues.couchbase.com/browse/CCBC-840)
464
+
465
+ * Improve documentation of configuration parameters.
466
+ * Issues: [CCBC-835](https://issues.couchbase.com/browse/CCBC-835)
467
+
468
+ * Enable Error Map feature by default.
469
+ * Issues: [CCBC-838](https://issues.couchbase.com/browse/CCBC-838)
470
+
471
+ * Cleanup and extend `minimal`, `libeventdirect`, `instancepool` examples
472
+
473
+ * Tools:
474
+ * improve error reporting
475
+ * experimental subcommand `cbc-proxy`
476
+ * fix memory leaks
477
+ * retry store operations during population phase in `cbc-pillowfight`
478
+
479
+ ## 2.8.0 (August 31 2017)
480
+
481
+ * Add support for OpenSSL-1.1.
482
+ * Issues: [CCBC-814](https://issues.couchbase.com/browse/CCBC-814)
483
+
484
+ * Mask `LOCKED` status code for backward compatibility. This code
485
+ (as well as others possible codes with 'item-locked' attribute)
486
+ replaced with `LCB_KEY_EEXISTS` for `SET`, `REPLACE` and `DELETE`
487
+ operations, and with `LCB_ETMPFAIL` for the rest.
488
+ * Issues: [CCBC-832](https://issues.couchbase.com/browse/CCBC-832)
489
+
490
+ * Stop enumerating bootstrap nodes and mechanisms when the server
491
+ returns authentication error.
492
+ * Issues: [CCBC-825](https://issues.couchbase.com/browse/CCBC-825)
493
+
494
+ * Fixed double free error with `lcb_ping3`.
495
+ * Issues: [CCBC-826](https://issues.couchbase.com/browse/CCBC-826)
496
+
497
+ * Exposed additional N1QL query parameters: `lcb_n1p_readonly`,
498
+ `lcb_n1p_scancap`, `lcb_n1p_pipelinecap`.
499
+ * Issues: [CCBC-823](https://issues.couchbase.com/browse/CCBC-823)
500
+
501
+ * Fixed `cbc-subdoc/upsert` without XATTR.
502
+ * Issues: [CCBC-823](https://issues.couchbase.com/browse/CCBC-823)
503
+
504
+ * XERROR attributes synchronized with recent list on server.
505
+ * Issues: [CCBC-828](https://issues.couchbase.com/browse/CCBC-828)
506
+
507
+ * Add missing documentation, and update stability of the API.
508
+ * Issues:
509
+ [CCBC-830](https://issues.couchbase.com/browse/CCBC-830),
510
+ [CCBC-831](https://issues.couchbase.com/browse/CCBC-831),
511
+ [CCBC-827](https://issues.couchbase.com/browse/CCBC-827)
512
+
513
+ * Do not throttle background configuration polling by throttle interval
514
+ of configuration error handler.
515
+ * Issues: [CCBC-829](https://issues.couchbase.com/browse/CCBC-829)
516
+
517
+ * Turn on background polling by default. The library will try
518
+ to schedule configuration update every 2.5 seconds. To disable it
519
+ use `config_poll_interval=0`.
520
+ * Issues: [CCBC-836](https://issues.couchbase.com/browse/CCBC-836)
521
+
522
+ ## 2.7.7 (August 17 2017)
523
+
524
+ * Implement new function `lcb_ping3`, which sends NOOP-like message to
525
+ each service in the cluster and allows to measure latency along with
526
+ health status of the connection. Might be useful for application-side
527
+ keep-alive mechanisms.
528
+ * Issues: [CCBC-801](https://issues.couchbase.com/browse/CCBC-801)
529
+
530
+ * Detect and expose bucket type through `LCB_CNTL_BUCKETTYPE`:
531
+
532
+ lcb_BTYPE type;
533
+ lcb_cntl(instance, LCB_CNTL_GET, LCB_CNTL_BUCKETTYPE, &type);
534
+
535
+ * Issues: [CCBC-790](https://issues.couchbase.com/browse/CCBC-790)
536
+
537
+ * Fixed setting expiration in subdoc mutations.
538
+ * Issues: [CCBC-799](https://issues.couchbase.com/browse/CCBC-816)
539
+
540
+ * Fixed DNS SRV support of Fedora 26 and FreeBSD.
541
+ * Issues: [CCBC-816](https://issues.couchbase.com/browse/CCBC-816)
542
+
543
+ * Fixed DNS SRV with SSL connections.
544
+ * Issues: [CCBC-794](https://issues.couchbase.com/browse/CCBC-794)
545
+
546
+ * Define EREMOTEIO in libuv
547
+ * Issues: [CCBC-812](https://issues.couchbase.com/browse/CCBC-812)
548
+
549
+ * New subdocument command to remove whole document
550
+ * Issues: [CCBC-811](https://issues.couchbase.com/browse/CCBC-811)
551
+
552
+ * New cbc command: `cbc-subdoc`. It provides interactive shell, where
553
+ all subdocument commands accessible to inspect and modify documents
554
+ in the cluster.
555
+
556
+ * New cbc command: `cbc-ping`. It sends NOOP-like messages to all accessible
557
+ services in the cluster, and displays the status along with latency.
558
+ * Issues: [CCBC-801](https://issues.couchbase.com/browse/CCBC-801)
559
+
560
+ * Fix `cbc-cat --replica`, which now allows reading documents from replicas.
561
+ * Issues: [CCBC-820](https://issues.couchbase.com/browse/CCBC-820)
562
+
563
+ * Implement NOOP command and `cbc-pillowfight --noop`, which sends NOOP
564
+ instead of data manipulation commands.
565
+ * Issues: [CCBC-801](https://issues.couchbase.com/browse/CCBC-801)
566
+
567
+ * Clarify errors found in `.cbcrc`. Now it will display configuration path
568
+ along with error message.
569
+ * Issues: [CCBC-759](https://issues.couchbase.com/browse/CCBC-759]
570
+
571
+ * Update examples:
572
+ * Support username/password in subdoc and libeventdirect examples
573
+ * Added example for subdoc XATTRs
574
+
575
+ * Integrate fix for parallel build with dtrace on FreeBSD
576
+ https://github.com/freebsd/freebsd-ports/commit/a71e1a86b851d42cd08319d9b28a4424e508e216
577
+
578
+ * Make enhanced errors API public
579
+ * Issues: [CCBC-803](https://issues.couchbase.com/browse/CCBC-803)
580
+
581
+ * Fixed various compiler and cppcheck warnings and documentation update.
582
+
583
+ ## 2.7.6 (July 11 2017)
584
+
585
+ * Expose enhanced errors for data commands. Couchbase Server 5 might return
586
+ additional information about errors in the response body. According to
587
+ SDK-RFC-28, the library allow user code to inspect this information using
588
+ following functions:
589
+
590
+ * `lcb_resp_get_error_context(int, const lcb_RESPBASE *)`
591
+ * `lcb_resp_get_error_ref(int, const lcb_RESPBASE *)`
592
+
593
+ They both return non-NULL strings if any of error information accessible.
594
+ The lifetime of these fields limited by lifetime of the response object.
595
+ * Issues: [CCBC-781](https://issues.couchbase.com/browse/CCBC-781)
596
+
597
+ * Report contextualized error messages during negotiation. The event reference
598
+ could be used to find more details about authentication errors in the server
599
+ logs.
600
+ * Issues: [CCBC-780](https://issues.couchbase.com/browse/CCBC-780)
601
+
602
+ * Specify correct protocol level for `SO_KEEPALIVE`. This fixes setting
603
+ `tcp_keepalive` option on connections.
604
+ * Issues: [CCBC-798](https://issues.couchbase.com/browse/CCBC-798)
605
+
606
+ * Implement Error Map Retries. This implements the mechanics needed to retry
607
+ commands on various errors based on dynamic settings supplied via the error map.
608
+ * Issues: [CCBC-783](https://issues.couchbase.com/browse/CCBC-783)
609
+
610
+ * Add cluster admin provider. This provider doesn't do anything except serve
611
+ as a source of management hostnames. And the library will fall back to it
612
+ when bucket is not specified for cluster management connections.
613
+ * Issues: [CCBC-797](https://issues.couchbase.com/browse/CCBC-797)
614
+
615
+ * Implement RBAC user management in cbc tools. In addition to `examples/users`,
616
+ this can be a demonstration of new security APIs which appear in Couchbase
617
+ Server 5.
618
+ * Issues: [CCBC-757](https://issues.couchbase.com/browse/CCBC-757)
619
+
620
+ * Allow to inspect query errors in `cbc-n1qlback`. The command will write
621
+ details for failed queries to file, specified with option `--error-log`.
622
+
623
+ * Fix memory leak in io::Pool
624
+ * Issues: [CCBC-791](https://issues.couchbase.com/browse/CCBC-791)
625
+
626
+ * Fix `LCB_SDCMD_GET_FULLDOC`. This would not actually work beforehand
627
+ because the opcode it's mapped to is 0, and we used 0 as a sentinel
628
+ value for an invalid opcode within the subdoc implementation.
629
+ * Issues: [CCBC-792](https://issues.couchbase.com/browse/CCBC-792)
630
+
631
+ * Add LCB_NOT_AUTHORIZED error code. This error code maps to
632
+ Memcached's EACCESS
633
+
634
+ * Don't send empty Authorization header for HTTP requests, If there's
635
+ no username and/or password
636
+ * Issues: [CCBC-789](https://issues.couchbase.com/browse/CCBC-789)
637
+
638
+ * Internal refactoring:
639
+ - `io::Pool` - remove empty dtor
640
+ - Fix `BadPluginEnvironment` test on Fedora where libm.so is ld script
641
+ - Add missing commands for `cbc-help`
642
+
643
+ * Documentation update:
644
+ - Add additional documentation for `lcb_n1ql_cancel()`
645
+ - Typos
646
+
647
+ ## 2.7.5 (May 17 2017)
648
+
649
+ * Allow to disable sending the `HELLO` command when connecting to a server.
650
+ Sending `HELLO` will cause a bootstrap failure with Couchbase Server 2.0 and
651
+ older.
652
+ * Issues: [CCBC-786](https://issues.couchbase.com/browse/CCBC-786)
653
+
654
+ * Fix error return value on reprepared query.
655
+ Previously an error was returned if a N1QL query was reprepared, because
656
+ the prior internal failure status was not updated.
657
+ * Issues: [CCBC-782](https://issues.couchbase.com/browse/CCBC-782)
658
+
659
+ * Check for more N1QL error strings indicating the need to reprepare a statement.
660
+
661
+ * Fix uninitialized memory issue when initializing `lcb::Server` and `mc_PIPELINE`
662
+
663
+ * Couchbase 5.0 additions for Subdocument.
664
+ This adds new protocol extensions for Couchbase 5.0. This consists of:
665
+ * New `LCB_SDCMD_SET_FULLDOC` and `LCB_SDCMD_GET_FULLDOC` for full-doucument
666
+ gets and sets via the subdoc API. This allows to access xattrs atomically
667
+ with the document body.
668
+ * New 'document flags'. These are in the form of `LCB_CMDSUBDOC_F_`.
669
+ * Issues: [CCBC-774](https://issues.couchbase.com/browse/CCBC-774)
670
+
671
+ * Fix bug where CCCP subsystem would be suspended indefinitely.
672
+ CCCP subsystem would hang if an error was received for the config request
673
+ itself.
674
+ * Issues: [CCBC-779](https://issues.couchbase.com/browse/CCBC-779)
675
+
676
+ * Fix bootstrap with `LCB_TYPE_CLUSTER`. Previously bootstrap would fail because
677
+ the client would not send proper credentials. Note that at this point, the
678
+ `default` bucket must still exist.
679
+ * Issues: [CCBC-778](https://issues.couchbase.com/browse/CCBC-778)
680
+
681
+ * Ignore empty DNS SRV replies.
682
+ Some buggy DNS configurations return positive replies to SRV queries, but
683
+ without actually containing any kind of A record as a response.
684
+ * Issues: [CCBC-776](https://issues.couchbase.com/browse/CCBC-776)
685
+
686
+ * Enable background polling for configuration changes.
687
+ This allows the client to periodically poll for configuration changes. This
688
+ feature is disabled by default. You can use the `config_poll_interval`
689
+ setting to enable it in the connection string.
690
+ * Issues: [CCBC-627](https://issues.couchbase.com/browse/CCBC-627)
691
+
692
+ * Enable TCP Keepalive for newly created sockets.
693
+ Newly created sockets have TCP keepalive enabled in order to avoid firewalls
694
+ breaking connections due to inactivity. TCP Keepalive does not yet work for
695
+ the libuv plugin (e.g. nodejs).
696
+ You can use the `tcp_keepalive=false` directive in the connection string
697
+ to disable it.
698
+ * Issues: [CCBC-690](https://issues.couchbase.com/browse/CCBC-690)
699
+
700
+ ## 2.7.4 (April 18 2017)
701
+
702
+ * Send `SELECT_BUCKET` command by default if server supports it. This enables
703
+ new-style 'RBAC' authentication by default. In 2.7.3 users were required to
704
+ use `select_bucket=true` in the connection string to enable this feature.
705
+ In this version, the option is still available but is now mainly useful to
706
+ disable it.
707
+
708
+ * Improve `lcb_AUTHENTICATOR` API. This provides better documentation and some
709
+ API/design/implementation fixes to the authenticator interface. The
710
+ authenticator may be useful for integrators/wrappers who wish to correlate
711
+ multiple credentials with their buckets.
712
+ Note that the use of `lcb_AUTHENTICATOR` is *not* required for RBAC support.
713
+ In order to use RBAC, simply make use of the `username` field in
714
+ the `lcb_create_st` struct, or the `username` parameter in the connection
715
+ string.
716
+ * Issues: [CCBC-751](https://issues.couchbase.com/browse/CCBC-751)
717
+
718
+ * Fix bug where `lcb_get_server_list()` would return NULL.
719
+ * Issues: [CCBC-764](https://issues.couchbase.com/browse/CCBC-764)
720
+
721
+ * Fix bug where client would not recover from failover. Clients from version
722
+ 2.7.1 through 2.7.3 would not obtain a new cluster map after a node had
723
+ been failed over (e.g. by hitting the "fail over" button in the UI).
724
+ * Issues: [CCBC-761](https://issues.couchbase.com/browse/CCBC-761)
725
+
726
+ ## 2.7.3 (March 21 2017)
727
+
728
+ * Provide the ability to send the `SELECT_BUCKET` when establishing a
729
+ to a server. This is a building block allowing us to use 'RBAC'/username
730
+ auth in the future.
731
+ Note that this requires the `select_bucket=true` option in the connection
732
+ string or equivalent, and that this feature as a whole is considered
733
+ experimental.
734
+ * Priority: Major
735
+ * Issues: [CCBC-758](https://issues.couchbase.com/browse/CCBC-758)
736
+
737
+ * Provide an option to disable DNS-SRV lookups. Because DNS SRV lookups often
738
+ result in no result (i.e. `NXDOMAIN`) - which takes longer, allowing to
739
+ disable such lookups may speed up startup time.
740
+ This option is available via the connection string, using `dnssrv=off`
741
+ * Priority: Minor
742
+ * Issues: [CCBC-756](https://issues.couchbase.com/browse/CCBC-756)
743
+
744
+ * Send client/user-specific identifier in `User-Agent` HTTP header.
745
+ The library already does this for data nodes (Memcached). Using it in HTTP
746
+ services allows better supportability when diagnosing issues by reading the
747
+ HTTP logs.
748
+ * Priority: Major
749
+ * Issues: [CCBC-755](https://issues.couchbase.com/browse/CCBC-755)
750
+
751
+ * Fix bug where DNS SRV hostnames would not be used.
752
+ While DNS SRV lookup was working, the library would not actually attempt
753
+ bootstrap off those received hostnames.
754
+ * Priority: Major
755
+ * Issues: [CCBC-753](https://issues.couchbase.com/browse/CCBC-753)
756
+
757
+ * Provide experimental Analytics support.
758
+ This allows access to the Couchbase Analytics Service, available in
759
+ some pre-release builds. API and syntax wise, Analytics is very similar
760
+ to N1QL.
761
+ To use the analytics service, set the `LCB_CMDN1QL_F_CBASQUERY` bit in
762
+ `lcb_CMDN1QL::cmdflags`, and provide the appropriate _host:port_ combination
763
+ in the `lcb_CMDN1QL::host` field. - Currently, analytics support is not
764
+ used in the cluster map/configuration.
765
+ * Priority: Major
766
+ * Issues: [CCBC-734](https://issues.couchbase.com/browse/CCBC-734)
767
+
768
+ ## 2.7.2 (February 21 2017)
769
+
770
+ This release consists of additional internal refactoring and some improved
771
+ logging messages. There is enhanced experimental XATTR support. This release
772
+ also contains some bug fixes:
773
+
774
+ * Fix build issues on FreeBSD. This allows normal BSD `make` to be used, rather
775
+ than forcing `gmake`
776
+
777
+ * Fixed broken JIRA link in README
778
+
779
+ * Fix hanging SSL connections in IOCP/Completion mode. This would sometimes
780
+ stall the connection by not requesting a write if a read was in progress.
781
+ This would result in the command not being sent and the client hanging.
782
+ Note that this only affects completion-style I/O plugins such as IOCP and
783
+ libuv.
784
+ * Issues: [CCBC-744](https://issues.couchbase.com/browse/CCBC-744)
785
+
786
+ * Rename `LCB_SDSPEC_F_VIRTPATH` to `LCB_SDSPEC_F_MACROVALUES`. `VIRTPATH`
787
+ is intended for possible future materialized XATTRs.
788
+
789
+ * Add `LCB_SDSPEC_F_XATTR_DELETED_OK`, which maps to the protocol flag of
790
+ roughly the same name.
791
+
792
+ ## 2.7.1 (January 19 2017)
793
+
794
+ This release consists of additional internal refactoring. More internals have
795
+ been converted to C++.
796
+
797
+ * Provide XATTR (Extended Attribute) prototype support.
798
+ This provides a prototype implementation of xattrs, allowing the client to
799
+ access extended (hidden) attributes of a document. This feature can be used
800
+ on the client side by simply setting the `LCB_SDSPEC_F_XATTRPATH` bit in
801
+ the `lcb_SDSPEC::options` field.
802
+ * Issues: [CCBC-728](https://issues.couchbase.com/browse/CCBC-728)
803
+
804
+ * Add automatic DNS SRV record lookup when simple hostname supplied.
805
+ The library will now automatically attempt to look up SRV records
806
+ for various couchbase services if only one host is present in the
807
+ connection string. Automatic lookup will not be performed if more
808
+ than a single host is provded. See the [Java Documentation](https://developer.couchbase.com/documentation/server/current/sdk/java/managing-connections.html)
809
+ on the matter (go to the bottom of the page).
810
+ * Issues: [CCBC-566](https://issues.couchbase.com/browse/CCBC-566)
811
+
812
+ ## 2.7.0 (December 21 2016)
813
+
814
+ This release consists mainly of internal refactoring. Many of the internals
815
+ have been 'upgraded' to C++
816
+
817
+ ## 2.6.4 (November 28 2016)
818
+
819
+ * Fix bug in pillowfight where large value sizes would cause a segfault.
820
+ * Issues: [CCBC-727](https://issues.couchbase.com/browse/CCBC-727)
821
+
822
+ * Allow 64 bit values with `cbc-incr` and `cbc-decr`.
823
+ * Issues: [CCBC-716](https://issues.couchbase.com/browse/CCBC-716)
824
+
825
+ * Fix encoding in `lcb_n1p_setconsistent_token`. This function would encode
826
+ it as `scan_vector` but it should be `scan_vectors`.
827
+
828
+ * Refactor negotiation internals to use C++.
829
+ This is part of an internal refactoring to move our internals over to C++.
830
+ This will make the code more manageable and extendable in the future.
831
+
832
+ ## 2.6.3 (September 27 2016)
833
+
834
+ * Fix memory corruption for some JSON APIs when no rows are returned.
835
+ This fixes a bug where the JSON parser would read from garbage memory when
836
+ parsing a response that had no rows, but due to a slow network, would be
837
+ received in multiple chunks.
838
+ This affects N1QL, CBFT, and View APIs.
839
+ * Priority: Major
840
+ * Issues: [CCBC-721](https://issues.couchbase.com/browse/CCBC-721)
841
+
842
+ * Allow to adjust bytes to read per event loop iteration.
843
+ This allows applications with high network throughput but low CPU capacity
844
+ to prevent the library from oversaturating a specific event callback invocation
845
+ or starve other sockets. It may be controlled through the `read_chunk_size`
846
+ connection string option or via `lcb_cntl_string`.
847
+ * Priority: Major
848
+ * Issues: [CCBC-568](https://issues.couchbase.com/browse/CCBC-568)
849
+
850
+ * Use `htonll` for CAS values.
851
+ This allows a consistent representation of CAS values regardless of underlying
852
+ platform. This allows interoperability between other SDKs with respect to
853
+ exchanging CAS values. This however may break interoperability with older
854
+ versions of the same SDK, if the CAS value is being passed around (which it
855
+ shouldn't be).
856
+
857
+ * New subdocument additions.
858
+ This adds the `LCB_SUBDOC_F_MKDOCUMENT` flag which allows document creation
859
+ if the document does not exist, and can be used for mutation operations which
860
+ may create new paths or values. The `LCB_SUBDOC_CMD_GET_COUNT` is also added,
861
+ which is a new command which retrieves the number of elements (for an array)
862
+ or key-value items (within an object/dictionary) of a given path.
863
+ Both these features require Couchbase Server 4.6 (or its prereleases).
864
+ * Priority: Major
865
+ * Issues: [CCBC-718](https://issues.couchbase.com/browse/CCBC-718)
866
+
867
+ ## 2.6.2 (July 26 2016)
868
+
869
+ * Don't crash on high number of FDs with select plugin. Because `select(2)`
870
+ can only accomodate up to a certain number of file descriptors in the
871
+ application, if opening a socket results in a too-high-numbered FD, the
872
+ plugin will return an error rather than silently failing during polling.
873
+ * Priority: Major
874
+ * Issues: [CCBC-567](https://issues.couchbase.com/browse/CCBC-567)
875
+
876
+ * Pillowfight can now set ttl (expiry). This is done via the `-e` or `--expiry`
877
+ option.
878
+ * Priority: Major
879
+ * Issues: [CCBC-637](https://issues.couchbase.com/browse/CCBC-637)
880
+
881
+ * Log URLs of HTTP requests. This may make it easier to debug some HTTP-based
882
+ APIs. The URLs are printed as part of the `TRACE` logging level.
883
+ * Priority: Major
884
+ * Issues: [CCBC-641](https://issues.couchbase.com/browse/CCBC-641)
885
+
886
+ * Fix crash on shutdown with completion-based I/O. The crash was a result
887
+ of dereferencing the `lcb_t` after it had been destroyed. This bug affected
888
+ completion-based I/O subsystems such as libuv and IOCP.
889
+ * Priority: Major
890
+ * Issues: [CCBC-707](https://issues.couchbase.com/browse/CCBC-707)
891
+
892
+ * Do not require `operation` field to be set on `lcb_CMDSTORE`.
893
+ Starting from this version, a new `lcb_storage_t` constant, `LCB_UPSERT`
894
+ has been added with a value of 0. This means that upsert operations no
895
+ longer need to explicitly use `LCB_SET`, it being the default.
896
+ * Priority: Major
897
+ * Issues: [CCBC-545](https://issues.couchbase.com/browse/CCBC-545)
898
+
899
+ ## 2.6.1 (June 21 2016)
900
+
901
+ * Index management API now properly handles 'fields' field. Previously this
902
+ was treated as a csv string, when it is in fact a JSON array.
903
+
904
+ * `pillowfight` now has a `--populate-only` option, which is useful when simply
905
+ trying to populate buckets with large amounts of data.
906
+
907
+ * Allow to bypass OpenSSL initialization. This allows applications which already
908
+ have OpenSSL intialization code in place to suppress libcouchbase's own
909
+ OpenSSL initialization code. You can disable SSL initialization by using
910
+ `ssl=no_global_init` in the connection string.
911
+
912
+ * Allow to toggle sending of multiple credentials in N1QL queries.
913
+ You can use the `LCB_CMD_F_MULTIAUTH` in the `lcb_CMDN1QL::cmdflags` field
914
+ to indicate that multiple credentials should be added. Otherwise only the
915
+ current bucket's credentials will be sent.
916
+
917
+ * Fix infinite loop on completion (UV,nodejs,IOCP) type IO plugins.
918
+ This bug would be triggered when only a single server remained in the cluster
919
+ and that single server failed. This would result in the client never being
920
+ able to perform operations due to a delayed reference count decrement.
921
+ * Priority: Major
922
+ * Issues: [CCBC-704](https://issues.couchbase.com/browse/CCBC-704)
923
+
924
+ ## 2.6.0 (May 17 2016)
925
+
926
+ * Improve index management API and implementation. The `rawjson` field was
927
+ being ignored and the `condition` field was missing as well.
928
+
929
+ * Add pillowfight support for subdoc. At the simplest level you can simply
930
+ invoke pillowfight as `cbc-pillowfight --subdoc --json <other args>`.
931
+ Refer to the pillowfight documentation for more details.
932
+
933
+ ## 2.5.8 (April 19 2016)
934
+
935
+ * Fix SSL connectivity errors with views and HTTP bootstrapping.
936
+ This would cause network connectivity issues when attempting to bootstrap
937
+ via `https://` or using views (`lcb_view_query()`). The fix is a workaround
938
+ to not advertise older SSL encryption methods.
939
+ * Priority: Major
940
+ * Issues: [CCBC-688](https://issues.couchbase.com/browse/CCBC-688)
941
+
942
+ * Do not abort when receiving a memcached EINVAL response.
943
+ While the client should never end up in a situation where it receives an
944
+ `EINVAL` from the server, it should nevertheless not terminate the execution
945
+ of the current process. This bug was introduced in 2.5.6
946
+ * Issues: [CCBC-689](https://issues.couchbase.com/browse/CCBC-689)
947
+
948
+ * Fix memory leak when using N1QL prepared statements.
949
+ Prepared statements would never be freed, even when the client handle was
950
+ destroyed (`lcb_destroy()`) causing a slight memory leak.
951
+
952
+ * Append CRLF header after host header.
953
+ This would sometimes result in odd HTTP headers being sent out.
954
+ * Issues: [CCBC-694](https://issues.couchbase.com/browse/CCBC-694)
955
+
956
+ * Experimental CBFT (Full-Text search API)
957
+ This version adds a new fulltext api. The API is a row-based API similar
958
+ to N1QL and MapReduce. See the `<libcouchbase/cbft.h>` header for more details.
959
+ The API is experimental and subject to change.
960
+ * Issues: [CCBC-638](https://issues.couchbase.com/browse/CCBC-638)
961
+
962
+ * Allow additional client identifier for HELLO command.
963
+ The SDK sends a version string to the server when doing initial negotiation.
964
+ The server then uses this string in the context of any logging messages
965
+ pertaining to that connection. In this version, a new setting has been added
966
+ to allow 'user-defined' version strings to be appended to the logs. Note that
967
+ this feature is intended only for use with wrapping SDKs such as Python, node.js
968
+ and PHP so that their versions can be present in the log messages as well.
969
+ This setting is exposed as a string control (in the connection string, or
970
+ `lcb_cntl_string()` with the name of `client_string`.
971
+ * Issues: [CCBC-693](https://issues.couchbase.com/browse/CCBC-693)
972
+
973
+ * vBucket retry logic changes.
974
+ The client will now retry at constant 100ms rate when receiving not-my-vbucket
975
+ error replies from the server (adjustable using `retry_nmv_interval`).
976
+ It will also only use fast-forward map to determine the new location for the
977
+ vbucket, and will not use extended hueristics.
978
+
979
+ The most noteworthy user-visible change is the 100ms retry interval which
980
+ will significantly decrease the network traffic used by the SDK
981
+ during a rebalance.
982
+
983
+ To restore the pre-2.5.8 behavior (i.e. use extended heuristics and and
984
+ exponential retry rate), specify `vb_noguess=false`.
985
+ * Priority: Major
986
+ * Issues: [CCBC-660](https://issues.couchbase.com/browse/CCBC-660)
987
+
988
+ * Add interface for multi-bucket authentication.
989
+ A new API has been added to modify and add additional bucket/password
990
+ pairs in the library. This is done using `lcb_cntl` and the `LCB_CNTL_BUCKET_CRED`
991
+ setting.
992
+
993
+ Note that this functionality is not yet used in N1QL queries due to
994
+ [MB-16964](https://issues.couchbase.com/browse/MB-16964)
995
+ * Priority: Minor
996
+ * Issues: [CCBC-661](https://issues.couchbase.com/browse/CCBC-661)
997
+
998
+
999
+ ## 2.5.7 (March 22 2016)
1000
+
1001
+ * High-level index management operations.
1002
+ A volatile API for high level index management operations has been added to
1003
+ assist in common N1QL index operations such as creating the primary index
1004
+ and removing indexes.
1005
+ * Priority: Major
1006
+ * Issues: [CCBC-662](https://issues.couchbase.com/browse/CCBC-662)
1007
+
1008
+ * Fix N1QL mutation token queries.
1009
+ This fixes some bugs in the previous implementation of the way mutation tokens
1010
+ were handled with `lcb_N1QLPARAMS`. The bugs and fixes only affect consumers
1011
+ of that API. Couchbase SDKs do not consume this API
1012
+ * Priority: Minor
1013
+ * Issues: [CCBC-658](https://issues.couchbase.com/browse/CCBC-658)
1014
+
1015
+ * Throttle config request retries on empty NMVB responses.
1016
+ This changes the previous behavior where a new configuration would be
1017
+ retrieved _immediately_ upon a not-my-vbucket reply if a configuration
1018
+ was not included within the error reply itself. The new behavior is to
1019
+ request a delayed retry (i.e. subject to the default throttle settings)
1020
+ if the current configuration originated from the CCCP (Memcached) provider.
1021
+ * Priority: Major
1022
+ * Issues: [CCBC-681](https://issues.couchbase.com/browse/CCBC-681)
1023
+
1024
+ * Rename `LCB_CLIENT_ETMPFAIL` to `LCB_CLIENT_ENOCONF`.
1025
+ This error code is returned only when there is no current client configuration.
1026
+ This error condition is _not_ temporary and is actually fatal; a result of
1027
+ an initial bootstrapping failure. Note that the older name is still valid
1028
+ in older code for compatibility purposes.
1029
+ * Priority: Minor
1030
+ * Issues: [CCBC-679](https://issues.couchbase.com/browse/CCBC-679)
1031
+
1032
+ * Include PID in log messages on OS X.
1033
+ This makes the library logs (via `LCB_LOGLEVEL` etc.) easier to read on a
1034
+ mac. Previously this used to display only the thread ID, which was identical
1035
+ for multiple processes. Now the display reads as _pid/tid_, making it easier
1036
+ to read the logs in a multi-process environment.
1037
+ * Priority: Minor
1038
+ * Issues: [CCBC-677](https://issues.couchbase.com/browse/CCBC-677)
1039
+
1040
+
1041
+ ## 2.5.6 (February 18 2016)
1042
+
1043
+ * Sub-Document API (_experimental_)
1044
+ The client-side sub-document API has been implemented. Sub-document is
1045
+ a feature which vastly reduces network usage when operating on parts
1046
+ of documents.
1047
+ The API as it appears in this version is highly experimental and may
1048
+ (and likely will) change. Examples of use can be found in the `examples/subdoc`
1049
+ directory.
1050
+ * Priority: Major
1051
+
1052
+ * Make `lcb_sched_enter` and `lcb_sched_leave` optional.
1053
+ When scheduling an operation (e.g. `lcb_get3()`), the scheduling function
1054
+ will implicitly create a scheduling context and submit the operation if
1055
+ none exists already. A scheduling context is explicitly created by calling
1056
+ `lcb_sched_enter()` and finished by calling `lcb_sched_leave()` or
1057
+ `lcb_sched_fail()`.
1058
+ * Issues: [CCBC-664](https://issues.couchbase.com/browse/CCBC-664)
1059
+ * Priority: Major
1060
+
1061
+ * API3 is now stable.
1062
+ The scheduling based API, introduced in version 2.4.0 and known as 'api3',
1063
+ is now stable and considered the API for use with the library.
1064
+ The previous API (i.e. 'api2') is considered deprecated.
1065
+
1066
+ While API3 has been promoted to stable in this version, it has been available
1067
+ in its current form (and in a mostly compatible manner, _except_ the implicit
1068
+ scheduling feature - CCBC-664) since 2.4.0.
1069
+
1070
+ Storing an item in API2:
1071
+
1072
+ lcb_get_store_t cmd = { 0 }, *cmd_p = &cmd;
1073
+ cmd.v.v0.key = "key";
1074
+ cmd.v.v0.nkey = 3;
1075
+ cmd.v.v0.bytes = "value";
1076
+ cmd.v.v0.nbytes = 5;
1077
+ cmd.v.v0.operation = LCB_SET;
1078
+ lcb_store(instance, NULL, 1, &cmd_p);
1079
+
1080
+ Storing an item in API3:
1081
+
1082
+ lcb_CMDSTORE cmd = { 0 };
1083
+ LCB_CMD_SET_KEY(&cmd, "key", 3);
1084
+ LCB_CMD_SET_VALUE(&cmd, "value", 5);
1085
+ cmd.operation - LCB_SET;
1086
+ lcb_store3(instance, NULL, &cmd);
1087
+
1088
+
1089
+ * Add `libcouchbase/` string to version identification to Memcached
1090
+ Connections to memcached will now be identified as `libcouchbase/version`
1091
+ rather than `version`. This increases readability for server logs
1092
+ * Issues: [CCBC-656](https://issues.couchbase.com/browse/CCBC-656)
1093
+ * Priority: Minor
1094
+
1095
+ * Hide `mutation_token` field from API3 mutation respones. The `mutation_token`
1096
+ field has never been part of the API itself (it was previously present when
1097
+ api3 was marked as "experimental").
1098
+ The mutation token for any operation must now be retrieved using the
1099
+ `lcb_resp_get_mutation_token()` to retrieve the actual mutation token.
1100
+ * Issues: [CCBC-671](https://issues.couchbase.com/browse/CCBC-671)
1101
+ * Priority: Minor
1102
+
1103
+ * Server's `PROTOCOL_BINARY_RESPONSE_EINTERNAL` is no longer mapped to
1104
+ `LCB_EINTERNAL`. `LCB_UNKNOWN_MEMCACHED_ERROR` will be returned instead
1105
+
1106
+ * Allow get-and-touch with an expiry of 0.
1107
+ Clearing a document's expiry with `get` is now possible, using the new
1108
+ `LCB_CMDGET_F_CLEAREXP` in `lcb_CMDGET::cmdflags`.
1109
+ * Issues: [CCBC-667](https://issues.couchbase.com/browse/CCBC-667)
1110
+ * Priority: Major
1111
+
1112
+ * Allow multiple buckets when using sequence number consistency with N1QL
1113
+ This uses the new internal `scan_vector` protocol supporting multiple buckets,
1114
+ each providing their own `lcb_MUTATION_TOKEN` objects.
1115
+ * Issues: [CCBC-658](https://issues.couchbase.com/browse/CCBC-658)
1116
+ * Priority: Major
1117
+
1118
+ ## 2.5.5 (January 12 2016)
1119
+
1120
+ * Add `retry_interval` string option to adjust retry interval.
1121
+ This allows the setting to be modified via `lcb_cntl_string()` and specified
1122
+ in the connection string.
1123
+ * Priority: Major
1124
+ * Issues: [CCBC-654](https://issues.couchbase.com/browse/CCBC-654)
1125
+
1126
+ * Handle backslashes in view row ID fields.
1127
+ This would previously not be handled correctly as the backslashes would not
1128
+ be removed, for example an ID of `has_a_"quote` would appear in the API as
1129
+ `has_a_\"quote`. This has been fixed and document IDs are now properly
1130
+ processed as JSON
1131
+ * Priority: Major
1132
+ * Issues: [CCBC-649](https://issues.couchbase.com/browse/CCBC-649)
1133
+
1134
+ * Allow 'file-only' configuration mode.
1135
+ This allows applications to make the library instance exclusively configured
1136
+ from a file on the local filesystem rather than through network bootstrap.
1137
+ This feature is undocumented and unsupported. It may be enabled using the
1138
+ `bootstrap_on=file_only` connection string directive.
1139
+ * Priority: Major
1140
+ * Issues: [CCBC-652](https://issues.couchbase.com/browse/CCBC-652)
1141
+
1142
+ * Log when squashing network errors.
1143
+ This will make the library log the original error whenever a network error
1144
+ is translated from a more detailed description into `LCB_NETWORK_ERROR`
1145
+ (in case `detailed_errcodes` is not enabled), or if an OS-level error is
1146
+ found which cannot be translated into a more specific library error.
1147
+ * Priority: Major
1148
+
1149
+ * Fix memcached/ketama hashing
1150
+ This fixes a bug in the ketama hasing code which caused a key to be mapped
1151
+ to an effectively arbitrary server for the library instance. In practice the
1152
+ node a key was mapped to depended on the order in which the hosts were
1153
+ specified in the connection string. This has been fixed to always use
1154
+ hashing based on the lexical sort order of each server node.
1155
+ It is highly recommended that applications upgrade to this version (2.5.5)
1156
+ for proper memcached (cache) bucket functionality.
1157
+ * Priority: Critical
1158
+ * Issues: [CCBC-653](https://issues.couchbase.com/browse/CCBC-653)
1159
+
1160
+ * Add `cbc-touch` subcommand.
1161
+ This now allows the simple "touching", or modifying expiration time via the
1162
+ `cbc` command line client.
1163
+ * Priority: Major
1164
+ * Issues: [CCBC-651](https://issues.couchbase.com/browse/CCBC-651)
1165
+
1166
+
1167
+ ## 2.5.4 (November 25 2015)
1168
+
1169
+ * Validate vBucket master nodes for bounds when receiving new configuration.
1170
+ This ensures that invalid configurations (addressing nodes which do not
1171
+ exist) do not make their way to KV routing operations.
1172
+ * Priority: Major
1173
+ * Issues: [CCBC-643](https://issues.couchbase.com/browse/CCBC-643)
1174
+
1175
+ * Add `lcb_strcbtype` to print the name of the callback type
1176
+ This small convenience function is added to pretty-print the type
1177
+ of callback being invoked. The second argument to the callback can be passed
1178
+ to this function.
1179
+ * Priority: Minor
1180
+
1181
+ * Disallow using `certpath` connection string option without explicit SSL
1182
+ (`couchbases://`) scheme. Since the SSL and non-SSL schemes are similar,
1183
+ a typo can let a user mistakenly think that SSL is being used. This is
1184
+ fixed by disallowing the other SSL option (`certpath`) when SSL is not
1185
+ enabled.
1186
+ * Priority: Minor
1187
+ * Issues: [CCBC-644](https://issues.couchbase.com/browse/CCBC-644)
1188
+
1189
+ * Add convenience function to retrieve hostname for key.
1190
+ This is an alternative to retrieving the vBucket configuration (via `lcb_cntl()`)
1191
+ and mapping the key to an index, and mapping the index to a node. Note that
1192
+ hostnames are sufficient for most but not all configurations. Those running
1193
+ multiple server instances on the same host (for example, `cluster_run`) will
1194
+ still need to use the full set of steps as this function does not return a
1195
+ port. This function is provided both as a vBucket API (`lcbvb_get_hostname()`)
1196
+ which retrieves the hostname for an index as well as a top-level instance
1197
+ (`lcb_t`) function (`lcb_get_keynode()`) which accepts a key buffer and length.
1198
+ * Priority: Minor
1199
+
1200
+ * Ensure embedded jsoncpp does not throw exceptions.
1201
+ This caused some build issues with other build systems. This has been fixed
1202
+ by replacing any exception throwing code with `abort()` and `assert()`
1203
+ statements.
1204
+ * Priority: Minor
1205
+ * Issues: [CCBC-634](https://issues.couchbase.com/browse/CCBC-634)
1206
+
1207
+ * Log vBucket configuration parsing failures.
1208
+ This logs vBucket configuration parsing failures when a given config received
1209
+ could not be parsed. Parsing failures include both JSON syntax errors as well
1210
+ as improper fields or values within the config itself.
1211
+ * Priority: Major
1212
+ * Issues: [CCBC-647](https://issues.couchbase.com/browse/CCBC-647)
1213
+
1214
+ * Allow per-request N1QL timeouts to exceed global timeouts.
1215
+ This scans the `"timeout"` property of the N1QL request and if set, will
1216
+ make the value of this property the timeout value for the request. A small
1217
+ parser was implemented which converted the N1QL timeout values (`s`, `h`, etc.)
1218
+ into microseconds.
1219
+ * Priority: Major
1220
+ * Issues: [CCBC-660](https://issues.couchbase.com/browse/CCBC-660)
1221
+
1222
+ * Request configuration refresh when HTTP API redirects are received.
1223
+ Redirects in Couchbase Server are sent when a node is about to exit the
1224
+ cluster. We should take this as a sign to refresh the config since it indicates
1225
+ a node is about to be removed.
1226
+ * Priority: Major
1227
+ * Issues: [CCBC-646](https://issues.couchbase.com/browse/CCBC-646)
1228
+
1229
+
1230
+ ## 2.5.3 (August 27 2015)
1231
+
1232
+ * Add N1QL timeout feature.
1233
+ This allows an independent timeout setting for N1QL. Previously this would
1234
+ use the views timeout.
1235
+ * Priority: Major
1236
+ * Issues: [CCBC-631](https://issues.couchbase.com/browse/CCBC-631)
1237
+
1238
+ * Add N1QL prepared statements.
1239
+ This allows prepared statements to be used with N1QL. The library will
1240
+ maintain an internal "prepared statement cache" which contains cached
1241
+ responses for internal PREPARE requests. To use a prepared statement, an
1242
+ application can simply set the `LCB_CMDN1QL_F_PREPCACHE` bit in the
1243
+ `cmdflags` field within the `lcb_CMDN1QL` structure. All the rest is
1244
+ handled internally within the library.
1245
+ * Priority: Major
1246
+ * Issues: [CCBC-633](https://issues.couchbase.com/browse/CCBC-633)
1247
+
1248
+ ## 2.5.2 (July 23 2015)
1249
+
1250
+ * Fix off-by-one error when populating documents with pillowfight.
1251
+ Previously pillowfight would only populate N-1 documents where N
1252
+ is the (`-I`, `--num-items`) option. This has been fixed.
1253
+ * Priority: Minor
1254
+
1255
+ * Don't generate negative keys for pillowfight.
1256
+ For certain option configurations, pillowfight would generate negative keys
1257
+ (some keys were in the format of -nnnnnn).
1258
+ * Priority: Minor
1259
+
1260
+ * Allow in-progress N1QL requests to be cancelled.
1261
+ This allows in-progress N1QL requests to be cancelled by adding a new API,
1262
+ `lcb_n1ql_cancel()`. Invoking this function on an `lcb_N1QLHANDLE` handle
1263
+ (obtained via an _out_ parameter in the command structure) will effectively
1264
+ stop the request and stop delivering callbacks to the user.
1265
+ * Priority: Major
1266
+ * Issues: [CCBC-619](https://issues.couchbase.com/browse/CCBC-619)
1267
+
1268
+ * Rename `lcb_SYNCTOKEN` to `lcb_MUTATION_TOKEN`.
1269
+ This experimental (volatile) API has been renamed to "Mutation Token" to
1270
+ better reflect naming conventions found in other client libraries.
1271
+ * Priority: Minor
1272
+
1273
+ * Implement histogram/timings information for N1QL queries via `cbc-n1qlback`.
1274
+ This adds support for the (`-T`, `--timings`) option in the
1275
+ `cbc-n1qlback` benchmark/stress-test utility. These timings reflect the
1276
+ latency between issuing the query and the receipt of the first row of the
1277
+ resultset.
1278
+ * Priority: Major
1279
+ * Issues: [CCBC-624](https://issues.couchbase.com/browse/CCBC-624)
1280
+
1281
+ * Add (`-M`, `--mode`) option to `cbc-create` to allow for upsert, insert, etc.
1282
+ This allows `cbc-create` to use the full gamut of storage options available
1283
+ via the SDK by allowing an insert/upsert/replace mode as an argument to the
1284
+ new `--mode` option. `append` and `prepend` are now also provided as options,
1285
+ though not documented.
1286
+ * Priority: Major
1287
+ * Issues: [CCBC-625](https://issues.couchbase.com/browse/CCBC-625)
1288
+
1289
+ * Support `CBC_CONFIG` environment variable for command line tools.
1290
+ This variable specifies a path to an alternate `cbcrc` file which may be
1291
+ used to provide cluster/bucket settings. This new option allows multiple
1292
+ configurations to coexist, without forcing any one of them to be inside the
1293
+ user's home directory.
1294
+ * Priority: Minor
1295
+ * Issues: [CCBC-626](https://issues.couchbase.com/browse/CCBC-626)
1296
+
1297
+
1298
+ ## 2.5.1 (June 17 2015)
1299
+
1300
+ Bug fixes and improvements in 2.5.1
1301
+
1302
+ * Fix hanging in durability operations if node is not present and constraints
1303
+ include failed node. This condition may be triggered when only a single node
1304
+ remains in the broadcast probe and a command sent to it could not be scheduled.
1305
+ A symptom of this bug was durability operations 'hanging'
1306
+ * Priority: Major
1307
+ * Issues: [CCBC-607](http://issues.couchbase.com/browse/CCBC-607)
1308
+
1309
+ * Improved handling of topology changes when non-data (N1QL, Index) nodes are
1310
+ part of the cluster. This fixes some issues (mainly crashes) when non-data
1311
+ nodes are found inside the cluster during a topology change. While the library
1312
+ since version 2.4.8 was able to handle initial bootstrapping with non-data
1313
+ nodes, it would still crash when such nodes were encountered during
1314
+ configuration changes.
1315
+ * Priority: Major
1316
+ * Issues: [CCBC-609](http://issues.couchbase.com/browse/CCBC-609),
1317
+ [CCBC-612](http://issues.couchbase.com/browse/CCBC-612)
1318
+
1319
+ * Improved random host selection algorithm for REST services
1320
+ This new algorithm ensures that the distribution is even among all _eligible_
1321
+ nodes for a given service. The old algorithm would only distribute evenly when
1322
+ the assumption that all nodes contained the same services were true. However
1323
+ this assumption is no longer necessarily true with Couchbase 4.0. In this case
1324
+ the algorithm ensures that the random selection inspects only the pool of
1325
+ nodes which are known to have a given service enabled.
1326
+ * Priority: Major
1327
+ * Issues: [CCBC-611](http://issues.couchbase.com/browse/CCBC-611)
1328
+
1329
+ * Ensure ketama/Memcached-bucket hashing works correctly when non-data nodes
1330
+ are part of the cluster. In previous versions, ketama hashing would incorrectly
1331
+ consider all nodes as candidates for keys, which would result in some items
1332
+ being routed to non-data nodes, resulting in odd errors and inaccessible
1333
+ data. This is only an issue for the still-unreleased Couchbase 4.0.
1334
+ * Priority: Major
1335
+ * Issues: [CCBC-613](http://issues.couchbase.com/browse/CCBC-613)
1336
+
1337
+ * Set `TCP_NODELAY` as a server side option, if it's enabled on the client.
1338
+ This uses the `HELLO` protocol functionality to enable this feature, if
1339
+ this feature is also enabled on the client (enabled by default).
1340
+
1341
+
1342
+ New features in 2.5.1
1343
+
1344
+ * Add `cmake/configure` option for enabling the embedding of the libevent
1345
+ plugin. This option, named `--enable-embedded-libevent-plugin`, will cause
1346
+ the plugin to be linked in with the core library (_libcouchbase_) rather
1347
+ than built as its own object
1348
+ * Priority: Minor
1349
+
1350
+ * Add new combined "Store-with-durability" operation. This new API, called
1351
+ `lcb_storedur3()` allows specifying the storage input options as well as
1352
+ the associated durability options in a single command. Likewise, the status
1353
+ of the operation (including durability) is returned in the operation's
1354
+ callback.
1355
+ * Priority: Major
1356
+ * Issues: [CCBC-616](http://issues.couchbase.com/browse/CCBC-616)
1357
+
1358
+
1359
+ ## 2.5.0 (May 12 2015)
1360
+
1361
+ This change in the major version number signals the addition of new features
1362
+ for Couchbase Server 4.0; most of the actual new functionality for Couchbase
1363
+ 4.0 has already been included (incrementally) in prior 2.4.x versions. The
1364
+ new 2.5 version is built on the 2.4.x codebase.
1365
+
1366
+ * Add `cbc-n1qlback` - a simple benchmark for N1QL queries. This functions
1367
+ by executing a line-delimited file containing query bodies using multiple
1368
+ threads if possible.
1369
+ * Priority: Major
1370
+ * Issues: [CCBC-604](http://issues.couchbase.com/browse/CCBC-604)
1371
+
1372
+ * `TCP_NODELAY` functionality has now been placed into effect. This
1373
+ functionality was nominally present in prior versions, but would not work
1374
+ because of a typo.
1375
+ * Priority: Minor
1376
+
1377
+ * Add 'tick' or 'pump' mode for I/O
1378
+ As an alternative to `lcb_wait()`, applications may call `lcb_tick_nowait()`
1379
+ to incrementally perform (non-blocking) I/O. This may provide a performance
1380
+ boost when batching/scheduling many operations. `lcb_wait()` itself must be
1381
+ called to guarantee completion of all operations, and the `lcb_tick_nowait()`
1382
+ functionality is only available on some I/O plugins. See the API docs for
1383
+ more information.
1384
+ * Priority: Major
1385
+ * Issues: [CCBC-598](http://issues.couchbase.com/browse/CCBC-598)
1386
+
1387
+ * Allow "console logger" to log to a file
1388
+ As a convenience, it is now possible to direct the library to write to
1389
+ a log file rather than standard error. This is possible using the
1390
+ `LCB_CNTL_CONLOGGER_FP` (to programmatically set a `FILE*` value via
1391
+ `lcb_cntl()`) or `console_log_file` to set the path of the file (which
1392
+ will be overwritten) via `lcb_cntl_string()` or the connection string.
1393
+
1394
+ * Make `lcb_N1QLPARAMS` repeatable/debuggable
1395
+ This allows the `lcb_n1p_mkcmd()` call to be invoked multiple times without
1396
+ actually modifying internal state. Previously calling this function twice
1397
+ would result in corruption of the internal parameter state. In this version,
1398
+ a new function, `lcb_n1p_encode()` has been added (which `lcb_n1p_mkcmd()`
1399
+ wraps) which may be used to inspect the encoded form of the query.
1400
+
1401
+ ## 2.4.9 (April 14 2015)
1402
+
1403
+ * Disable HTTP provider when any CCCP config is received.
1404
+ This makes the assumption that CCCP will always be available if even a
1405
+ single node provides an HTTP configuration. This change may break some
1406
+ corner-case upgrade scenarios from version 2.2 to 2.5 where a newly added
1407
+ 2.5 node is subsequently removed.
1408
+ * Priority: Major
1409
+ * Issues: [CCBC-526](http://issues.couchbase.com/browse/CCBC-526),
1410
+ [CCBC-589](http://issues.couchbase.com/browse/CCBC-589)
1411
+
1412
+ * Fix additional missing defines for UV's `EAI_*` symbols
1413
+ This was not entirely fixed in 2.4.8, since some undefined macros still
1414
+ remained.
1415
+ * Priority: Major
1416
+ * Issues: [CCBC-596](http://issues.couchbase.com/browse/CCBC-596)
1417
+
1418
+ * Make connection string timeout parameters (e.g. `operation_timeout`) always
1419
+ specify seconds; this will no longer require the decimal point to be used,
1420
+ but will break any prior usages of this value for microseconds.
1421
+ * Priority: Minor
1422
+ * Issues: [CCBC-597](http://issues.couchbase.com/browse/CCBC-597)
1423
+
1424
+ * Add `cbc n1ql` subcommand, which executes N1QL queries.
1425
+ This subcommand is still a bit rough around the edges, mainly because of
1426
+ server-side support for "pretty=false" (which makes the rows display rather
1427
+ weirdly).
1428
+ * Priority: Major
1429
+ * Issues: [CCBC-595](http://issues.couchbase.com/browse/CCBC-595)
1430
+
1431
+ * Allow usage of `-D` option in `cbc` and `cbc-pillowfight` tools.
1432
+ This flag allows specifying connection string options in a more
1433
+ concise form on the commandline. The `-D` option may be specified
1434
+ multiple times in the form of `-Doption=value`.
1435
+ * Priority: Minor
1436
+
1437
+ * Interpret `couchbase://host:8091` connection string as `couchbase://host`
1438
+ Previously the library would treat `8091` as a memcached port. While technically
1439
+ correct according to the connection string semantics, would often be a
1440
+ source of confusion for users migrating from older versions of the library
1441
+ (or other SDKs) when using the form `http://host:8091`. A special provision
1442
+ is thus made for such a cas.
1443
+ * Priority: Major
1444
+ * Issues: [CCBC-599](http://issues.couchbase.com/browse/CCBC-599)
1445
+
1446
+ * Implement enhanced durability using sequence numbers.
1447
+ This feature is available in Couchbase 4.0, and uses sequence numbers
1448
+ (optionally specified in the response packet of each mutation).
1449
+ sequence-based durability constraints help resolve some ambiguity in
1450
+ the case of checking the durability of items which have since been
1451
+ mutated, or in the case of a cluster failover. Using this functionality
1452
+ requires the `LCB_CNTL_FETCH_SYNCTOKENS` (or `fetch_synctokens`) and the
1453
+ `LCB_CNTL_DURABILITY_SYNCTOKENS` (or `dur_synctokens`)
1454
+ settings to be enabled (using `lcb_cntl()` or `lcb_cntl_string()`, or
1455
+ in the connection string). Enabling `LCB_CNTL_FETCH_SYNCTOKENS` will
1456
+ cause mutation response packets from the server to return an additional
1457
+ 16 bytes of sequence data, and enabling `LCB_CNTL_DURABILITY_SYNCTOKENS`
1458
+ will cause `lcb_durability_poll()` to transparently use this information
1459
+ (rather than the CAS) to check for persistence/replication.
1460
+ **Only available in Couchbase 4.0**. As a result of this feature, much
1461
+ of the durability subsystem itself has been rewritten, making durability
1462
+ overall more performant, even for CAS-based durability.
1463
+ * Priority: Major
1464
+ * Issues: [CCBC-569](http://issues.couchbase.com/browse/CCBC-569)
1465
+
1466
+ * Add `lcb_version_g` extern symbol as alternative to `lcb_get_version()`.
1467
+ This symbol is an extern global which allows simple runtime checking of
1468
+ the library version. This is more convenient than `lcb_get_version()` as
1469
+ it avoids the requirement to create a temporary variable on the stack
1470
+ (`lcb_get_version()` returns a string, and requires an `lcb_U32` pointer
1471
+ as its first argument to get the actual numeric version).
1472
+ * Priority: Minor
1473
+
1474
+
1475
+ ## 2.4.8 (Mar. 8 2015)
1476
+
1477
+ * Retry next nodes on initial bootstrap, even if first node says bucket does
1478
+ not exist (or auth error), as this might be a recently removed node
1479
+ * Priority: Major
1480
+ * Issues: [CCBC-577](http://issues.couchbase.com/browse/CCBC-577)
1481
+
1482
+ * The `cbc` and `cbc-pillowfight` binaries on Windows are now distributed
1483
+ in both _release_ and _debug_ variants. Previously they would be clobbered
1484
+ by one or the other depending on the build host. This fixes some issues in
1485
+ performance and dependency resolution when using these libraries.
1486
+ * Priority: Minor
1487
+ * Issues: [CCBC-581](http://issues.couchbase.com/browse/CCBC-581)
1488
+
1489
+ * Provide Read-Only config cache mode. In this mode the configuration cache
1490
+ file is read but never updated. Additionally, a missing file in this mode
1491
+ results in a hard error.
1492
+ * Priority: Major
1493
+ * Issues: [CCBC-584](http://issues.couchbase.com/browse/CCBC-584)
1494
+
1495
+ * Keep vBucket heuristic guesses for limited periods of time.
1496
+ This will allow previously-learned vBucket master locations to persist
1497
+ over a configuration change, providing these changes were discovered
1498
+ recently. This allows the reduction of not-my-vbucket responses while
1499
+ allowing new configs to overwrite our heuristic info, if the heuristic is
1500
+ too old.
1501
+ * Priority: Major
1502
+
1503
+ * Fix potential crashes in get-with-replica (`lcb_rget3`, `lcb_get_replica`)
1504
+ when there are no replicas available, or if there is an error in retrieving
1505
+ from one of the replicas.
1506
+ * Priority: Major
1507
+ * Issues: [CCBC-586](http://issues.couchbase.com/browse/CCBC-586)
1508
+
1509
+ * Do not wait between not-my-vbucket retries
1510
+ This behavior restores the pre 2.4.0 behavior of retrying not-my-vbucket
1511
+ responses, with a more intelligent retry/rotation algorithm (see the
1512
+ release note about "vbucket map heuristics"). Previously a wait-time
1513
+ was introduced because of potential busy loops in retrying to the same
1514
+ node. The `LCB_CNTL_RETRY_NMV_IMM` setting can be used to disable this
1515
+ functionality (by disabling it, i.e. setting it to 0). This may also be
1516
+ disabled in the connection string via `retry_nmv_imm=0`.
1517
+ * Priority: Major
1518
+ * Issues: [CCBC-588](http://issues.couchbase.com/browse/CCBC-588)
1519
+
1520
+ * Fix compilation error with UV when `EAI_BADHINTS` is not defined in the
1521
+ system. This is primarily an issue with newer UV versions and some versions
1522
+ of Linux
1523
+ * Priority: Major
1524
+ * Issues: [CCBC-590](http://issues.couchbase.com/browse/CCBC-590)
1525
+
1526
+ * Allow means to disable C++ behavior on public library structures, allowing
1527
+ them to be initialized via C-style static initializers.
1528
+ This allows the zeroing of structures such as `lcb_get_cmd_t cmd = { 0 }`,
1529
+ which would ordinarily fail under C++ compilation because of that structure
1530
+ having a defined C++ constructor. Applications can take advantage of this
1531
+ feature by defining the `LCB_NO_DEPR_CXX_CTORS` preprocessor macro when
1532
+ compiling.
1533
+ * Priority: Major
1534
+ * Issues: [CCBC-591](http://issues.couchbase.com/browse/CCBC-591)
1535
+
1536
+ * Fix some bugs in timing behavior (`lcb_enable_timings`). Timings between
1537
+ 1000-2000ms are now reported accurately. Additionally for more common
1538
+ handling, second timing ranges (between 1-9s) are reported in ms range
1539
+ (i.e. timings of 4 seconds are reported as 3000-4000ms ).
1540
+ * Priority: Minor
1541
+ * Issues: [CCBC-582](http://issues.couchbase.com/browse/CCBC-582)
1542
+
1543
+
1544
+ ## 2.4.7 (Feb. 17 2015)
1545
+
1546
+ * Fix SSL connection failures with `SSL_UNDEFINED_CONST_FUNCTION`.
1547
+ This would sometimes cause failures during early connection/negotiation
1548
+ stages.
1549
+ * Priority: Major
1550
+ * Issues: [CCBC-571](http://issues.couchbase.com/browse/CCBC-571)
1551
+
1552
+ * Add _experimental_ support for N1QL queries.
1553
+ This adds support for contacting N1QL endpoints and retrieving their
1554
+ result sets. The support at both the client and server components is
1555
+ still a work in progress.
1556
+ The API is similar to the view api (see `lcb_view_query()`) added in
1557
+ version 2.4.6. See details in `<libcouchbase/n1ql.h>`
1558
+ * Priority: Major
1559
+ * Issues: [CCBC-572](http://issues.couchbase.com/browse/CCBC-572)
1560
+
1561
+ * Add _experimental_ support for geospatial view queries.
1562
+ GeoSpatial views are available as an experimental feature in the
1563
+ current releases of the server. This will soon be offered as a
1564
+ stable feature in future releases.
1565
+ Applications may now use the `lcb_RESPVIEWQUERY::geometry` field
1566
+ and the `LCB_CMDVIEWQUERY_F_SPATIAL` to utilize geospatial views.
1567
+ * Priority: Major
1568
+ * Issues: [CCBC-573](http://issues.couchbase.com/browse/CCBC-573)
1569
+
1570
+ * Fix memory leak for retried commands.
1571
+ In cases where a given command needs to be retried more than once, a
1572
+ memory leak was fixed in which the previous instance of the pacekt was
1573
+ not properly freed.
1574
+ * Priority: Major
1575
+ * Issues: [CCBC-574](http://issues.couchbase.com/browse/CCBC-574)
1576
+
1577
+ ## 2.4.6 (January 20 2015)
1578
+
1579
+ * Fix floating point exception on OS X.
1580
+ A floating point exception would sometimes be thrown on OS X sytems due
1581
+ to bad time structure initialization. The installation provided with
1582
+ homebrew for 2.4.5 fixed this issue. This is completely fixed in 2.4.6
1583
+ Priority: Major
1584
+
1585
+ * Improve warning messages when using deprecated options in `cbc`.
1586
+ This provides less ambiguous help messages when using deprecated options,
1587
+ showing a full and complete example for proper usage (when possible).
1588
+ * Priority: Minor
1589
+ * Issues: [CCBC-562](http://issues.couchbase.com/browse/CCBC-562)
1590
+
1591
+ * Add patch/micro version to DLL information on Windows.
1592
+ This lets the user see the exact version of the library on windows (via
1593
+ right clicking on the DLL and inspecting the details). Previously this
1594
+ information contained only the major and minor versions.
1595
+ * Priority: Minor
1596
+ * Issues: [CCBC-563](http://issues.couchbase.com/browse/CCBC-563)
1597
+
1598
+ * Provide _pkgconfig_ (`.pc`) file with installation.
1599
+ This may help third party applications and libraries link against libcouchbase
1600
+ in some environments.
1601
+
1602
+ * Provide one-off `unsafe_optimize` option for connection string/`lcb_cntl`.
1603
+ This provides a shorter way to enable some potentially unsafe optimizations
1604
+ which may make the client perform better in some scenarios.
1605
+ * Priority: Minor
1606
+
1607
+ * Allow prompting for password in `cbc`.
1608
+ The `cbc` and `cbc-pillowfight` utilities will now securely prompt for the
1609
+ password if the password specified on the commandline is a hyphen (`-`).
1610
+ * Priority: Minor
1611
+ * Issues: [CCBC-565](http://issues.couchbase.com/browse/CCBC-565)
1612
+
1613
+ * Fix timeouts in some durability when not all replicas are online.
1614
+ The library will now fail the operation with `LCB_DURABILITY_ETOOMANY`
1615
+ rather than allowing the operation to timeout.
1616
+ * Priority: Major
1617
+ * Issues: [CCBC-560](http://issues.couchbase.com/browse/CCBC-560)
1618
+
1619
+ * Add high level row-based view functionality.
1620
+ This adds a new API (currently considered _volatile_) which allows
1621
+ intelligently querying views. This builds atop the basic HTTP
1622
+ interface, and exposes a row-based callback API based upon
1623
+ streaming JSON parsing. The new API is defined in `<libcouchbase/views.h>`.
1624
+ This API will become more stable over time.
1625
+ * Priority: Major
1626
+ * Issues: [CCBC-100](http://issues.couchbase.com/browse/CCBC-100)
1627
+
1628
+ * Parse configuration service locations for experimental services
1629
+ This exposes the N1QL and indexing services via the _lcbvb_ API. See
1630
+ `libcouchbase/vbucket.h` for more information.
1631
+
1632
+ ## 2.4.5 (December 17 2014)
1633
+
1634
+ * Fix `pillowfight` ignoring `set-ratio` values above 50
1635
+ The program would ignore these values and act as if 100 was specified,
1636
+ thus never issuing any GET operations
1637
+ * Priority: Minor
1638
+ * Issues: [CCBC-550](http://couchbase.com/issues/browse/CCBC-550)
1639
+
1640
+ * Building with autotools is no longer supported.
1641
+ If building the library from source, you _must_ use
1642
+ [CMake](http://cmake.org/download) version 2.8.9 or greater. If unfamiliar
1643
+ with CMake, the README describes the process. Included also is a top-level
1644
+ script called `configure.pl` which functions with an autoconf-like interface.
1645
+ * Priority: Major
1646
+
1647
+ * Fix customized IOPS crashes in some usage cases
1648
+ This fixes scenarios where applications assume that the built-in IOPS version
1649
+ is 0, and attempt to "Subclass" the IOPS structure. The internal version of
1650
+ the library structure is now 3, with some extra heuristics in place to ensure
1651
+ that the older code will still function.
1652
+ This issue was most visible in the Python SDK when using the gevent or Twisted
1653
+ plugins.
1654
+ This issue was first introduced with version 2.4.4
1655
+ * Priority: Critical
1656
+ * Issues: [CCBC-557](http://couchbase.com/issues/browse/CCBC-557)
1657
+
1658
+ * Allow raw `certpath` to be passed without need for percent-encoding (in most cases)
1659
+ This allows for a common pattern fo passing `certpath` in the connection string as
1660
+ a raw, unencoded path. This allows a user to do
1661
+ `couchbases://host/bucket?certpath=/foo/bar/baz`.
1662
+
1663
+ * Fix missing installation UV plugin headers and source
1664
+ In 2.4.4 this was accidentally left out, and would only be installed if the plugin
1665
+ itself was built and installed. This affected building the Node.JS SDK using an
1666
+ existing libcouchbase install.
1667
+ * Priority: Major
1668
+ * Issues: [CCBC-558](http://couchbase.com/issues/browse/CCBC-558)
1669
+
1670
+ ## 2.4.4 (Nov. 19 2014)
1671
+
1672
+ * Detect disconnected pooled sockets
1673
+ This allows the connection pool to detect dead sockets which were closed
1674
+ by a server when they were idle. Sometimes servers will close connections
1675
+ to open idle sockets to save resources, or because of bugs in their
1676
+ implementations.
1677
+ This will fix some issues experienced with views where queries would
1678
+ randomly fail with `LCB_NETWORK_ERROR` or `LCB_ESOCKSHUTDOWN`, by first
1679
+ checking if the socket is alive before returning it back to the library's
1680
+ core.
1681
+ Note that the `libuv` plugin does not implement this functionality yet.
1682
+ * Priority: Critical
1683
+ * Issues: [CCBC-546](http://couchbase.com/issues/browse/CCBC-546)
1684
+
1685
+ * Fix _pillowfight_ `--min-size` bug
1686
+ This fixes a bug where pillowfight would sometimes compare the `min-size`
1687
+ option to an uninitialized `max-size` option and round it down to that
1688
+ value; then would set the `max-size` option.
1689
+ * Priority: Major
1690
+ * Issues: [CCBC-542](http://couchbase.com/issues/browse/CCBC-542)
1691
+
1692
+ * Don't ignore `LCB_CNTL_DURABILITY_INTERVAL`
1693
+ Fix a bug where this interval would be ignored, if modified by the user; always
1694
+ reverting to 100ms.
1695
+ * Priority: Major
1696
+ * Issues: [CCBC-543](http://couchbase.com/issues/browse/CCBC-543)
1697
+
1698
+ * Fix memory leak with HTTP requests using a request body
1699
+ Requests (such as `PUT`, `POST`, etc) which contained a request body
1700
+ would cause a memory leak as the library forgot to free them when the
1701
+ request object was destroyed.
1702
+ * Priority: Major
1703
+ * Issues: [CCBC-538](http://couchbase.com/issues/browse/CCBC-538)
1704
+
1705
+ * Fix errneous `LCB_SUCCESS` return when passed duplicate keys to
1706
+ `lcb_durability_poll()`. This would cause applications to mistakenly wait
1707
+ for a callback to arrive, when in fact the command had failed.
1708
+ * Priority: Major
1709
+ * Issues: [CCBC-536](http://couchbase.com/issues/browse/CCBC-535)
1710
+
1711
+ * Add option to preserve vbucket ownership heuristics across config updates
1712
+ This allows the learned configuration settings to persist between configuration
1713
+ updates. The default behavior (up to, and including this change) is to
1714
+ discard any "learned" configuration in favor of the explicitly new config
1715
+ passed to the server. This new option allows this information to be persisted
1716
+ when a new configuration update is received. This behavior is considered
1717
+ experimental, and is primarily intended to reduce the time it takes for the
1718
+ client to relearn the current node (which is typically under 1-2 seconds).
1719
+ * Priority: Minor
1720
+ * Issues: [CCBC-530](http://couchbase.com/issues/browse/CCBC-530)
1721
+
1722
+ * Relocate memcached packets on topology changes for memcached buckets
1723
+ This enhances the behavior of the client when operating with a memcached
1724
+ bucket during a topology change. Previously the library would not relocate
1725
+ packets to new servers, resulting in errors for items which were now
1726
+ mapped to wrong nodes. The new behavior remaps the key to the new server
1727
+ using the updated ketama hashing. Note that as a current restriction, the
1728
+ remapping will be performed based on the key of the item, not any `hashkey`
1729
+ parameter being employed.
1730
+ * Priority: Major
1731
+ * Issues: [CCBC-331](http://couchbase.com/issues/browse/CCBC-331)
1732
+
1733
+ * Return error if ignored/conflicting options are found
1734
+ This changes the behavior of the library to throw an error if a specific
1735
+ option field was filled in which did not make sense for a given command, for
1736
+ example, specifying a `cas` value using a `LCB_ADD` operation with `lcb_store`.
1737
+ * Priority: Major
1738
+ * Issues: [CCBC-529](http://couchbase.com/issues/browse/CCBC-529)
1739
+
1740
+ * Fix issue when sending out large _OBSERVE_ command.
1741
+ This would cause a partial command to be sent out if the size of the output
1742
+ packet was greater than 512 bytes. This has been fixed by dynamically growing
1743
+ the output buffer for _OBSERVE_
1744
+ * Priority: Minor
1745
+ * Issues: [CCBC-528](http://couchbase.com/issues/browse/CCBC-528)
1746
+
1747
+ * Fix spurious timeouts when using `lcb_durability_poll`
1748
+ This fixes an issue where sometimes the durability poll operation would
1749
+ prematurely time out.
1750
+ * Priority: Major
1751
+ * Issues: [CCBC-527](http://couchbase.com/issues/browse/CCBC-527)
1752
+
1753
+ ## 2.4.3 (Oct. 21 2014)
1754
+
1755
+ * Disable support for SSLv3
1756
+ This works around the _POODLE_ SSLv3 vulnerability by disabling support for
1757
+ anything below TLSv1.
1758
+
1759
+ * Priority: Critical
1760
+ * Issues: [CCBC-523](http://couchbase.com/issues/browse/CCBC-523)
1761
+
1762
+ * Pillowfight enhancements
1763
+ Several behavior changes were made to pillowfight in this version. These are:
1764
+ * The `-l` or `-c -1` option is in effect by default. This means that by
1765
+ default `pillowfight` will run an infinite number of cycles. The previous
1766
+ behavior was to default to a single cycle, requiring an explicit `--loop`
1767
+ to ensure the workload ran for a considerable amount of time.
1768
+
1769
+ * When multiple threads are used, the workload is divided among the threads,
1770
+ thus making it that each thread only operates on a subset of the data.
1771
+
1772
+ * A `--sequential` option has been added to allow the workload to operate
1773
+ in _sequence_ on the total number of items. This is useful when wishing to
1774
+ load a bucket with many items.
1775
+
1776
+ * A `--start-at` option has been added to allow the workload to specify an
1777
+ alternate range of keys; effectively allowing resumption of a previous
1778
+ run. The `--start-at` flag allows to specify the lower bound number which
1779
+ will be used to generate keys. Thus a `--num-items=20000` and a
1780
+ `--start-at=10000` will generate keys from 10000 through 30000.
1781
+
1782
+ * The _population_ phase has now been merged with the general workload
1783
+ implementation. This means that all worker threads will participate in
1784
+ the population phase. The previous behavior limited the populate phase to
1785
+ a single thread.
1786
+
1787
+ * If `stdout` is detected to be a terminal, a simple "OPS/SEC" meter will
1788
+ periodically write the estimated throughput to the screen.
1789
+
1790
+ * Fix memory leak when using large read buffers
1791
+ In the case where large read buffers are used (and the `iovec` elements
1792
+ becomes sizable, the library may end up incorrectly caching some memory
1793
+ blocks for future use. This fix makes the blocks be cached at the allocator
1794
+ level, so that they are properly (re) utilized.
1795
+
1796
+ * Priority: Major
1797
+ * Issues: [CCBC-519](http://couchbase.com/issue/browse/CCBC-519)
1798
+
1799
+ * Use forward map (and other heuristics) to get a next node for an item after
1800
+ a not-my-vbucket reply. Since the server (see bug attached) does not always
1801
+ guarantee that a given config is the most _correct_, the client must do some
1802
+ guesswork in order to properly map a node when it gets a not-my-vbucket;
1803
+ especially if the config says that the node is the correct one.
1804
+
1805
+ * Priority: Major
1806
+ * Issues: [MB-12268](http://couchbase.com/issues/browse/MB-12268)
1807
+
1808
+ ## 2.4.2 (Sep. 23 2014)
1809
+
1810
+ * Mark the `hashkey` fields as being _volatile_.
1811
+ Usage of this field is not supported in many cluster systems and is thus not
1812
+ supported functionality. It exists primarily as a legacy from an older API
1813
+ * Priority: Major
1814
+ * Issues: [CCBC-508](http://couchbase.com/issues/browse/CCBC-508)
1815
+
1816
+ * Add "key stats" mode to `lcb_CMDDSTATS`.
1817
+ This adds an additional key stats mode to the `lcb_stats3()` API
1818
+ which interprets the `key` field as being a document ID for which
1819
+ information (such as expiry, status) should be retrieved, rather
1820
+ than a system statistics key. Similar functionality already exists
1821
+ in the Java client library as `getKeyStats()`. In addition to this
1822
+ feature, a `cbc stats --keystats` option is also provided to employ
1823
+ this functionality from the command line.
1824
+ * Priority: Major
1825
+ * Issues: [CCBC-318](http://issues.couchbase.com/browse/CCBC-318)
1826
+
1827
+ * Add more details about replica nodes in the `cbc hash` command.
1828
+ * Priority: Minor
1829
+ * Issues: [CCBC-504](http://couchbase.com/issues/browse/CCBC-504)
1830
+
1831
+ * Add `lcb_cntl()` setting to retrieve bucket name.
1832
+ Previously the library did not have a means by which the bucket name
1833
+ could be retrieved. Using the `LCB_CNTL_BUCKETNAME` setting, the bucket
1834
+ name will now be returned.
1835
+ * Priority: Major
1836
+ * Issues: [CCBC-502](http://issues.couchbase.com/browse/CCBC-502)
1837
+
1838
+ ## 2.4.1
1839
+
1840
+
1841
+ * Implement `mcflush` subcommand for `cbc`. This was removed in the cbc
1842
+ rewrite as the previous `flush` command.
1843
+ * Priority: Minor
1844
+ * Issues: [CCBC-486](http://couchbase.com/issues/browse/CCBC-486)
1845
+
1846
+
1847
+ * Requests issued to an invalid replica via `lcb_get_replica()` should fail
1848
+ with the `LCB_NO_MATCHING_SERVER_CODE`. Previously this sometimes went
1849
+ through due to an incorrect bounds checking in the `lcbvb_vbreplica()`
1850
+ function.
1851
+ * Priority: Major
1852
+ * Issues: [CCBC-488](http://couchbase.com/issues/browse/CCBC-488)
1853
+
1854
+
1855
+ * Fixed a memory leak in `lcb_get_replica()` when the operation would fail.
1856
+ * Priority: Major
1857
+ * Issues: [CCBC-489](http://couchbase.com/issues/browse/CCBC-489)
1858
+ [CCBC-490](http://couchbase.com/issues/browse/CCBC-490)
1859
+
1860
+
1861
+
1862
+ * Fix memory leak in `lcb_sched_fail()` when extended commands are in the
1863
+ pipeline
1864
+ * Priority: Major
1865
+ * Issues: [CCBC-474](http://couchbase.com/issues/browse/CCBC-474)
1866
+
1867
+
1868
+
1869
+ * Provide `lcb_dump()` function call to dump state information about
1870
+ a client handle. The function call itself is currently marked as
1871
+ volatile and the output format is very much likely to change.
1872
+ * Priority: Minor
1873
+ * Issues: [CCBC-491](http://couchbase.com/issues/browse/CCBC-490)
1874
+
1875
+
1876
+ * Fix `ratio` argument in `cbc-pillowfight`. This ensures that the
1877
+ `ratio` argument will truly determine the ratio of gets to sets.
1878
+ * Priority: Minor
1879
+
1880
+ * Fix crash when HTTP request is retried. This may take place during topology
1881
+ changes
1882
+ * Priority: Major
1883
+ * Issues: [CCBC-497](http://couchbase.com/issues/browse/CCBC-497)
1884
+
1885
+ * Allow simple host-port string in connection string, giving it an implicit
1886
+ `http://` scheme. This allows easier backwards compatibility with some
1887
+ application
1888
+ * Priority: Minor
1889
+ * Issues: [CCBC-500](http://couchbase.com/issues/browse/CCBC-500)
1890
+
1891
+ * Update some SSL options to better reflect server 3.0 functionality
1892
+ The old `capath` option has been renamed to `certpath` to indicate that the
1893
+ path is not to the signing authority, but to the self-signed server certificate
1894
+ generated by the server itself. Additionally the `no_verify` option has been
1895
+ hidden.
1896
+ * Priority: Major
1897
+ * Issues: [CCBC-501](http://couchbase.com/issues/browse/CCBC-501)
1898
+
1899
+ ## 2.4.0 GA
1900
+
1901
+ * [major] Attempt to retry items that are mapped to a non-existent node in
1902
+ a degraded cluster. Rather than returning `LCB_NO_MATCHING_SERVER` the
1903
+ behavior should be to wait for the item to succeed and attempt to fetch
1904
+ a new cluster configuration.
1905
+
1906
+ In order to control how such 'orphaned' commands are handled, a new value
1907
+ has been added to the `lcb_RETRYMODEOPTS` called `LCB_RETRY_ON_MISSINGNODE`
1908
+ which dictates how commands should be rescheduled if the associated vbucket
1909
+ has no master. The default is to retry the command until it times out, but
1910
+ by setting this value to `0` (See `LCB_CNTL_RETRYMODE`) it may only be
1911
+ attempted once, causing 'fail fast' behavior in such a case.
1912
+
1913
+ * [major] Don't throttle config requests based on initial file-based config.
1914
+ This allows the client to quickly recover from a stale config cache without
1915
+ waiting for the `LCB_CNTL_CONFDELAY_THRESH` interval to elapse. Prior to this
1916
+ fix, a client would appear to "not recover" if bootstrapping from a stale cache.
1917
+ In reality the client would eventually recover but was waiting for the delay
1918
+ threshold to elapse.
1919
+
1920
+ * [major] Ignore `NOT_MY_VBUCKET` config payloads if CCCP provider is disabled.
1921
+ This allows the client to circumvent any possible bugs in the CCCP response
1922
+ payload and rely entirely on the HTTP config. It also allows 'rewriting'
1923
+ proxies like confsed to function.
1924
+
1925
+ ## 2.4.0-beta
1926
+
1927
+ * [major] Better error reporting for SSL failures.
1928
+ This adds new error codes (`LCB_SSL_ERROR`, `LCB_SSL_CANTVERIFY`)
1929
+ which are returned on initialization and verification failures
1930
+ respectively.
1931
+
1932
+ * [minor] Communication via legacy memcached servers is possible
1933
+ by using the `memcached://` scheme in the connection string.
1934
+
1935
+ * [minor] Environment variables understood by the library are now
1936
+ documented in their own section.
1937
+
1938
+ * [major] Add `lcb_get_node()` function to retrieve addresses for
1939
+ various nodes in the cluster. This deprecates the `lcb_get_host()`,
1940
+ `lcb_get_port()` and `lcb_get_server_list()` functions as they are
1941
+ constrained to only return information about the administrative API.
1942
+ The new function is configurable to return information about various
1943
+ ports.
1944
+
1945
+ * [major] The `dsn` field in the `lcb_create_st` structure has been
1946
+ renamed to `connstr`.
1947
+
1948
+ * [major] An HTTP request which has followed redirects will cause the
1949
+ `lcb_wait()` function to never return. This bug was introduced in
1950
+ 2.4.0-DP1 and has now been fixed.
1951
+
1952
+ * [minor] `lcb_get_server_list()` function now returns updated information
1953
+ from the current cluster configuration. Previously this would only return
1954
+ a node from the list specified during initial creation.
1955
+
1956
+ * [minor] Provide additional error classifiers. Two error classifiers have
1957
+ been added, they are:
1958
+
1959
+ * `LCB_ERRTYPE_SRVLOAD` which indicates that the server is likely under high load.
1960
+ * `LCB_ERRTYPE_SRVGEN` which indicates that the error is a direct reply from the
1961
+ server. This code can help distinguish between client and server generated
1962
+ return codes.
1963
+
1964
+ * [major] Provide HTTP keepalive and connection pooling for HTTP requests.
1965
+ This allows the client to reuse an HTTP connection for multiple requests
1966
+ rather than creating a new connection and closing it for each operation.
1967
+
1968
+ The functionality may be controlled via the `LCB_CNTL_HTTP_POOLSIZE` setting
1969
+ which limits how many open connections (per server) to maintain inside the
1970
+ client. Setting this value to `0` will disable pooling and restore old
1971
+ behavior.
1972
+
1973
+ * [major] Properly schedule next invocations for retry queue. A bug was introduced
1974
+ in 2.4.0-dp1 which would cause the next tick callback to be invoked in what is
1975
+ effectively a busy loop. This would be reflected in higher CPU load and less
1976
+ throughput during topology changes.
1977
+
1978
+ * [major] Return error if empty key is passed to an operation. Empty keys will
1979
+ cause the server to drop the connection.
1980
+ The error code returned is the newly added `LCB_EMPTY_KEY`
1981
+
1982
+ * [minor] Provide setting to disable refreshing the configuration when an HTTP
1983
+ API error is encountered (from one of the HTTP callback functions). This
1984
+ adds the `LCB_CNTL_HTTP_REFRESH_CONFIG_ON_ERROR` setting.
1985
+
1986
+ * [major] Fix bug where the CCCP provider may prematurely fail, activating the
1987
+ HTTP provider
1988
+
1989
+
1990
+ ## 2.4.0-dp1 (2014-06-18)
1991
+
1992
+
1993
+ **Changes affecting older APIs**
1994
+
1995
+ * [minor] Make `run_event_loop` and `stop_event_loop` private.
1996
+ These functions may no longer be used from within an application to
1997
+ start/stop the event loop. `lcb_wait()` and `lcb_wait3()` should be
1998
+ used instead.
1999
+
2000
+ * [major] Deprecate the `lcb_set_XXX` functions. `lcb_set_timeout`
2001
+ and some other calls have been deprecated in favor of the `lcb_cntl()`
2002
+ interface. These functions will still work but will cause the compiler
2003
+ to print a deprecation warning.
2004
+
2005
+ * [minor] `lcb_socket_t` is typedefed to a `DWORD` on windows. In
2006
+ previous versions this was an `int`.
2007
+
2008
+ * [minor] Connecting to a standalone memcached instance is currently no longer
2009
+ supported.
2010
+
2011
+ * [major] `lcb_set_error_callback()` has been deprecated. Applications should
2012
+ use the new `lcb_set_bootstrap_callback()` and/or operation callbacks
2013
+ to determine success/failure status.
2014
+
2015
+ * [major] `lcb_get_last_error()` has been deprecated. Error information is always
2016
+ returned in the operation callback
2017
+
2018
+ * [major] Disable the sending of `GETQ` packets. The format of this command
2019
+ is cumbersome to deal with and in most uses cases is actually slightly
2020
+ _less_ efficient on the network. Note that this does not change the API
2021
+ of the actual `lcb_get()` call, but simply changes the format of the
2022
+ packets sent over the wire.
2023
+
2024
+ * [major] The IOPS API has been changed. This is considered volatile interface
2025
+ and may subsequently change in the future as well.
2026
+
2027
+ **New APIs added in 2.4.0 extending existing functionality**
2028
+
2029
+ These changes extend existing features with enhanced APIs
2030
+
2031
+ * [major] Additional APIs for `lcb_cntl()`. These consist of helper functions
2032
+ to make it easier to use simple types or strings rather than pointers, if
2033
+ possible. These functions are `lcb_cntl_string()`, `lcb_cntl_setu32()` and
2034
+ `lcb_cntl_getu32()`
2035
+
2036
+ * [minor] Provide extended version of `lcb_wait()`.
2037
+ A new function called `lcb_wait3()` has been added which offers additional
2038
+ options with respect to running the event loop. Specifically it offers to
2039
+ bypass the check for pending operations which `lcb_wait()` executes. This
2040
+ is both more performant and allows us to wait for operations which are
2041
+ not explicitly scheduled.
2042
+
2043
+ * [major] Provide API to request a configuration refresh.
2044
+ Sometimes it is necessary to force the client to request a new configuration,
2045
+ for example in certain failover conditions. A new API called `lcb_config_refresh()`
2046
+ has been added, and should be used in conjunction with `lcb_wait3()`.
2047
+
2048
+ * [major] Provide bootstrapping notification callback
2049
+ This provides an explicit `lcb_set_bootstrap_callback()` to definitively
2050
+ determine whether the client has received its initial configuration (and
2051
+ thus may now start performing operations) or whether it failed (and thus
2052
+ must be reinitialized). This deprecates the common use case of
2053
+ `lcb_set_error_callback()`.
2054
+
2055
+ * [major] New vBucket interface/API. This API is used internally and exposed
2056
+ as _volatile_ inside the public header files. It provides extended features,
2057
+ a more concise API, and is compatible with the upcoming Couchbase 3.0 config
2058
+ format. Note that file-based configuration caches written by this version of
2059
+ the library are incompatible with previous versions, however this version may
2060
+ read caches generated by previous versions. This is because this version generates
2061
+ a stripped-down version of the "terse" configuration style.
2062
+
2063
+ * [major] Extended detailed error codes.
2064
+ These error codes expose more detail about the `NETWORK_ERROR` and
2065
+ `CONNECT_ERROR` codes returned by previous versions of the library. The extended
2066
+ codes are not returned by default and must be explicitly enabled in order to
2067
+ retain backwards compatibility with applications which rely on the older
2068
+ error codes.
2069
+
2070
+
2071
+ **New Features in 2.4.0**
2072
+
2073
+ * [major] Connection Strings (aka "dsn") feature for instance creation. This adds a new
2074
+ version of the `lcb_create_st` structure which is passed a URI-like string
2075
+ rather than a semicolon-delimited list of hosts. This string is used to
2076
+ provide options and the list of hosts that the library should connect to.
2077
+ For example, `couchbase://default/localhost&compression=off`
2078
+
2079
+ * [major] SSL transport support for Couchbase 3.0 Enterprise.
2080
+ Couchbase 3.0 enterprise features the ability to encrypt communications
2081
+ between the client and the server using the SSL protocol. SSL protocol
2082
+ support in _libcouchbase_.
2083
+
2084
+ * [major] Retry queue for failed operations. The retry queue is used
2085
+ as a place to place operations which have failed internally and which
2086
+ should be retried within a certain amount of time. This also provides
2087
+ options on which commands should be retried.
2088
+
2089
+ * [minor] Compression/JSON flag (aka Datatype) support
2090
+ This adds support for a future feature of Couchbase server which will
2091
+ feature transparent compression. This feature also allows the server
2092
+ to signal to the library if a document is JSON or not. The compression
2093
+ feature may be disabled at compile-time, and may also be modified at
2094
+ runtime by setting `compression=off` in either the connection string
2095
+ or via `lcb_cntl_setstring(instance, "compression", "off")`
2096
+
2097
+ * [major] Experimental _scheduling_ API. This API replaces most of the older
2098
+ operation APIs with a scheduling API. These APIs are called with one
2099
+ command at a time and insert the resultant packet into a pipeline. The
2100
+ user may "schedule" the commands or "fail" the pipeline if a certain
2101
+ request has failed to be scheduled.
2102
+
2103
+ This API also provides a common ABI header for commands so that they may
2104
+ easily be used via type-punning, or wrapped as a class hierarchy in C++.
2105
+
2106
+ This API is currently considered volatile but will be the basis of the
2107
+ upcoming libcouchbase 3.0 API. The header file is `<libcouchbase/api3.h>`
2108
+
2109
+ * [major] Raw memcached packets may be sent to the library and have a callback
2110
+ invoked when their responses have been received.
2111
+ This adds an `lcb_pktfwd3()` API. This requires the new scheduling API.
2112
+
2113
+
2114
+ **Bug Fixes in 2.4.0**
2115
+
2116
+ * [major] _select_ plugin may endlessly loop in some cases
2117
+ The plugin may loop if there was a long timeout from the
2118
+ future .
2119
+
2120
+ * [major] Do not break TCP connections on topology changes unless ejected from
2121
+ cluster. This ensures that nodes which are still part of the cluster have their
2122
+ TCP connections remain in tact despite being shifted in their server index values.
2123
+ Packets which have been sent to the wrong vBucket are silently ignored and
2124
+ rescheduled to their appropriate destination. This decreases load significantly
2125
+ on the client, network, and cluster during topology changes.
2126
+
2127
+ * [major] Use new-style "Terse" URI format when requesting a configuration over HTTP.
2128
+ This uses the HTTP configuration format over the new `/pools/default/bs/default`
2129
+ rather than the older `/pools/default/bucketsStreaming/default` form. The former
2130
+ form is much more efficient on the cluster side. If the new URI form is not
2131
+ supported (i.e. the server responds with an HTTP 404) the older form will be
2132
+ used instead. You may modify this behavior by setting the `LCB_CNTL_HTCONFIG_URLTYPE`
2133
+ setting via `lcb_cntl()`.
2134
+
2135
+ * [minor] The `cmake/configure` script now accepts the `LDFLAGS`, `CPPFLAGS`, `CFLAGS`,
2136
+ `CXXFLAGS`, `CC`, and `CXX` settings both within the environment _and_ the
2137
+ commandline, so the forms of `CC=clang ./cmake/configure` and
2138
+ `./cmake/configure CC=clang` are equivalent.
2139
+
2140
+ * [minor] The `pillowfight` tool will now print latencies between 1-10ms in resolutions
2141
+ of 100us.
2142
+
2143
+
2144
+ **Metadata and Packaging Changes in 2.4.0**
2145
+
2146
+ * [major] Use Doxygen for API documentation.
2147
+ This replaces the _manpages_ for API documentation with Doxygen. Doxygen
2148
+ is a free and portable documentation system which may be obtained from your
2149
+ distribution or at [](http://doxygen.org). To generate the documentation
2150
+ from the source tree, simply run `doxygen` from the source root directory.
2151
+ To generate internal documentation, run `./docs/gen_internal_apidoc.sh`.
2152
+
2153
+ * [major] Add interface attributes to all API calls
2154
+ This properly documents all API calls with a certain API stability level
2155
+ such as _committed_ (for stable APIs), _uncommitted_ for APIs which may, but
2156
+ are not likely to change, and _volatile_ for APIs which are likely to be
2157
+ changed or removed.
2158
+
2159
+ * [major] Public header files have been reorganized
2160
+ This changes the layout of the header files from previous versions. This should
2161
+ not affect applications as applications should only ever include the main
2162
+ `<libcouchbase/couchbase.h>` file.
2163
+
2164
+ the following files have been _removed_ from the
2165
+ `<libcouchbase/*>` header directory:
2166
+
2167
+ * `types.h` - Merged into other header files
2168
+ * `arguments.h` - now a part of `couchbase.h`
2169
+ * `callbacks.h` - now a part of `couchbase.h`
2170
+ * `debug.h` - unused and obsolete
2171
+ * `durability.h` - now a part of `couchbase.h`
2172
+ * `behavior.h` - Merged into `deprecated.h`
2173
+ * `sanitycheck.h` - Merged into `deprecated.h`
2174
+ * `timings.h` - Part of `couchbase.h`
2175
+ * `compat.h` - Part of `deprecated.h`
2176
+
2177
+ The following files have been _added_ into the `<libcouchbase/*>` directory.
2178
+ Unless otherwise noted, these files are included by `<libcouchbase/couchbase.h>`:
2179
+
2180
+ * `api3.h` - Volatile proposed 3.0 API. **Not included by default**
2181
+ * `cxxwrap.h` - Contains the implementation for the deprecated C++ wrappers
2182
+ * `deprecated.h` - Contains deprecated APIs
2183
+ * `iops.h` - Contains the IO integration APIs
2184
+ * `pktfwd.h` - Contains the packet forwarding API. **Not included by default**
2185
+ * `vbucket.h` - Contains the vBucket mapping API. **Not included by default**
2186
+
2187
+ * OpenSSL is now a base dependency for the library. This may be disabled at configure
2188
+ time via `--enable-ssl=no`. See `./configure --help`.
2189
+
2190
+ * Snappy compression library is bundled and optionally compiled. This is left out by
2191
+ default as the configure script will search for a system installed `libsnappy`.
2192
+ Snappy provides the compression feature needed for compressing and inflating data
2193
+ between client and server. It may be disabled at compile-time via `--enable-snappy=no`
2194
+
2195
+ * [minor] _libvbucket_ has been fully integrated into libcouchbase from the forked
2196
+ _libvbucket_ package and, lives fully as part of the
2197
+ library. The public vBucket API may be found in `<libcouchbase/vbucket.h>`.
2198
+
2199
+ * [minor] As an alternative to the cross-platform `lcb_uintNN_t` typedefs, a shorter
2200
+ (and more standards compliant) alternative `lcb_UNN` typedefs are provided, thus
2201
+ instead of `lcb_uint32_t` you may use `lcb_U32`. The full listing of cross platform
2202
+ typdefs may be found inside `<libcouchbase/sysdefs.h>`
2203
+
2204
+
2205
+
2206
+ ## 2.3.1 (2014-05-08)
2207
+
2208
+ * [major] CCBC-404: Segfault in `connmgr_invoke_request`
2209
+ Occasionally a segmentation fault would happen when a connection was being
2210
+ released as a result of a connection failure. This was because of invalid
2211
+ list tracking.
2212
+
2213
+ * [major] CCBC-395: Add `lcb_cntl()` interface for configuration cache
2214
+ Configuration cache options may be set after instantiation using `lcb_cntl()`
2215
+ with the new `LCB_CNTL_CONFIGCACHE` operation. The old-style `lcb_create_compat`
2216
+ creation path is deprecated.
2217
+
2218
+ * [major] CCBC-394: Get-with-replica occasionally crashes on Windows and UV
2219
+ during topology changes. This was due to not allocating a buffer if one did
2220
+ not exist.
2221
+
2222
+ * [major] CCBC-392: ABI compatibility broken between 2.x and 2.3 for
2223
+ `lcb_create_compat`. This has been fixed by symbol aliasing between versions.
2224
+ Developers are recommended to use the `lcb_cntl()` API to set the
2225
+ configuration cache, as specified in CCBC-395
2226
+
2227
+ * [major] CCBC-385: Failed assertion on get-with-replica when connection fails.
2228
+ If a connection fails with a `CMD_GET_REPLICA` command still in the queue an
2229
+ assertion failure will crash the library. This has been fixed by handling the
2230
+ opcode in the `failout_single_request` function.
2231
+
2232
+ * [major] CCBC-384: Unknown Winsock error codes crash application. This was fixed
2233
+ by providing proper handlers for Winsock codes which were not explicitly
2234
+ converted into their POSIX equivalents.
2235
+
2236
+ * [major] CCBC-376: Fix memory leak in configuration parsing. A leak was
2237
+ introduced in version 2.3.0 by not freeing the JSON pool structure. This has
2238
+ been fixed in 2.3.1
2239
+
2240
+ * [minor] CCBC-370: `lcb_get_host` and `lcb_get_port` may return host-port
2241
+ combinations from different servers. If multiple servers are listening on
2242
+ different ports this may result in yielding an invalid endpoint by combining
2243
+ the output from those two functions. This has been fixed in 2.3.1 by returning
2244
+ the host and port from the first host, in lieu of a currently-connected REST
2245
+ endpoint.
2246
+
2247
+ * [minor] CCBC-368: Initial bootstrapping failure may mask `LCB_BUCKET_ENOENT`
2248
+ calls with `LCB_ETIMEDOUT`. This has been fixed by not retrying configuration
2249
+ retrieval if an explicit HTTP 404 code is received. Note that when using
2250
+ bootstrap over memcached, a missing bucket may still be manifest as
2251
+ `LCB_AUTH_ERROR`.
2252
+
2253
+ * [minor] CCBC-367: Ensure `lcb_get_host` does not return `NULL` when the
2254
+ associated `lcb_t` is of `LCB_TYPE_CLUSTER`. This would cause crashes in some
2255
+ applications which relied on this function to not return `NULL`.
2256
+
2257
+ * [major] CCBC-389: Fixed Spurious timeouts being delivered in asynchronous
2258
+ use cases.
2259
+ In applications which do not use `lcb_wait()` the library will potentially
2260
+ time out commands internally triggering an erroneous configuration refresh.
2261
+ While this issue would not end up failing operations it will cause unnecessary
2262
+ network traffic for retrieving configurations. Applications using `lcb_wait()`
2263
+ are not affected as that function resets the timeout handler.
2264
+
2265
+ * [major] CCBC-332, CCBC-364: Compare configuration revision information
2266
+ for memcached cluster bootstrap. Previously we would refresh the
2267
+ configuration upon receipt
2268
+ of any new configuration update from memcached. This is fixed in 2.3.1 where
2269
+ the configuration will only be applied if it is deemed to be newer than the
2270
+ current configuration. With memcached bootstrap this is only true if the
2271
+ configuration's `rev` field is higher than the current one.
2272
+
2273
+
2274
+ ## 2.3.0 GA (2014-04-07)
2275
+
2276
+ * [major] CCBC-152: Provide a master-only observe option. This adds a new
2277
+ struct version to the `lcb_observe_cmd_t` which allows to select only the
2278
+ master node. One can use this to efficiently check if the key exists (without
2279
+ retrieving it). It also allows one to get the CAS of the item without fetching
2280
+ it.
2281
+
2282
+ * [major] CCBC-281: Fix partial scheduling during multi operations. Previously
2283
+ the library would deliver spurious callbacks if multiple operations were
2284
+ scheduled with a single command and one of the operations could not be mapped
2285
+ to a server. This fixes this behavior and ensures that callbacks are only
2286
+ invoked for items if the entire API call succeeded.
2287
+
2288
+ * [major] CCBC-150: Multi-packet commands will no longer deliver spurious
2289
+ callbacks on failure. Previously these commands would be relocated to the
2290
+ same server during a configuration change, resulting in multiple callbacks
2291
+ for the same command. In this case the client would think all the commands
2292
+ had been completed, and when the next response arrived it would incorrectly
2293
+ map it to a different request.
2294
+
2295
+ * [minor] CCBC-327: Fix assumption of `vbucket_compare()` only returning if
2296
+ a diff exists. This function actually returns a non-NULL pointer always
2297
+ unless it cannot allocate more memory. This bug was introduced with the
2298
+ _DP1_ release.
2299
+
2300
+ * [minor] CCBC-326: Memcached buckets should use streaming config. This was
2301
+ left unchecked in the _DP1_ release and has now been fixed.
2302
+
2303
+ * [major] CCBC-351: Enhance performance for configuration parsing. In previous
2304
+ versions receiving multiple configurations at once would cause CPU spikes on
2305
+ slower systems. The configuration parser code has been optimized to alleviate
2306
+ this issue.
2307
+
2308
+ * [minor] CCBC-350: Provide `lcb_cntl()` API to retrieve the SCM changeset used
2309
+ by the currently loaded binary. This is a more effective way to get the
2310
+ revision as it does not depend on the specific headers the library was
2311
+ compiled with.
2312
+
2313
+ * [major] CCBC-340: Correctly parse `""`, `"0"` and `"1"` for environment
2314
+ variables. In previous versions having the entry set to an empty string
2315
+ or `0` would still be treated by the library as a true value for various
2316
+ environment variables. This has been fixed so that clear "False" values
2317
+ such as the empty string or 0 are treated as such.
2318
+
2319
+
2320
+ ## 2.3.0-dp1 (2014-02-04)
2321
+
2322
+ * [major] CCBC-234: Implementation of
2323
+ [Cluster Configuration Carrier Publication][cccp-wiki]. This is the new and
2324
+ more efficient way to bootstrap from a cluster using the native memcached
2325
+ protocol and is quicker than the previous HTTP bootstrap mechanism, dramatically
2326
+ improving startup times and reducing load on the server. This feature is
2327
+ available in server verions 2.5 and greater. The existing HTTP configuration is
2328
+ still supported and will be employed as a fallback in the event that `CCCP`
2329
+ is not supported.
2330
+
2331
+ In conjunction with this, a new struct version has been added to the
2332
+ `lcb_create_st` parameters structure for use with `lcb_create`. This allows
2333
+ you to get more control over how the client is initialized:
2334
+
2335
+ lcb_t instance;
2336
+ struct lcb_create_st options;
2337
+ lcb_config_transport_t enabled_transports = {
2338
+ LCB_CONFIG_TRANSPORT_CCCP,
2339
+ LCB_CONFIG_TRANSPORT_LIST_END
2340
+ };
2341
+
2342
+ memset(&options, 0, sizeof(options));
2343
+ options.version = 2;
2344
+ options.v.v2.mchosts = "example.com:11210";
2345
+ options.v.v2.transports = enabled_transports;
2346
+
2347
+ lcb_error_t rc = lcb_create(&instance, &options);
2348
+ if (rc != LCB_SUCCESS) {
2349
+ fprintf(stderr, "Failed to create instance: %s
2350
+ ", lcb_strerror(instance, rc));
2351
+ }
2352
+
2353
+ The above snippet will configure a client to _always_ use the `CCCP` protocol
2354
+ and never attempt to fall back on HTTP
2355
+
2356
+ The CCCP implementation required a significant rewrite in how sockets were
2357
+ created and re-used. Particularly, a connection pooling feature was implemented.
2358
+
2359
+ Additionally, the `cbc` command now has an additional `-C` option which accepts
2360
+ the preferred configuration mechanism to use.
2361
+
2362
+ * [major] CCBC-305: Implement logging hooks.
2363
+
2364
+ This improvements adds various levels of diagnostic logging with the library
2365
+ itself. It may be utilized via the environment (by setting the `LCB_LOGLEVEL`
2366
+ environment variable to a positive integer -- the higher the number the more
2367
+ verbose the logging).
2368
+
2369
+ Integrators may also use the logging API specified in `<libcouchbase/types.h>`
2370
+ to proxy the library's logging messages into your own application.
2371
+
2372
+ Current events logged include connection initialization, destruction, connection
2373
+ pool management, configuration changes, and timeouts.
2374
+
2375
+ By default the library is silent.
2376
+
2377
+ * [major] CCBC-316: Allow per-node bootstrap/config timeouts.
2378
+ This change allows more finer grained control over how long to wait per-node
2379
+ to receive updated configuration info. This setting helps adjust the initial
2380
+ and subsequent bootstrap processes to help ensure each node gets a slice of
2381
+ time.
2382
+
2383
+ * [major] CCBC-297: Handle spurious EWOULDBLOCK on UV/Win32
2384
+ This issue caused odd errors on Windows when large amounts of data
2385
+ would be received on the socket.
2386
+
2387
+ ## 2.2.0 (2013-10-05)
2388
+
2389
+ * [major] CCBC-169 Handle 302 redirects in HTTP (views, administrative
2390
+ requests). By default the library will follow up to three redirects.
2391
+ Once the limit reached the request will be terminated with code
2392
+ `LCB_TOO_MANY_REDIRECTS`. Limit is configurable through
2393
+ `LCB_CNTL_MAX_REDIRECTS`. If set to -1, it will disable redirect
2394
+ limit.
2395
+
2396
+ int new_value = 5;
2397
+ lcb_cntl(instance, LCB_CNTL_SET, LCB_CNTL_MAX_REDIRECTS, &new_value);
2398
+
2399
+ * [major] CCBC-243 Replace isasl with cbsasl, the latter has
2400
+ implemented both PLAIN and CRAM-MD5 authentication mechanisms.
2401
+
2402
+ * `LCB_CNTL_MEMDNODE_INFO` command updated to include effective
2403
+ SASL mechanism:
2404
+
2405
+ cb_cntl_server_t node;
2406
+ node.version = 1;
2407
+ node.v.v1.index = 0; /* first node */
2408
+ lcb_cntl(instance, LCB_CNTL_GET, LCB_CNTL_MEMDNODE_INFO, &node);
2409
+ if (node.v.v1.sasl_mech) {
2410
+ printf("authenticated via SASL '%s'
2411
+ ",
2412
+ node.v.v1.sasl_mech);
2413
+ }
2414
+
2415
+ * It is also possible to force specific authentication mechanism for
2416
+ the connection handle using `LCB_CNTL_FORCE_SASL_MECH` command:
2417
+
2418
+ lcb_cntl(instance, LCB_CNTL_SET, LCB_CNTL_FORCE_SASL_MECH, "PLAIN");
2419
+
2420
+ * [major] CCBC-286 libuv plugin: use same CRT for free/malloc
2421
+
2422
+ * [major] CCBC-288 Fail `NOT_MY_VBUCKET` responses on timeout
2423
+
2424
+ * [major] CCBC-275 Do a full purge when negotiation times out. In this
2425
+ case we must purge the server from all commands and not simply pop
2426
+ individual items.
2427
+
2428
+ * [major] CCBC-275 Reset the server's buffers upon reconnection. This
2429
+ fixes a crash experienced when requesting a new read with the
2430
+ previous buffer still in tact. This was exposed by calling
2431
+ `lcb_failout_server` on a timeout error while maintaining the same
2432
+ server struct.
2433
+
2434
+ * [major] CCBC-282 Make server buffers reentrant-safe. When purging
2435
+ implicit commands, we invoke callbacks which may in turn cause other
2436
+ LCB entry points to be invoked which can shift the contents and/or
2437
+ positions of the ringbuffers we're reading from.
2438
+
2439
+ * [major] CCBC-204, CCBC-205 Stricter/More inspectable behavior for
2440
+ config cache. This provides a test and an additional `lcb_cntl`
2441
+ operation to check the status of the configuration cache. Also it
2442
+ switches off config cache with memcached buckets.
2443
+
2444
+ int is_loaded;
2445
+ lcb_cntl(instance, LCB_CNTL_GET, LCB_CNTL_CONFIG_CACHE_LOADED, &is_loaded);
2446
+ if (is_loaded) {
2447
+ printf("Configuration cache saved us a trip to the config server
2448
+ ");
2449
+ } else {
2450
+ printf("We had to contact the configuration server for some reason
2451
+ ");
2452
+ }
2453
+
2454
+ * [major] CCBC-278 Use common config retry mechanism for bad
2455
+ configcache. This uses the same error handling mechanism as when a
2456
+ bad configuration has been received from the network. New
2457
+ `LCB_CONFIG_CACHE_INVALID` error code to notify the user of such a
2458
+ situation
2459
+
2460
+ * [major] CCBC-274 Handle getl/unl when purging the server (thanks
2461
+ Robert Groenenberg)
2462
+
2463
+ * [major] Don't failout all commands on a timeout. Only fail those
2464
+ commands which are old enough to have timed out already.
2465
+
2466
+ * [major] CCBC-269 Don't record and use TTP/TTR from observe. Just
2467
+ poll at a fixed interval, as the responses from the server side can
2468
+ be unreliable.
2469
+
2470
+ * [minor] Allow hooks for mapping server codes to errors. This also
2471
+ helps handle sane behavior if a new error code is introduced, or
2472
+ allow user-defined logging when a specific error code is received.
2473
+
2474
+ lcb_errmap_callback default_callback;
2475
+
2476
+ lcb_error_t user_map_error(lcb_t instance, lcb_uint16_t in)
2477
+ {
2478
+ if (in == PROTOCOL_BINARY_RESPONSE_ETMPFAIL) {
2479
+ fprintf(stderr, "temporary failure on server
2480
+ ");
2481
+ }
2482
+ return default_callback(instance, in);
2483
+ }
2484
+
2485
+ ...
2486
+
2487
+ default_callback = lcb_set_errmap_callback(conn, user_map_error);
2488
+
2489
+ * [minor] Add an example of a connection pool. See
2490
+ `example/instancepool` directory
2491
+
2492
+ * [minor] CCBC-279 Force `lcb_wait` return result of wait operation
2493
+ instead of `lcb_get_last_error`. It returns `last_error` if and only
2494
+ if the handle is not yet configured
2495
+
2496
+ * [minor] CCBC-284 `cbc-pillowfight`: compute item size correctly
2497
+ during set If `minSize` and `maxSize` are set to the same value it
2498
+ can sometimes crash since it may try to read out of memory bounds
2499
+ from the allocated data buffer.
2500
+
2501
+ * [minor] CCBC-283 Apply key prefix CLI option in cbc-pillowfight
2502
+
2503
+ * [minor] Add `--enable-maintainer-mode`. Maintainer mode enables
2504
+ `--enable-werror --enable-warnings --enable-debug`, forces all
2505
+ plugins to be installed and forces all tests, tools, and examples to
2506
+ be built
2507
+
2508
+ * [minor] CCBC-255 Expose `LCB_MAX_ERROR` to allow user-defined codes
2509
+
2510
+ ## 2.1.3 (2013-09-10)
2511
+
2512
+ * [minor] Updated gtest to version 1.7.0. Fixes issue with building
2513
+ test suite with new XCode 5.0 version being released later this
2514
+ month.
2515
+
2516
+ * [major] CCBC-265 Do not try to parse config for `LCB_TYPE_CLUSTER`
2517
+ handles. It fixes timouts for management operations (like 'cbc
2518
+ bucket-create', 'cbc bucket-flush', 'cbc bucket-delete' and 'cbc
2519
+ admin')
2520
+
2521
+ * [major] CCBC-263 Skip unfinished SASL commands on rebalance. During
2522
+ rebalance, it is possible that the newly added server doesn't have
2523
+ chance to finish SASL auth before the cluster will push config
2524
+ update, in this case packet relocator messing cookies. Also the
2525
+ patch makes sure that SASL command/cookie isn't mixing with other
2526
+ commands
2527
+
2528
+ * [major] Use cluster type connection for cbc-bucket-flush. Although
2529
+ flush command is accessible for bucket type connections,
2530
+ cbc-bucket-flush doesn't use provided bucket name to connect to,
2531
+ therefore it will fail if the bucket name isn't "default".
2532
+
2533
+ * [major] Allow to make connect order deterministic. It allows the
2534
+ user to toggle between deterministic and random connect order for
2535
+ the supplied nodes list. By default it will randomize the list.
2536
+
2537
+ * [major] Do not allow to use Administrator account for
2538
+ `LCB_TYPE_BUCKET`
2539
+
2540
+ * [major] CCBC-258 Fig segmentation faults during tests load of
2541
+ node.js. Sets `inside_handler` on `socket_connected`. Previously we
2542
+ were always using SASL auth, and as such, we wouldn't flush packets
2543
+ from the `cmd_log` using `server_send_packets` (which calls
2544
+ `apply_want`). `apply_want` shouldn't be called more than once per
2545
+ event loop entry -- so this sets and unsets the `inside_handler`
2546
+ flag.
2547
+
2548
+ * [major] Added support of libuv 0.8
2549
+
2550
+ * [major] Close config connection before trying next node. It will fix
2551
+ asserts in case of the config node becomes unresponsive, and the
2552
+ threshold controlled by `LCB_CNTL_CONFERRTHRESH` and `lcb_cntl(3)`
2553
+
2554
+ ## 2.1.2 (2013-08-27)
2555
+
2556
+ * [major] CCBC-253, CCBC-254 Use bucket name in SASL if username
2557
+ omitted. Without this fix, you can may encounter a segmentation
2558
+ faults for buckets, which are not protected by a password.
2559
+
2560
+ * [major] Preserve IO cookie in `options_from_info` when using v0
2561
+ plugins with user-provided IO loop instance. This issue was
2562
+ introduced in 2.1.0.
2563
+
2564
+ * [minor] Display the effective IO backend in 'cbc-version'. This is
2565
+ helpful to quickly detect what is the effective IO plugin on a given
2566
+ system.
2567
+
2568
+ ## 2.1.1 (2013-08-22)
2569
+
2570
+ * [minor] Use provided credentials for authenticating to the data
2571
+ nodes. With this fix, it is no longer possible to use Administrator
2572
+ credentials with a bucket. If your configuration does so, you must
2573
+ change the credentials you use before applying this update. No
2574
+ documentation guides use of Administrator credentials, so this
2575
+ change is not expected to affect few, if any deployments.
2576
+
2577
+ * [major] CCBC-239 Do not use socket after failout. Fixes segmentation
2578
+ faults during rebalance.
2579
+
2580
+ * [minor] CCBC-245 Distribute debug information with release binaries
2581
+ on Windows
2582
+
2583
+ * [minor] CCBC-248 Do not disable config.h on UNIX-like platforms. It
2584
+ fixes build issue, when application is trying to include plugins
2585
+ from the tarball.
2586
+
2587
+ * [major] CCBC-192 Skip misconfigured nodes in the list. New
2588
+ lcb\_cntl(3couchbase) added to control whether the library will skip
2589
+ nodes in initial node list, which listen on configuration port (8091
2590
+ usually) but doesn't meet required parameters (invalid
2591
+ authentication or missing bucket). By default report this issue and
2592
+ stop trying nodes from the list, like all previous release. Read
2593
+ more at man page lcb\_cntl(3couchbase) in section
2594
+ LCB\_CNTL\_SKIP\_CONFIGURATION\_ERRORS\_ON\_CONNECT
2595
+
2596
+ * [major] CCBC-246 Fallback to 'select' IO plugin if default plugin
2597
+ cannot be loaded. On UNIX-like systems, default IO backend is
2598
+ 'libevent', which uses third-party library might be not available
2599
+ at the run-time. Read in lcb\_cntl(3couchbase) man page in section
2600
+ LCB\_CNTL\_IOPS\_DEFAULT\_TYPES about how to determine effective IO
2601
+ plugin, when your code chose to use LCB\_IO\_OPS\_DEFAULT during
2602
+ connection instantiation. The fallback mode doesn't affect
2603
+ application which specify IO backend explicitly.
2604
+
2605
+ ## 2.1.0 (2013-08-17)
2606
+
2607
+ * [major] New backend `select`. This backend is based on the select(2)
2608
+ system call and its Windows version. It could be considered the most
2609
+ portable solution and is available with the libcouchbase core.
2610
+
2611
+ * [major] CCBC-236 New backend `libuv`. This backend previously was
2612
+ part of the `couchnode` project and is now available as a plugin.
2613
+ Because libuv doesn't ship binary packages there is no binary
2614
+ package `libcouchbase2-libuv`. You can build plugin from the source
2615
+ distribution, or through the `libcouchbase-dev` or
2616
+ `libcouchbase-devel` package on UNIX like systems.
2617
+
2618
+ * [major] New backend `iocp`. This is a Windows specific backend,
2619
+ which uses "I/O Completion Ports". As a part of the change, a new
2620
+ version of plugin API was introduced which is more optimized to this
2621
+ model of asynchronous IO.
2622
+
2623
+ * [major] CCBC-229 Fixed bug when REPLICA\_FIRST fails if first try
2624
+ does not return key
2625
+
2626
+ * [major] CCBC-228 Fixed bug when REPLICA\_SELECT didn't invoke
2627
+ callbacks for negative error codes
2628
+
2629
+ * [major] CCBC-145 API for durability operations. This new API is
2630
+ based on `lcb_observe(3)` and allows you to monitor keys more
2631
+ easily. See the man pages `lcb_durability_poll(3)` and
2632
+ `lcb_set_durability_callback(3)` for more info.
2633
+
2634
+ * [major] New configuration interface lcb\_cntl(3) along with new
2635
+ tunable options of the library and connection instances. In this
2636
+ release the following settings are available. See the man page for
2637
+ more information and examples.:
2638
+
2639
+ * LCB\_CNTL\_OP\_TIMEOUT operation timeout (default 2.5 seconds)
2640
+
2641
+ * LCB\_CNTL\_CONFIGURATION\_TIMEOUT time to fetch cluster
2642
+ configuration. This is similar to a connection timeout (default 5
2643
+ seconds)
2644
+
2645
+ * LCB\_CNTL\_VIEW\_TIMEOUT timeout for couchbase views (default 75
2646
+ seconds)
2647
+
2648
+ * LCB\_CNTL\_HTTP\_TIMEOUT timeout for other HTTP operations like
2649
+ RESTful flush, bucket creating etc. (default 75 seconds)
2650
+
2651
+ * LCB\_CNTL\_RBUFSIZE size of the internal read buffer (default
2652
+ 32768 bytes)
2653
+
2654
+ * LCB\_CNTL\_WBUFSIZE size of the internal write buffer (default
2655
+ 32768 bytes)
2656
+
2657
+ * LCB\_CNTL\_HANDLETYPE type of the `lcb\_t` handler (readonly)
2658
+
2659
+ * LCB\_CNTL\_VBCONFIG returns pointer to VBUCKET\_CONFIG\_HANDLE
2660
+ (readonly)
2661
+
2662
+ * LCB\_CNTL\_IOPS get the implementation of IO (lcb\_io\_opt\_t)
2663
+
2664
+ * LCB\_CNTL\_VBMAP get vBucket ID for a given key
2665
+
2666
+ * LCB\_CNTL\_MEMDNODE\_INFO get memcached node info
2667
+
2668
+ * LCB\_CNTL\_CONFIGNODE\_INFO get config node info
2669
+
2670
+ * LCB\_CNTL\_SYNCMODE control synchronous behaviour (default
2671
+ LCB\_ASYNCHRONOUS)
2672
+
2673
+ * LCB\_CNTL\_IP6POLICY specify IPv4/IPv6 policy (default
2674
+ LCB\_IPV6\_DISABLED)
2675
+
2676
+ * LCB\_CNTL\_CONFERRTHRESH control configuration error threshold
2677
+ (default 100)
2678
+
2679
+ * LCB\_CNTL\_DURABILITY\_TIMEOUT durability timeout (default 5 seconds)
2680
+
2681
+ * LCB\_CNTL\_DURABILITY\_INTERVAL durability polling interval (default
2682
+ 100 milliseconds)
2683
+
2684
+ * LCB\_CNTL\_IOPS\_DEFAULT\_TYPES get the default IO types
2685
+
2686
+ * LCB\_CNTL\_IOPS\_DLOPEN\_DEBUG control verbose printing of dynamic
2687
+ loading of IO plugins.
2688
+
2689
+ ## 2.0.7 (2013-07-10)
2690
+
2691
+ * [major] CCBC-183 Improve `lcb_get_replica()`. Now it is possible
2692
+ to choose between three strategies:
2693
+
2694
+ 1. `LCB_REPLICA_FIRST`: Previously accessible and now the default,
2695
+ the caller will get a reply from the first replica to successfully
2696
+ reply within the timeout for the operation or will receive an
2697
+ error.
2698
+
2699
+ 2. `LCB_REPLICA_ALL`: Ask all replicas to send documents/items
2700
+ back.
2701
+
2702
+ 3. `LCB_REPLICA_SELECT`: Select one replica by the index in the
2703
+ configuration starting from zero. This approach can more quickly
2704
+ receive all possible replies for a given topology, but it can
2705
+ also generate false negatives.
2706
+
2707
+ Note that applications should not assume the order of the
2708
+ replicas indicates more recent data is at a lower index number.
2709
+ It is up to the application to determine which version of a
2710
+ document/item it may wish to use in the case of retrieving data
2711
+ from a replica.
2712
+
2713
+ ## 2.0.6 (2013-05-07)
2714
+
2715
+ * [major] CCBC-188 Fix segfault when rebalancing
2716
+ When a (!connected) server is reconnected, the tasks in its
2717
+ "pending" buffer will be moved into "output" buffer. If its
2718
+ connection is broken again immediately, `relocate_packets()` will go
2719
+ to wrong path.
2720
+
2721
+ * [major] CCBC-202 Don't try to switch to backup nodes when timeout is
2722
+ reached
2723
+
2724
+ * [major] CCBC-188 Check if SASL struct is valid before disposing
2725
+
2726
+ * [major] Fix compile error with sun studio
2727
+ "src/event.c", line 172: error: statement not reached (`E_STATEMENT_NOT_REACHED`)
2728
+
2729
+ * [major] Don't invoke HTTP callbacks after cancellation, because
2730
+ user code might assume a previously-freed resource is still valid
2731
+
2732
+ * [minor] CCBC-179 Added an example to properly use the bucket
2733
+ credentials for authentication instead of administrator credentials
2734
+
2735
+ * [minor] example/yajl/couchview.c: pass cookie to the command
2736
+ Fixes coredump when executing ./examples/yajl/couchview
2737
+
2738
+ * [minor] CCBC-201 Add Host header in http request
2739
+ http://cbugg.hq.couchbase.com/bug/bug-555 points out that Host is a
2740
+ required field in HTTP 1.1
2741
+
2742
+ ## 2.0.5 (2013-04-05)
2743
+
2744
+ * [minor] Try to search the --libdir for modules if dlopen
2745
+ fails to find the module in the default library path
2746
+
2747
+ * [minor] CCBC-190 New compat mode (experimental) for configuration
2748
+ caching. See man `lcb_create_compat()`
2749
+
2750
+ * [minor] Manpage fixes
2751
+
2752
+ * [minor] Fix build on FreeBSD (http://review.couchbase.org/25289)
2753
+
2754
+ * [minor] Fix reconnecting issues on windows
2755
+ (http://review.couchbase.org/25170 and
2756
+ http://review.couchbase.org/25155)
2757
+
2758
+ * [minor] pillowfight example updated to optionally use threads
2759
+
2760
+ ## 2.0.4 (2013-03-06)
2761
+
2762
+ * [minor] CCBC-185 The bootstrap URI is not parsed correctly
2763
+
2764
+ * [minor] CCBC-175 Work properly on systems where EWOULDBLOCK != EAGAIN
2765
+
2766
+ * [critical] CCBC-180 Segmentation fault when the hostname resolved
2767
+ into several addresses and first of them reject couchbase
2768
+ connections.
2769
+
2770
+ * [major] CCBC-182 The library stops iterating backup nodes list if
2771
+ the next one isn't accessible.
2772
+
2773
+ * [major] CCBC-147 Fixed illegal memory access in win32 plugin
2774
+
2775
+ * [minor] CCBC-178 Build error on solaris/sparc: -Werror=cast-align
2776
+
2777
+ ## 2.0.3 (2013-02-06)
2778
+
2779
+ * [minor] bypass SASL LIST MECH
2780
+
2781
+ * [minor] Shrink internal lookup tables (and reduce the size of
2782
+ `lcb_t`)
2783
+
2784
+ * [minor] Add a new library: `libcouchbase_debug.so` (see
2785
+ include/libcouchbase/debug.h) which is a new library that contains
2786
+ new debug functionality.
2787
+
2788
+ * [minor] Added manual pages for the library
2789
+
2790
+ * [major] CCBC-153 Reset internal state on `lcb_connect()`. Allow caller
2791
+ to use `lcb_connect()` multiple times to implement reconnecting using
2792
+ the same `lcb_t` instance. Also it sets up the initial-connection
2793
+ timer for users who don't use `lcb_wait()` and drive IO loop manually.
2794
+
2795
+ * [major] CCBC-171 Invalid read in libevent plugin, when the plugin
2796
+ compiled in 1.x mode
2797
+
2798
+ * [critical] CCBC-155 Observe malfunctions in the case of multiple
2799
+ keys and server failure
2800
+
2801
+ * [major] CCBC-156 The ep-engine renders meaningful body for observe
2802
+ responses only if status code is 0 (`PROTOCOL_BINARY_RESPONSE_SUCCESS`).
2803
+ We shouldn't interpret response body in other cases, just decode &
2804
+ failout request instead. Also we shouldn't retry observe commands on
2805
+ `PROTOCOL_BINARY_RESPONSE_NOT_MY_VBUCKET`, because it can cause the
2806
+ client to loop infinitely
2807
+
2808
+ * [major] CCBC-145 KV Durability operation API. Async APIs added to
2809
+ allow the checking of the durability (replication and persistence)
2810
+ status of a key, and to notify the user when a specific criteria has
2811
+ been satisfied.
2812
+
2813
+ ## 2.0.2 (2013-01-04)
2814
+
2815
+ * [major] CCBC-150 commands sent to multiple servers fail to detect
2816
+ the respose if mixed with other commands.
2817
+
2818
+ * [minor] CCBC-143 'cbc version' reports that uses 2.0.0, but really
2819
+ installed with 2.0.1. Minor but confusing issue.
2820
+
2821
+ * [major] CCBC-151 Cancellation of the HTTP request might lead to
2822
+ memory leaks or to segfaults (2e3875c2).
2823
+
2824
+ * [minor] Document `LCB_SERVER_BUG` and `LCB_PLUGIN_VERSION_MISMATCH`.
2825
+ Enhance the the `lcb_strerror()` test to detect undocumented error
2826
+ codes.
2827
+
2828
+ * [critical] CCBC-153 Under high load the library could generate
2829
+ `LCB_ETIMEDOUT` errors without reason owing to internal limitations.
2830
+
2831
+ ## 2.0.1 (2012-12-11)
2832
+
2833
+ 50 files changed, 1009 insertions(+), 274 deletions(-)
2834
+
2835
+ * libev-plugin: delay all timers while the loop isn't active. It will
2836
+ fix `LCB_ETIMEOUT` in the following scenario:
2837
+
2838
+ * connect the instance
2839
+ * sleep for time greater than default timeout (e.g. 3 seconds)
2840
+ * schedule and execute a command (it will be timed out
2841
+ immediately)
2842
+
2843
+ * libev-plugin: reset IO event on delete. We need to reset it,
2844
+ because it might be re-used later
2845
+
2846
+ * CCBC-136: do not abort when purging SASL commands
2847
+
2848
+ * Make library C89 friendly again
2849
+
2850
+ * CCBC-132, CCBC-133: Ensure HTTP works even when the network may be
2851
+ unreliable. This changeset encompasses several issues which had been
2852
+ found with HTTP requests during network errors and configuration
2853
+ changes. Specifically some duplicate code paths were removed, and
2854
+ the process for delivering an HTTP response back to the user is more
2855
+ streamlined.
2856
+
2857
+ * CCBC-130: Fix a memory leak on the use of http headers
2858
+
2859
+ * CCBC-131: Compensate for cluster nodes lacking couchApiBase
2860
+
2861
+ * Fix possible SEGFAULT. Not-periodic timers are destroyed after
2862
+ calling user's callback, after that library performed read from
2863
+ freed pointer.
2864
+
2865
+ * SystemTap and DTrace integration
2866
+
2867
+ ## 2.0.0 (2012-11-27)
2868
+
2869
+ 12 files changed, 50 insertions(+), 12 deletions(-)
2870
+
2871
+ * Install unlock callback in synchronous mode
2872
+
2873
+ * Add the CAS to the delete callback
2874
+
2875
+ * Minor update of the packaging layout:
2876
+
2877
+ * libcouchbase-all package comes without version
2878
+ * extract debug symbols from libcouchbase-{bin,core} to
2879
+ libcouchbase-dbg package
2880
+
2881
+ ## 2.0.0beta3 (2012-11-21)
2882
+
2883
+ 64 files changed, 3641 insertions(+), 735 deletions(-)
2884
+
2885
+ * CCBC-104 Fix illegal memory access. Reconnect config listener if the
2886
+ config connection was gone without proper shutdown.
2887
+
2888
+ * Check for EWOULDBLOCK/EINTR on failed send
2889
+
2890
+ * Allow to use gethrtime() from C++
2891
+
2892
+ * Fix using freed memory (was introduced in 4397181)
2893
+
2894
+ * Use dynamic versioning for plugins
2895
+
2896
+ * Remove libtool version from the plugins
2897
+
2898
+ * Allow to use 'cbc-hash' with files
2899
+
2900
+ * CCBC-120 Purge stale OBSERVE packets
2901
+
2902
+ * CCBC-120 Reformat and refactor `lcb_server_purge_implicit_responses`:
2903
+
2904
+ * move packet allocation out of GET handler
2905
+ * dropping NOOP command shouldn't return error code
2906
+
2907
+ * CCBC-122 Try to switch another server from backup list on timeout
2908
+
2909
+ * CCBC-119: Allow the user to specify a different hash key. All of the
2910
+ data operations contains a hashkey and nhashkey field. This allows
2911
+ you to "group" items together in your cluster. A typical use case
2912
+ for this is if you're storing lets say data for a single user in
2913
+ multiple objects. If you want to ensure that either all or none of
2914
+ the objects are available if a server goes down, it could be a good
2915
+ idea to locate them on the same server. Do bear in mind that if you
2916
+ do try to decide where objects is located, you may end up with an
2917
+ uneven distribution of the number of items on each node. This will
2918
+ again result in some nodes being more busy than others etc. This is
2919
+ why some clients doesn't allow you to do this, so bear in mind that
2920
+ by doing so you might not be able to get your objects from other
2921
+ clients.
2922
+
2923
+ * Create man pages for cbc and cbcrc
2924
+
2925
+ * CCBC-118 `lcb_error_t` member in the http callbacks shouldn't reflect
2926
+ the HTTP response code. So the error code will be always `LCB_SUCCESS`
2927
+ if the library managed to receive the data successfully.
2928
+
2929
+ * Timer in libev uses double for interval. Ref:
2930
+ [](http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#code_ev_timer_code_relative_and_opti)
2931
+
2932
+ * CCBC-115 Return zero from `do_read_data()` if `operations_per_call`
2933
+ reached. The `operations_per_call' limit was introduced to prevent
2934
+ from freezing event loop. But in the function variable rv could
2935
+ store two different results and in case of reaching this limit it is
2936
+ returning number of the processed records, which is wrong. The
2937
+ function should return either zero (success) or non-zero (failure).
2938
+
2939
+ * Do not allow admin operations without authentication
2940
+
2941
+ * Fix cbc-bucket-create. `sasl-password' is misspelled, and it fails
2942
+ to parse the command line option.
2943
+
2944
+ * CCBC-114 Lookup the plugin symbol also in the current executable
2945
+ image.
2946
+
2947
+ * CCBC-113 Remove unauthorized asserion (d344037). The
2948
+ `lcb_server_send_packets()` function later check if the server object
2949
+ connected and establish connection if not (with raising possible
2950
+ errors)
2951
+
2952
+ * Try all known plugins for `LCB_IO_OPS_DEFAULT` in run time
2953
+
2954
+ * Don't use the `time_t` for win32. When compiling from php it turns out
2955
+ that it gets another size of the `time_t` type, causing the struct
2956
+ offsets to differ.
2957
+
2958
+ * Add `lcb_verify_compiler_setup()`. This function allows the "user" of
2959
+ the library to verify that the compiler use a compatible struct
2960
+ packing scheme.
2961
+
2962
+ * CCBC-87: Add documentation about the error codes
2963
+
2964
+ ## 2.0.0beta2 (2012-10-12)
2965
+
2966
+ 81 files changed, 2822 insertions(+), 1353 deletions(-)
2967
+
2968
+ * Search ev.h also in ${includedir}/libev
2969
+
2970
+ * Fix SEGFAULT if IO struct is allocated not by the `lcb_create()`
2971
+
2972
+ * Allow libcouchbase to connect to an instance without specifying bucket. It is useful
2973
+ when the bucket not needed, e.g. when performing administration
2974
+ tasks.
2975
+
2976
+ * Fix memory leak after an unsuccessful connection
2977
+
2978
+ * Fix invalid memory access in cbc tool. Affected command is
2979
+ cbc-bucket-create
2980
+
2981
+ * `lcb_create`: replace `assert()` with error code
2982
+
2983
+ * CCBC-105 breakout event loop in default `error_callback`. This provides
2984
+ better default behaviour for users who haven't defined global error
2985
+ callback.
2986
+
2987
+ * Allow users to build the library without dependencies. For example,
2988
+ without plugins at all. This may be useful if the plugin is
2989
+ implemented by or built into the host application.
2990
+
2991
+ * Allow users to install both libraries (2.x and 1.x) on the same system.
2992
+
2993
+ * Make the content type optional for `lcb_make_http_request()`
2994
+
2995
+ * Fix password memory leak in http.c (7e71493)
2996
+
2997
+ * Add support for raw http requests. libcouchase already contains all
2998
+ the bits to execute a raw http request, except for the possibility
2999
+ to specify a host:port, username and password.
3000
+
3001
+ * Cleanup HTTP callbacks. Use the same callbacks both for Management
3002
+ and View commands, and rename them to `lcb_http_complete_callback` and
3003
+ `lcb_http_data_callback`.
3004
+
3005
+ * Allow users to use environment variables to pick the event plugin
3006
+
3007
+ * Add a new interface version for creating IO objects via plugins
3008
+
3009
+ * Implement a new libev plugin. It is compatible with both libev3 and
3010
+ libev4.
3011
+
3012
+ * CCBC-103: Fix linked event/timer lists for win32
3013
+
3014
+ * Allow to disable CXX targets
3015
+
3016
+ * `lcb_connect()` should honor the syncmode setting. Automatically call
3017
+ `lcb_wait()` when in synchronous mode
3018
+
3019
+ ## 2.0.0beta (2012-09-13)
3020
+
3021
+ 123 files changed, 13753 insertions(+), 8264 deletions(-)
3022
+
3023
+ * Refactor the API. This is a full redesign of the current
3024
+ libcouchbase API that'll allow us to extend parts of the API without
3025
+ breaking binary compatibility. Also it renames all functions to have
3026
+ `lcb_` prefix instead of `libcouchbase_` and `LCB`/`LIBCOUCHBASE` in macros.
3027
+
3028
+ * Added --enable-fat-binary. Helps to solve issues when linking with
3029
+ fat binaries on MacOS.
3030
+
3031
+ * Implement getter for number of nodes in the cluster:
3032
+ `lcb_get_num_nodes()`
3033
+
3034
+ * Implement RESTful flush in the cbc toolset
3035
+
3036
+ * Bundle Windows packages as zip archives
3037
+
3038
+ * CCBC-98 Differentiate between TMPFAILs. This allows a developer
3039
+ to know if the temporary condition where the request cannot be
3040
+ handled is due to a constraint on the client or the server.
3041
+
3042
+ * Don't try to put the current node last in the backup list. This may
3043
+ cause "duplicates" in the list if the REST server returns another
3044
+ name for the server than you used. Ex: you specify "localhost" and
3045
+ the REST response contains 127.0.0.1
3046
+
3047
+ * Fix locking keys in multi-get mode
3048
+
3049
+ * Fix bug where HTTP method is not set
3050
+
3051
+ * CCBC-96 Correct buffer length for POST/PUT headers
3052
+
3053
+ * Add `lcb_get_server_list`
3054
+
3055
+ * Merge `lcb_get_locked` into `lcb_get` function
3056
+
3057
+ * Fix Windows build
3058
+
3059
+ * Include sys/uio.h. Needed by OpenBSD
3060
+
3061
+ * Fix mingw build (c394a1c)
3062
+
3063
+ * CCBC-80: Default to IPv4 only
3064
+
3065
+ * Sync `memcached/protocol_binary.h`. Pull extra
3066
+ `protocol_binary_datatypes` declarations.
3067
+
3068
+ * Deliver HTTP headers via callbacks
3069
+
3070
+ * Unify HTTP interface. This means massive rename of the symbols
3071
+
3072
+ * CCBC-92 release ringbuffer in `lcb_purge_single_server`
3073
+
3074
+ * CCBC-91 Fix switching to backup node in case of server outage
3075
+
3076
+ * CCBC-91 Reset timer for commands with `NOT_MY_VBUCKET` response
3077
+
3078
+ * Fix alignment for sparc platforms
3079
+
3080
+ * Fix win32 build (Add strings.h)
3081
+
3082
+ * Fix build with libyajl available
3083
+
3084
+ * Bundle libvbucket
3085
+
3086
+ * Fix a problem with allocating too few slots in the `backup_nodes`. Fixes
3087
+ illegal memory access.
3088
+
3089
+ * CCBC-90 Fix initialization of backup nodes array. The code switching
3090
+ nodes relies on NULL terminator rather than `nbackup_nodes` variable.
3091
+ Fixes illegal memory access.
3092
+
3093
+ * CCBC-89: Release the memory allocated by the http parser
3094
+
3095
+ ## 1.0.6 (2012-08-30)
3096
+
3097
+ 5 files changed, 18 insertions(+), 5 deletions(-)
3098
+
3099
+ * CCBC-92 release ringbuffer in `libcouchbase_purge_single_server`
3100
+
3101
+ ## 1.0.5 (2012-08-15)
3102
+
3103
+ 6 files changed, 23 insertions(+), 15 deletions(-)
3104
+
3105
+ * CCBC-91 Fix switching to backup node in case of server outage
3106
+
3107
+ * CCBC-91 Reset timer for commands with `NOT_MY_VBUCKET` response
3108
+
3109
+ ## 1.1.0dp9 (2012-07-27)
3110
+
3111
+ 5 files changed, 18 insertions(+), 11 deletions(-)
3112
+
3113
+ * Render auth credentials for View requests.
3114
+ `libcouchbase_make_http_request()` won't accept credentials anymore.
3115
+ It will pick them bucket configuration.
3116
+
3117
+ ## 1.1.0dp8 (2012-07-27)
3118
+
3119
+ 36 files changed, 2093 insertions(+), 704 deletions(-)
3120
+
3121
+ * Allow the client to specify the verbosity level on the servers using
3122
+ `lcb_set_verbosity()` function.
3123
+
3124
+ * Bind timeouts to server sockets instead of commands. This means that
3125
+ from this point timeout interval will be started from the latest IO
3126
+ activity on the socket. This is a behavior change from the 1.0 series.
3127
+
3128
+ * Allow the user to get the number of replicas using
3129
+ `libcouchbase_get_num_replicas()`
3130
+
3131
+ * Allow a user to breakout from the event loop in callbacks using
3132
+ `libcouchbase_breakout()`
3133
+
3134
+ * Make `libcouchbase_wait()` re-entrable
3135
+
3136
+ * Let users detect if the event loop running already using
3137
+ `libcouchbase_is_waiting()` function.
3138
+
3139
+ * CCBC-77 Use separate error code for ENOMEM on the client
3140
+
3141
+ * CCBC-82 Implement read replica
3142
+
3143
+ * CCBC-85 Implement general purpose timers. It is possible for users
3144
+ to define their own timers using `libcouchbase_timer_create()`
3145
+ function. (See headers for more info)
3146
+
3147
+ * Implement multiple timers for windows
3148
+
3149
+ * CCBC-15 Add OBSERVE command
3150
+
3151
+ * Allow users to specify content type for HTTP request
3152
+
3153
+ * Fix to handle the case when View base doesn't have URI schema
3154
+
3155
+ * Separate HTTP callbacks for couch and management requests
3156
+
3157
+ * Claim that server has data in buffers if there are HTTP requests
3158
+ pending. Without this patch the event loop can be stopped
3159
+ prematurely.
3160
+
3161
+ * Add new cbc commands and options:
3162
+
3163
+ * cbc-view (remove couchview example)
3164
+ * cbc-verbosity
3165
+ * cbc-admin
3166
+ * cbc-bucket-delete
3167
+ * cbc-bucket-create
3168
+ * Add -p and -r options to cbc-cp to control persistence (uses
3169
+ OBSERVE internally)
3170
+
3171
+ ## 1.1.0dp7 (2012-06-19)
3172
+
3173
+ 18 files changed, 266 insertions(+), 115 deletions(-)
3174
+
3175
+ * Add support for notification callbacks for configuration changes.
3176
+ Now it is possible to install a hook using function
3177
+ `libcouchbase_set_configuration_callback()`, and be notified about all
3178
+ configuration changes.
3179
+
3180
+ * Implement function to execution management requests. Using
3181
+ `libcouchbase_make_management_request()` function you can configure
3182
+ the cluster, add/remove buckets, rebalance etc. It behaves like
3183
+ `libcouchbase_make_couch_request()` but works with another endpoint.
3184
+
3185
+ * Extract HTTP client. Backward incompatible change in Couchbase View
3186
+ subsystem
3187
+
3188
+ ## 1.1.0dp6 (2012-06-13)
3189
+
3190
+ 20 files changed, 201 insertions(+), 127 deletions(-)
3191
+
3192
+ * CCBC-70 Close dynamic libraries. Fixes small memory leak
3193
+
3194
+ * CCBC-72 Fix compilation on macosx with gtest from homebrew
3195
+
3196
+ * CCBC-71 Implement 'help' command for cbc tool
3197
+
3198
+ * Undefine NDEBUG to avoid asserts to be optimized out
3199
+
3200
+ * Fix win32 builds:
3201
+
3202
+ * Add suffix to cbc command implementations
3203
+ * Fix guards for socket errno macros
3204
+ * Define `size_t` types to fix MSVC 9 build
3205
+ * MSVC 9 isn't C99, but has stddef.h, so just include it
3206
+
3207
+ * CCBC-63 Include types definitions for POSIX systems. Fixes C++
3208
+ builds on some systems.
3209
+
3210
+ ## 1.1.0dp5 (2012-06-06)
3211
+
3212
+ 7 files changed, 65 insertions(+), 9 deletions(-)
3213
+
3214
+ * The library doesn't depend on pthreads (eliminates package lint
3215
+ warnings)
3216
+
3217
+ * Implement 'cbc-hash' to match server/vbucket for given key
3218
+
3219
+ ## 1.1.0dp4 (2012-06-05)
3220
+
3221
+ 8 files changed, 54 insertions(+), 7 deletions(-)
3222
+
3223
+ * cbc: strtoull doesn't exist on win32, therefore use C++ equivalent.
3224
+
3225
+ * integration with Travis-CI
3226
+
3227
+ ## 1.1.0dp3 (2012-06-03)
3228
+
3229
+ 54 files changed, 1874 insertions(+), 824 deletions(-)
3230
+
3231
+ * CCBC-68 Implement `UNLOCK_KEY` (`UNL`) command
3232
+
3233
+ * CCBC-68 Implement `GET_LOCKED` (`GETL`) command
3234
+
3235
+ * hashset.c: iterate over whole set on rehashing. Fixes memory leaks
3236
+ related to hash collisions (905ef95)
3237
+
3238
+ * Destroy view requests items when server get destroyed
3239
+
3240
+ * Do not call View callbacks for cancelled requests
3241
+
3242
+ * Fix `ringbuffer_memcpy()` (36afdb2)
3243
+
3244
+ * CCBC-62 A hang could occur in `libcouchbase_wait()` after the timeout
3245
+ period. Check for breakout condition after purging servers
3246
+
3247
+ * CCBC-65 A small memory leak can occur with frequent calls to
3248
+ `libcouchbase_create()` and `libcouchbase_destroy()`
3249
+
3250
+ * CCBC-64. Timeouts can occur during topology changes, rather than be
3251
+ correctly retried. Send the retry-packet to new server
3252
+
3253
+ * `vbucket_found_incorrect_master()` returns server index
3254
+
3255
+ * Fix `ringbuffer_is_continous()`
3256
+
3257
+ * Pick up cookies from pending buffer unless node connected
3258
+
3259
+ * RCBC-33 A fix for a buffer overflow with the supplied password as
3260
+ has been integrated. While it is a buffer overflow issue, this is
3261
+ not considered to be a possible security issue because the password
3262
+ to the bucket is not commonly supplied by an untrusted source
3263
+
3264
+ ## 1.0.4 (2012-06-01)
3265
+
3266
+ 15 files changed, 330 insertions(+), 76 deletions(-)
3267
+
3268
+ * CCBC-65 A small memory leak can occur with frequent calls to
3269
+ `libcouchbase_create()` and `libcouchbase_destroy()`
3270
+
3271
+ * CCBC-62 A hang could occur in `libcouchbase_wait()` after the timeout
3272
+ period. Check for breakout condition after purging servers
3273
+
3274
+ * CCBC-64. Timeouts can occur during topology changes, rather than be
3275
+ correctly retried. Send the retry-packet to new server
3276
+
3277
+ * [backport] `vbucket_found_incorrect_master()` returns server index.
3278
+ (orig: c32fdae)
3279
+
3280
+ ## 1.0.3 (2012-05-02)
3281
+
3282
+ 6 files changed, 44 insertions(+), 7 deletions(-)
3283
+
3284
+ * [backport] Fix `ringbuffer_is_continous()` (orig: 9cfda9d)
3285
+
3286
+ * [backport] Pick up cookies from pending buffer unless node connected
3287
+ (orig: 463958d)
3288
+
3289
+ * RCBC-33 A fix for a buffer overflow with the supplied password as
3290
+ has been integrated. While it is a buffer overflow issue, this is
3291
+ not considered to be a possible security issue because the password
3292
+ to the bucket is not commonly supplied by an untrusted source
3293
+
3294
+ ## 1.1.0dp2 (2012-04-10)
3295
+
3296
+ 10 files changed, 54 insertions(+), 20 deletions(-)
3297
+
3298
+ * CCBC-59 Don't wait for empty buffers. If called with no operations
3299
+ queued, `libcouchbase_wait()` will block forever. This means that a
3300
+ single threaded application that calls `libcouchbase_wait()` at
3301
+ different times to make sure operations are sent to the server runs
3302
+ the risk of stalling indefinitely. This is a very likely scenario.
3303
+
3304
+ * Don't define `size_t` and `ssize_t` for VS2008
3305
+
3306
+ * Fix segfault while authorizing on protected buckets (211bb04)
3307
+
3308
+ ## 1.1.0dp (2012-04-05)
3309
+
3310
+ 59 files changed, 4374 insertions(+), 1205 deletions(-)
3311
+
3312
+ * This release adds new functionality to directly access Couchbase
3313
+ Server views using the `libcouchbase_make_couch_request()` function.
3314
+ See the associated documentation and header files for more details
3315
+
3316
+ * Check for newer libvbucket
3317
+
3318
+ * MB-4834: Request the tap bytes in a known byte order (adf2b30)
3319
+
3320
+ ## 1.0.2 (2012-03-06)
3321
+
3322
+ 83 files changed, 4095 insertions(+), 654 deletions(-)
3323
+
3324
+ * Implement VERSION command from binary protocol
3325
+
3326
+ * Allow use of libcouchbase to pure memcached clusters by using
3327
+ `libcouchbase_create_compat()` function
3328
+
3329
+ * Always sign deb packages and allow to pass PGP key
3330
+
3331
+ * Bundle the protocol definitions for memcached
3332
+ (`memcached/protocol_binary.h` and `memcached/vbucket.h`) to make it
3333
+ easier to build
3334
+
3335
+ * Bundle sasl client implementation
3336
+
3337
+ * Fix windows build for MS Visual Studio 9
3338
+
3339
+ * define `E*` if missing
3340
+ * stdint header
3341
+
3342
+ * Add support for multiple hosts for the bootstrap URL. A list of
3343
+ hosts:port separated by ';' to the administration port of the
3344
+ couchbase cluster. (ex: "host1;host2:9000;host3" would try to
3345
+ connect to host1 on port 8091, if that fails it'll connect to host2
3346
+ on port 9000 etc)
3347
+
3348
+ * Raise error if <stdint.h> missing
3349
+
3350
+ * Add JSON support for cbc-cp command
3351
+
3352
+ * Add option to set timeout for cbc
3353
+
3354
+ * Added support for '-' to cp
3355
+
3356
+ * Added cbc-verify: verify content in cache with files
3357
+
3358
+ * Now cbc supports better usage messages
3359
+
3360
+ ## 1.0.1 (2012-02-13)
3361
+
3362
+ 65 files changed, 3275 insertions(+), 1329 deletions(-)
3363
+
3364
+ * CCBC-38 Use alternate nodes when current is dead. A fix to allow the
3365
+ client library to failover automatically to other nodes when the
3366
+ initial bootstrap node becomes unavailable has been added. All users
3367
+ are recommended to upgrade for this fix.
3368
+
3369
+ * Fix connect timeouts. Timeouts are per-operation and only set if
3370
+ there is any I/O. The special exception to this is initial
3371
+ connections, which do not necessarily have a data stream or write
3372
+ buffer associated wiht them yet.
3373
+
3374
+ * Update to new MT-safe libvbucket API
3375
+
3376
+ * Add option for embedding libevent IO plugin
3377
+
3378
+ * Fix multi-{get,touch} requests handling when nkeys > 1
3379
+
3380
+ * Allow to build without tools which require C++ compiler
3381
+
3382
+ * Destroy event base if we created it
3383
+
3384
+ * CCBC-51 Check server index before using
3385
+
3386
+ * Handle `PROTOCOL_BINARY_RESPONSE_NOT_MY_VBUCKET` and retry it until
3387
+ success or another error, which can be handled by caller
3388
+
3389
+ * Do not attempt SASL when SASL already in progress
3390
+
3391
+ * Finer grained error reporting for basic REST errors:
3392
+
3393
+ * return `LIBCOUCHBASE_AUTH_ERROR` on HTTP 401
3394
+ * return `LIBCOUCHBASE_BUCKET_ENOENT` on HTTP 404
3395
+ * event loop is stopped (via `maybe_breakout`) on REST error
3396
+
3397
+ * Fixed segfaults and memory access errors on libevent1.4
3398
+
3399
+ * Allow for notification on initial vbucket config. This makes
3400
+ libcouchbase `stop_event_loop` and libcouchbase maybe breakout work
3401
+ properly in cooperative asynchronous event loops. the wait flag is
3402
+ set by `libcouchbase_wait()` and unset by `maybe_breakout`.
3403
+ Additionally, `breakout_vbucket_state_listener` will call
3404
+ `maybe_breakout` as well, instead of having synchronous behavior
3405
+ assumed by `libcouchbase_wait()`
3406
+
3407
+ * Fix `sasl_list_mech_response_handler()`. `sasl_client_start()` expects
3408
+ null-terminated string
3409
+
3410
+ * Refactor: use `libcouchbase_xxxx` for the datatypes
3411
+
3412
+ * Do not notify user about the same error twice. Use command callback
3413
+ when it's possible. (e.g. where the `libcouchbase_server_t` is
3414
+ accessible and we can `libcouchbase_failout_server()`)
3415
+
3416
+ * Install configuration.h for win32
3417
+
3418
+ * CCBC-20 Implement operation timeouts. Timeouts applies for all
3419
+ operations, and the timer starts running from the moment you call
3420
+ the libcouchbase operation you want. The timer includes times for
3421
+ connect/send/ receive, and all of the time our application spend
3422
+ before letting the event loop call callbacks into libcouchbase.
3423
+
3424
+ * Fix double free() error when reading key from packet in handler.c
3425
+ (b5d485a)
3426
+
3427
+ ## 1.0.0 (2012-01-22)
3428
+
3429
+ 170 files changed, 6048 insertions(+), 7553 deletions(-)
3430
+
3431
+ * Allow the user to specify sync mode on an instance
3432
+
3433
+ * Empty string as bucket name should be treated as NULL
3434
+
3435
+ * Bail out if you can't find memcached/vbucket.h and
3436
+ libvbucket/vbucket.h
3437
+
3438
+ * New command cbc. This command intended as the analog of `mem*`
3439
+ tools from libmemcached distribution. Supported commands:
3440
+
3441
+ * cbc-cat
3442
+ * cbc-cp
3443
+ * cbc-create
3444
+ * cbc-flush
3445
+ * cbc-rm
3446
+ * cbc-stats
3447
+ * cbc-send
3448
+ * cbc-receive
3449
+
3450
+ * CCBC-37 allow config for cbc tool to be read from .cbcrc
3451
+
3452
+ * Convert flags to network byte order
3453
+
3454
+ * Remove <memcached/vbucket.h> dependency
3455
+
3456
+ * Use the error handler instead of printing to stderr
3457
+
3458
+ * Disable Views code
3459
+
3460
+ * Don't accept NULL as a valid "callback"
3461
+
3462
+ * Add make targets to build RPM and DEB packages
3463
+
3464
+ * Allow download memcached headers from remote host
3465
+
3466
+ * Added docbook-based manual pages
3467
+
3468
+ * Gracefully update vbucket configuration. This means that the
3469
+ connection listener, could reconfigure data sockets on the fly
3470
+
3471
+ * Allow libcouchbase build with libevent 1.x (verified for 1.4.14)
3472
+
3473
+ * Aggregate flush responses
3474
+
3475
+ * Add stats command
3476
+
3477
+ ## 0.3.0 (2011-11-02)
3478
+
3479
+ 102 files changed, 6188 insertions(+), 1531 deletions(-)
3480
+
3481
+ * Add flush command from binary protocol
3482
+
3483
+ * Remove packet filter
3484
+
3485
+ * Use ringbuffers instead `buffer_t`
3486
+
3487
+ * Win32 build fixes
3488
+
3489
+ * Allow to specify IO framework but using IO plugins
3490
+
3491
+ * CCBC-11 The interface to access views
3492
+
3493
+ * Initial man pages
3494
+
3495
+ * Extend the test suite
3496
+
3497
+ ## 0.2.0 (2011-09-01)
3498
+
3499
+ 85 files changed, 12144 insertions(+)
3500
+
3501
+ * Simple bootstapping which builds HTTP packet and listens
3502
+ /pools/default/buckets/BUCKETNAME directly. Allowed usage of
3503
+ defaults (bucket name, password)
3504
+
3505
+ * Support basic set of binary protocol commands:
3506
+
3507
+ * get (get and touch)
3508
+ * set
3509
+ * increment/decrement
3510
+ * remove
3511
+ * touch
3512
+
3513
+ * MB-3294 Added `_by_key` functions
3514
+
3515
+ * CCBC-5 Fixed abort in `do_read_data` (c=0x7b09bf0) at src/event.c:105
3516
+
3517
+ * Added timings API. It might be possible to turn on timing collection
3518
+ using `libcouchbase_enable_timings()`/`libcouchbase_disable_timings()`,
3519
+ and receive the data in timings callback.
3520
+
3521
+ * Basic TAP protocol implementation
3522
+
3523
+ * Initial win32 support