libcouchbase 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (561) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +1 -0
  5. data/.travis.yml +35 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +24 -0
  8. data/README.md +389 -0
  9. data/Rakefile +75 -0
  10. data/ext/README.md +6 -0
  11. data/ext/Rakefile +20 -0
  12. data/ext/libcouchbase/.gitignore +130 -0
  13. data/ext/libcouchbase/.travis.yml +19 -0
  14. data/ext/libcouchbase/CMakeLists.txt +429 -0
  15. data/ext/libcouchbase/CONTRIBUTING.md +124 -0
  16. data/ext/libcouchbase/LICENSE +202 -0
  17. data/ext/libcouchbase/README.markdown +163 -0
  18. data/ext/libcouchbase/RELEASE_NOTES.markdown +2691 -0
  19. data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +27 -0
  20. data/ext/libcouchbase/cmake/Modules/CopyPDB.cmake +42 -0
  21. data/ext/libcouchbase/cmake/Modules/DistScript.cmake +17 -0
  22. data/ext/libcouchbase/cmake/Modules/DownloadLcbDep.cmake +20 -0
  23. data/ext/libcouchbase/cmake/Modules/FindCouchbaseHdrHistogram.cmake +15 -0
  24. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibev.cmake +73 -0
  25. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibevent.cmake +52 -0
  26. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibuv.cmake +56 -0
  27. data/ext/libcouchbase/cmake/Modules/FindCouchbaseSnappy.cmake +11 -0
  28. data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +29 -0
  29. data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +133 -0
  30. data/ext/libcouchbase/cmake/Modules/GetPlatformCCInfo.cmake +45 -0
  31. data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +70 -0
  32. data/ext/libcouchbase/cmake/config-cmake.h.in +60 -0
  33. data/ext/libcouchbase/cmake/configure +357 -0
  34. data/ext/libcouchbase/cmake/defs.mk.in +8 -0
  35. data/ext/libcouchbase/cmake/dtrace-instr-link.pl +38 -0
  36. data/ext/libcouchbase/cmake/source_files.cmake +73 -0
  37. data/ext/libcouchbase/configure.pl +1 -0
  38. data/ext/libcouchbase/contrib/cJSON/cJSON.c +624 -0
  39. data/ext/libcouchbase/contrib/cJSON/cJSON.h +158 -0
  40. data/ext/libcouchbase/contrib/cbsasl/CMakeLists.txt +9 -0
  41. data/ext/libcouchbase/contrib/cbsasl/COPYING +202 -0
  42. data/ext/libcouchbase/contrib/cbsasl/include/cbsasl/cbsasl.h +217 -0
  43. data/ext/libcouchbase/contrib/cbsasl/src/client.c +205 -0
  44. data/ext/libcouchbase/contrib/cbsasl/src/common.c +46 -0
  45. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.c +67 -0
  46. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.h +33 -0
  47. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.c +296 -0
  48. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.h +45 -0
  49. data/ext/libcouchbase/contrib/cbsasl/src/hash.c +573 -0
  50. data/ext/libcouchbase/contrib/cbsasl/src/hash.h +15 -0
  51. data/ext/libcouchbase/contrib/cbsasl/src/util.h +31 -0
  52. data/ext/libcouchbase/contrib/cliopts/CMakeLists.txt +2 -0
  53. data/ext/libcouchbase/contrib/cliopts/cliopts.c +747 -0
  54. data/ext/libcouchbase/contrib/cliopts/cliopts.h +493 -0
  55. data/ext/libcouchbase/contrib/genhash/genhash.c +372 -0
  56. data/ext/libcouchbase/contrib/genhash/genhash.h +235 -0
  57. data/ext/libcouchbase/contrib/gtest-1.7.0/CHANGES +157 -0
  58. data/ext/libcouchbase/contrib/gtest-1.7.0/CMakeLists.txt +252 -0
  59. data/ext/libcouchbase/contrib/gtest-1.7.0/CONTRIBUTORS +37 -0
  60. data/ext/libcouchbase/contrib/gtest-1.7.0/LICENSE +28 -0
  61. data/ext/libcouchbase/contrib/gtest-1.7.0/MINIFY.sh +15 -0
  62. data/ext/libcouchbase/contrib/gtest-1.7.0/README +435 -0
  63. data/ext/libcouchbase/contrib/gtest-1.7.0/cmake/internal_utils.cmake +227 -0
  64. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-death-test.h +294 -0
  65. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-message.h +250 -0
  66. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h +1421 -0
  67. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h.pump +487 -0
  68. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-printers.h +855 -0
  69. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-spi.h +232 -0
  70. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-test-part.h +179 -0
  71. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-typed-test.h +259 -0
  72. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest.h +2291 -0
  73. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_pred_impl.h +358 -0
  74. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_prod.h +58 -0
  75. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-death-test-internal.h +319 -0
  76. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-filepath.h +206 -0
  77. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-internal.h +1158 -0
  78. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-linked_ptr.h +233 -0
  79. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h +5143 -0
  80. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h.pump +301 -0
  81. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util.h +619 -0
  82. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-port.h +1947 -0
  83. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-string.h +167 -0
  84. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h +1012 -0
  85. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h.pump +339 -0
  86. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h +3331 -0
  87. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h.pump +297 -0
  88. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-all.cc +48 -0
  89. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-death-test.cc +1344 -0
  90. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-filepath.cc +382 -0
  91. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-internal-inl.h +1218 -0
  92. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-port.cc +805 -0
  93. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-printers.cc +363 -0
  94. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-test-part.cc +110 -0
  95. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-typed-test.cc +110 -0
  96. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest.cc +5015 -0
  97. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest_main.cc +38 -0
  98. data/ext/libcouchbase/contrib/http_parser/LICENSE-MIT +23 -0
  99. data/ext/libcouchbase/contrib/http_parser/README.md +178 -0
  100. data/ext/libcouchbase/contrib/http_parser/http_parser.c +2060 -0
  101. data/ext/libcouchbase/contrib/http_parser/http_parser.h +321 -0
  102. data/ext/libcouchbase/contrib/jsonsl/LICENSE +20 -0
  103. data/ext/libcouchbase/contrib/jsonsl/jsonsl.c +1452 -0
  104. data/ext/libcouchbase/contrib/jsonsl/jsonsl.h +971 -0
  105. data/ext/libcouchbase/contrib/lcb-jsoncpp/CMakeLists.txt +6 -0
  106. data/ext/libcouchbase/contrib/lcb-jsoncpp/LICENSE +55 -0
  107. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp-forwards.h +255 -0
  108. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.cpp +4892 -0
  109. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.h +1961 -0
  110. data/ext/libcouchbase/contrib/snappy/CMakeLists.txt +8 -0
  111. data/ext/libcouchbase/contrib/snappy/COPYING +28 -0
  112. data/ext/libcouchbase/contrib/snappy/snappy-c.cc +90 -0
  113. data/ext/libcouchbase/contrib/snappy/snappy-c.h +138 -0
  114. data/ext/libcouchbase/contrib/snappy/snappy-internal.h +150 -0
  115. data/ext/libcouchbase/contrib/snappy/snappy-lcb-msvc.h +5 -0
  116. data/ext/libcouchbase/contrib/snappy/snappy-sinksource.cc +71 -0
  117. data/ext/libcouchbase/contrib/snappy/snappy-sinksource.h +137 -0
  118. data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.cc +42 -0
  119. data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.h +491 -0
  120. data/ext/libcouchbase/contrib/snappy/snappy-stubs-public.h +98 -0
  121. data/ext/libcouchbase/contrib/snappy/snappy.cc +1307 -0
  122. data/ext/libcouchbase/contrib/snappy/snappy.h +184 -0
  123. data/ext/libcouchbase/contrib/win32-defs/iocpdefs.h +133 -0
  124. data/ext/libcouchbase/contrib/win32-defs/mingwdefs.h +4396 -0
  125. data/ext/libcouchbase/contrib/win32-defs/win_stdint.h +258 -0
  126. data/ext/libcouchbase/example/CMakeLists.txt +37 -0
  127. data/ext/libcouchbase/example/README.markdown +47 -0
  128. data/ext/libcouchbase/example/db/db.c +167 -0
  129. data/ext/libcouchbase/example/db/vb.c +227 -0
  130. data/ext/libcouchbase/example/instancepool/main.cc +102 -0
  131. data/ext/libcouchbase/example/instancepool/pool.cc +102 -0
  132. data/ext/libcouchbase/example/instancepool/pool.h +69 -0
  133. data/ext/libcouchbase/example/libeventdirect/main.c +148 -0
  134. data/ext/libcouchbase/example/mcc/mcc.cc +246 -0
  135. data/ext/libcouchbase/example/minimal/minimal.c +130 -0
  136. data/ext/libcouchbase/example/observe/observe.c +146 -0
  137. data/ext/libcouchbase/example/subdoc/subdoc-multi.cc +132 -0
  138. data/ext/libcouchbase/example/subdoc/subdoc-simple.cc +191 -0
  139. data/ext/libcouchbase/example/tick/tick.c +119 -0
  140. data/ext/libcouchbase/example/views/views-example.cc +83 -0
  141. data/ext/libcouchbase/include/libcouchbase/_cxxwrap.h +150 -0
  142. data/ext/libcouchbase/include/libcouchbase/api-legacy.h +1689 -0
  143. data/ext/libcouchbase/include/libcouchbase/api3.h +2 -0
  144. data/ext/libcouchbase/include/libcouchbase/assert.h +44 -0
  145. data/ext/libcouchbase/include/libcouchbase/cbft.h +109 -0
  146. data/ext/libcouchbase/include/libcouchbase/cntl-private.h +356 -0
  147. data/ext/libcouchbase/include/libcouchbase/cntl.h +937 -0
  148. data/ext/libcouchbase/include/libcouchbase/configuration.h.in +23 -0
  149. data/ext/libcouchbase/include/libcouchbase/couchbase.h +3677 -0
  150. data/ext/libcouchbase/include/libcouchbase/deprecated.h +300 -0
  151. data/ext/libcouchbase/include/libcouchbase/error.h +595 -0
  152. data/ext/libcouchbase/include/libcouchbase/http.h +1 -0
  153. data/ext/libcouchbase/include/libcouchbase/iops.h +1050 -0
  154. data/ext/libcouchbase/include/libcouchbase/ixmgmt.h +263 -0
  155. data/ext/libcouchbase/include/libcouchbase/kvbuf.h +132 -0
  156. data/ext/libcouchbase/include/libcouchbase/n1ql.h +364 -0
  157. data/ext/libcouchbase/include/libcouchbase/pktfwd.h +270 -0
  158. data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +367 -0
  159. data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr-inl.c +76 -0
  160. data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr.h +199 -0
  161. data/ext/libcouchbase/include/libcouchbase/subdoc.h +312 -0
  162. data/ext/libcouchbase/include/libcouchbase/sysdefs.h +98 -0
  163. data/ext/libcouchbase/include/libcouchbase/vbucket.h +643 -0
  164. data/ext/libcouchbase/include/libcouchbase/views.h +298 -0
  165. data/ext/libcouchbase/include/libcouchbase/visibility.h +65 -0
  166. data/ext/libcouchbase/include/memcached/COPYING +30 -0
  167. data/ext/libcouchbase/include/memcached/README +10 -0
  168. data/ext/libcouchbase/include/memcached/protocol_binary.h +1916 -0
  169. data/ext/libcouchbase/include/memcached/vbucket.h +42 -0
  170. data/ext/libcouchbase/packaging/README +7 -0
  171. data/ext/libcouchbase/packaging/abicheck/.gitignore +4 -0
  172. data/ext/libcouchbase/packaging/abicheck/Makefile +17 -0
  173. data/ext/libcouchbase/packaging/abicheck/README.md +27 -0
  174. data/ext/libcouchbase/packaging/abicheck/template.xml +3 -0
  175. data/ext/libcouchbase/packaging/deb/compat +1 -0
  176. data/ext/libcouchbase/packaging/deb/control +73 -0
  177. data/ext/libcouchbase/packaging/deb/copyright +10 -0
  178. data/ext/libcouchbase/packaging/deb/libcouchbase-dev.docs +3 -0
  179. data/ext/libcouchbase/packaging/deb/package.mk +31 -0
  180. data/ext/libcouchbase/packaging/deb/rules +46 -0
  181. data/ext/libcouchbase/packaging/deb/source/format +1 -0
  182. data/ext/libcouchbase/packaging/distinfo/README +1 -0
  183. data/ext/libcouchbase/packaging/distinfo/distinfo.cmake.in +4 -0
  184. data/ext/libcouchbase/packaging/dllversion.rc.in +39 -0
  185. data/ext/libcouchbase/packaging/libcouchbase.pc.in +10 -0
  186. data/ext/libcouchbase/packaging/nuget/libcouchbase.autopkg +76 -0
  187. data/ext/libcouchbase/packaging/parse-git-describe.pl +166 -0
  188. data/ext/libcouchbase/packaging/rpm/libcouchbase.spec.in +108 -0
  189. data/ext/libcouchbase/packaging/rpm/package.mk +40 -0
  190. data/ext/libcouchbase/plugins/io/iocp/CMakeLists.txt +9 -0
  191. data/ext/libcouchbase/plugins/io/iocp/iocp_iops.c +466 -0
  192. data/ext/libcouchbase/plugins/io/iocp/iocp_iops.h +217 -0
  193. data/ext/libcouchbase/plugins/io/iocp/iocp_loop.c +295 -0
  194. data/ext/libcouchbase/plugins/io/iocp/iocp_timer.c +79 -0
  195. data/ext/libcouchbase/plugins/io/iocp/iocp_util.c +229 -0
  196. data/ext/libcouchbase/plugins/io/libev/CMakeLists.txt +29 -0
  197. data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +65 -0
  198. data/ext/libcouchbase/plugins/io/libev/plugin-libev.c +289 -0
  199. data/ext/libcouchbase/plugins/io/libevent/CMakeLists.txt +29 -0
  200. data/ext/libcouchbase/plugins/io/libevent/libevent_io_opts.h +67 -0
  201. data/ext/libcouchbase/plugins/io/libevent/plugin-libevent.c +292 -0
  202. data/ext/libcouchbase/plugins/io/libuv/CMakeLists.txt +42 -0
  203. data/ext/libcouchbase/plugins/io/libuv/libuv_compat.h +212 -0
  204. data/ext/libcouchbase/plugins/io/libuv/libuv_io_opts.h +118 -0
  205. data/ext/libcouchbase/plugins/io/libuv/plugin-internal.h +148 -0
  206. data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +648 -0
  207. data/ext/libcouchbase/plugins/io/select/CMakeLists.txt +11 -0
  208. data/ext/libcouchbase/plugins/io/select/plugin-select.c +448 -0
  209. data/ext/libcouchbase/plugins/io/select/select_io_opts.h +39 -0
  210. data/ext/libcouchbase/src/README.md +103 -0
  211. data/ext/libcouchbase/src/aspend.h +106 -0
  212. data/ext/libcouchbase/src/auth.cc +74 -0
  213. data/ext/libcouchbase/src/auth.h +54 -0
  214. data/ext/libcouchbase/src/bootstrap.c +269 -0
  215. data/ext/libcouchbase/src/bootstrap.h +129 -0
  216. data/ext/libcouchbase/src/bucketconfig/bc_cccp.c +495 -0
  217. data/ext/libcouchbase/src/bucketconfig/bc_file.c +347 -0
  218. data/ext/libcouchbase/src/bucketconfig/bc_http.c +630 -0
  219. data/ext/libcouchbase/src/bucketconfig/bc_http.h +82 -0
  220. data/ext/libcouchbase/src/bucketconfig/bc_mcraw.c +150 -0
  221. data/ext/libcouchbase/src/bucketconfig/clconfig.h +681 -0
  222. data/ext/libcouchbase/src/bucketconfig/confmon.c +474 -0
  223. data/ext/libcouchbase/src/callbacks.c +378 -0
  224. data/ext/libcouchbase/src/cbft.cc +210 -0
  225. data/ext/libcouchbase/src/cntl.cc +847 -0
  226. data/ext/libcouchbase/src/config_static.h +159 -0
  227. data/ext/libcouchbase/src/connspec.cc +462 -0
  228. data/ext/libcouchbase/src/connspec.h +105 -0
  229. data/ext/libcouchbase/src/ctx-log-inl.h +27 -0
  230. data/ext/libcouchbase/src/dump.c +98 -0
  231. data/ext/libcouchbase/src/getconfig.c +100 -0
  232. data/ext/libcouchbase/src/gethrtime.c +109 -0
  233. data/ext/libcouchbase/src/handler.c +922 -0
  234. data/ext/libcouchbase/src/hashset.c +164 -0
  235. data/ext/libcouchbase/src/hashset.h +86 -0
  236. data/ext/libcouchbase/src/hashtable.c +75 -0
  237. data/ext/libcouchbase/src/hdr_timings.c +92 -0
  238. data/ext/libcouchbase/src/hostlist.cc +301 -0
  239. data/ext/libcouchbase/src/hostlist.h +171 -0
  240. data/ext/libcouchbase/src/http/http-priv.h +307 -0
  241. data/ext/libcouchbase/src/http/http.cc +633 -0
  242. data/ext/libcouchbase/src/http/http.h +34 -0
  243. data/ext/libcouchbase/src/http/http_io.cc +307 -0
  244. data/ext/libcouchbase/src/instance.cc +722 -0
  245. data/ext/libcouchbase/src/internal.h +244 -0
  246. data/ext/libcouchbase/src/iofactory.c +575 -0
  247. data/ext/libcouchbase/src/jsparse/parser.cc +519 -0
  248. data/ext/libcouchbase/src/jsparse/parser.h +173 -0
  249. data/ext/libcouchbase/src/lcbht/lcbht.c +282 -0
  250. data/ext/libcouchbase/src/lcbht/lcbht.h +199 -0
  251. data/ext/libcouchbase/src/lcbio/connect.c +557 -0
  252. data/ext/libcouchbase/src/lcbio/connect.h +364 -0
  253. data/ext/libcouchbase/src/lcbio/ctx.c +611 -0
  254. data/ext/libcouchbase/src/lcbio/ctx.h +405 -0
  255. data/ext/libcouchbase/src/lcbio/iotable.c +290 -0
  256. data/ext/libcouchbase/src/lcbio/iotable.h +84 -0
  257. data/ext/libcouchbase/src/lcbio/ioutils.c +350 -0
  258. data/ext/libcouchbase/src/lcbio/ioutils.h +203 -0
  259. data/ext/libcouchbase/src/lcbio/lcbio.h +51 -0
  260. data/ext/libcouchbase/src/lcbio/manager.c +584 -0
  261. data/ext/libcouchbase/src/lcbio/manager.h +156 -0
  262. data/ext/libcouchbase/src/lcbio/protoctx.c +84 -0
  263. data/ext/libcouchbase/src/lcbio/rw-inl.h +115 -0
  264. data/ext/libcouchbase/src/lcbio/ssl.h +149 -0
  265. data/ext/libcouchbase/src/lcbio/timer-ng.h +179 -0
  266. data/ext/libcouchbase/src/lcbio/timer.c +132 -0
  267. data/ext/libcouchbase/src/legacy.c +430 -0
  268. data/ext/libcouchbase/src/list.c +144 -0
  269. data/ext/libcouchbase/src/list.h +127 -0
  270. data/ext/libcouchbase/src/logging.c +244 -0
  271. data/ext/libcouchbase/src/logging.h +86 -0
  272. data/ext/libcouchbase/src/mc/compress.c +90 -0
  273. data/ext/libcouchbase/src/mc/compress.h +61 -0
  274. data/ext/libcouchbase/src/mc/forward.c +186 -0
  275. data/ext/libcouchbase/src/mc/forward.h +90 -0
  276. data/ext/libcouchbase/src/mc/iovcursor-inl.h +279 -0
  277. data/ext/libcouchbase/src/mc/iovcursor.h +66 -0
  278. data/ext/libcouchbase/src/mc/mcreq-flush-inl.h +111 -0
  279. data/ext/libcouchbase/src/mc/mcreq.c +954 -0
  280. data/ext/libcouchbase/src/mc/mcreq.h +977 -0
  281. data/ext/libcouchbase/src/mcserver/mcserver.c +784 -0
  282. data/ext/libcouchbase/src/mcserver/mcserver.h +121 -0
  283. data/ext/libcouchbase/src/mcserver/negotiate.c +656 -0
  284. data/ext/libcouchbase/src/mcserver/negotiate.h +119 -0
  285. data/ext/libcouchbase/src/n1ql/ixmgmt.cc +860 -0
  286. data/ext/libcouchbase/src/n1ql/n1ql-internal.h +22 -0
  287. data/ext/libcouchbase/src/n1ql/n1ql.cc +729 -0
  288. data/ext/libcouchbase/src/n1ql/params.cc +215 -0
  289. data/ext/libcouchbase/src/netbuf/netbuf-defs.h +89 -0
  290. data/ext/libcouchbase/src/netbuf/netbuf-mblock.h +235 -0
  291. data/ext/libcouchbase/src/netbuf/netbuf.c +929 -0
  292. data/ext/libcouchbase/src/netbuf/netbuf.h +452 -0
  293. data/ext/libcouchbase/src/newconfig.c +385 -0
  294. data/ext/libcouchbase/src/nodeinfo.cc +194 -0
  295. data/ext/libcouchbase/src/operations/cbflush.c +71 -0
  296. data/ext/libcouchbase/src/operations/counter.c +116 -0
  297. data/ext/libcouchbase/src/operations/durability-cas.c +224 -0
  298. data/ext/libcouchbase/src/operations/durability-seqno.c +157 -0
  299. data/ext/libcouchbase/src/operations/durability.c +668 -0
  300. data/ext/libcouchbase/src/operations/durability_internal.h +199 -0
  301. data/ext/libcouchbase/src/operations/get.c +409 -0
  302. data/ext/libcouchbase/src/operations/observe-seqno.c +96 -0
  303. data/ext/libcouchbase/src/operations/observe.c +340 -0
  304. data/ext/libcouchbase/src/operations/pktfwd.c +86 -0
  305. data/ext/libcouchbase/src/operations/remove.c +83 -0
  306. data/ext/libcouchbase/src/operations/stats.c +461 -0
  307. data/ext/libcouchbase/src/operations/store.c +360 -0
  308. data/ext/libcouchbase/src/operations/subdoc.cc +510 -0
  309. data/ext/libcouchbase/src/operations/touch.c +81 -0
  310. data/ext/libcouchbase/src/packetutils.c +60 -0
  311. data/ext/libcouchbase/src/packetutils.h +147 -0
  312. data/ext/libcouchbase/src/probes.d +211 -0
  313. data/ext/libcouchbase/src/rdb/bigalloc.c +225 -0
  314. data/ext/libcouchbase/src/rdb/bigalloc.h +73 -0
  315. data/ext/libcouchbase/src/rdb/chunkalloc.c +174 -0
  316. data/ext/libcouchbase/src/rdb/libcalloc.c +94 -0
  317. data/ext/libcouchbase/src/rdb/rope.c +419 -0
  318. data/ext/libcouchbase/src/rdb/rope.h +488 -0
  319. data/ext/libcouchbase/src/retrychk.c +113 -0
  320. data/ext/libcouchbase/src/retryq.c +424 -0
  321. data/ext/libcouchbase/src/retryq.h +157 -0
  322. data/ext/libcouchbase/src/ringbuffer.c +442 -0
  323. data/ext/libcouchbase/src/ringbuffer.h +100 -0
  324. data/ext/libcouchbase/src/settings.c +95 -0
  325. data/ext/libcouchbase/src/settings.h +188 -0
  326. data/ext/libcouchbase/src/simplestring.c +211 -0
  327. data/ext/libcouchbase/src/simplestring.h +228 -0
  328. data/ext/libcouchbase/src/sllist-inl.h +197 -0
  329. data/ext/libcouchbase/src/sllist.h +76 -0
  330. data/ext/libcouchbase/src/ssl/CMakeLists.txt +23 -0
  331. data/ext/libcouchbase/src/ssl/ssl_c.c +415 -0
  332. data/ext/libcouchbase/src/ssl/ssl_common.c +454 -0
  333. data/ext/libcouchbase/src/ssl/ssl_e.c +408 -0
  334. data/ext/libcouchbase/src/ssl/ssl_iot_common.h +180 -0
  335. data/ext/libcouchbase/src/ssobuf.h +82 -0
  336. data/ext/libcouchbase/src/strcodecs/base64.c +123 -0
  337. data/ext/libcouchbase/src/strcodecs/strcodecs.h +285 -0
  338. data/ext/libcouchbase/src/timings.c +208 -0
  339. data/ext/libcouchbase/src/trace.h +105 -0
  340. data/ext/libcouchbase/src/utilities.c +171 -0
  341. data/ext/libcouchbase/src/vbucket/CMakeLists.txt +2 -0
  342. data/ext/libcouchbase/src/vbucket/aliases.h +35 -0
  343. data/ext/libcouchbase/src/vbucket/crc32.h +83 -0
  344. data/ext/libcouchbase/src/vbucket/hash.h +30 -0
  345. data/ext/libcouchbase/src/vbucket/json-inl.h +112 -0
  346. data/ext/libcouchbase/src/vbucket/ketama.c +66 -0
  347. data/ext/libcouchbase/src/vbucket/rfc1321/global.h +32 -0
  348. data/ext/libcouchbase/src/vbucket/rfc1321/md5.h +35 -0
  349. data/ext/libcouchbase/src/vbucket/rfc1321/md5c-inl.h +335 -0
  350. data/ext/libcouchbase/src/vbucket/vbucket.c +1543 -0
  351. data/ext/libcouchbase/src/views/docreq.c +194 -0
  352. data/ext/libcouchbase/src/views/docreq.h +83 -0
  353. data/ext/libcouchbase/src/views/viewreq.c +358 -0
  354. data/ext/libcouchbase/src/views/viewreq.h +36 -0
  355. data/ext/libcouchbase/src/wait.c +161 -0
  356. data/ext/libcouchbase/tests/CMakeLists.txt +140 -0
  357. data/ext/libcouchbase/tests/basic/t_base64.cc +81 -0
  358. data/ext/libcouchbase/tests/basic/t_ccbc103.cc +95 -0
  359. data/ext/libcouchbase/tests/basic/t_connstr.cc +404 -0
  360. data/ext/libcouchbase/tests/basic/t_creds.cc +32 -0
  361. data/ext/libcouchbase/tests/basic/t_ctlcodes.cc +92 -0
  362. data/ext/libcouchbase/tests/basic/t_hashset.cc +262 -0
  363. data/ext/libcouchbase/tests/basic/t_host.cc +198 -0
  364. data/ext/libcouchbase/tests/basic/t_jsparse.cc +137 -0
  365. data/ext/libcouchbase/tests/basic/t_jsparse.h +589 -0
  366. data/ext/libcouchbase/tests/basic/t_list.cc +155 -0
  367. data/ext/libcouchbase/tests/basic/t_logger.cc +65 -0
  368. data/ext/libcouchbase/tests/basic/t_misc.cc +24 -0
  369. data/ext/libcouchbase/tests/basic/t_n1qlstrings.cc +18 -0
  370. data/ext/libcouchbase/tests/basic/t_netbuf.cc +446 -0
  371. data/ext/libcouchbase/tests/basic/t_packet.cc +222 -0
  372. data/ext/libcouchbase/tests/basic/t_ringbuffer.cc +278 -0
  373. data/ext/libcouchbase/tests/basic/t_slist.cc +429 -0
  374. data/ext/libcouchbase/tests/basic/t_strerror.cc +64 -0
  375. data/ext/libcouchbase/tests/basic/t_string.cc +112 -0
  376. data/ext/libcouchbase/tests/basic/t_urlencode.cc +132 -0
  377. data/ext/libcouchbase/tests/check-all.cc +608 -0
  378. data/ext/libcouchbase/tests/htparse/t_basic.cc +193 -0
  379. data/ext/libcouchbase/tests/ioserver/connection.cc +166 -0
  380. data/ext/libcouchbase/tests/ioserver/future.cc +50 -0
  381. data/ext/libcouchbase/tests/ioserver/ioserver.cc +104 -0
  382. data/ext/libcouchbase/tests/ioserver/ioserver.h +478 -0
  383. data/ext/libcouchbase/tests/ioserver/socket.cc +88 -0
  384. data/ext/libcouchbase/tests/ioserver/ssl_connection.cc +145 -0
  385. data/ext/libcouchbase/tests/ioserver/threads-pthreads.cc +119 -0
  386. data/ext/libcouchbase/tests/ioserver/threads-win32.cc +117 -0
  387. data/ext/libcouchbase/tests/ioserver/threads.h +66 -0
  388. data/ext/libcouchbase/tests/iotests/iotests.h +15 -0
  389. data/ext/libcouchbase/tests/iotests/mock-environment.cc +524 -0
  390. data/ext/libcouchbase/tests/iotests/mock-environment.h +385 -0
  391. data/ext/libcouchbase/tests/iotests/mock-unit-test.cc +67 -0
  392. data/ext/libcouchbase/tests/iotests/mock-unit-test.h +61 -0
  393. data/ext/libcouchbase/tests/iotests/serverparams.h +76 -0
  394. data/ext/libcouchbase/tests/iotests/t_arithmetic.cc +143 -0
  395. data/ext/libcouchbase/tests/iotests/t_behavior.cc +226 -0
  396. data/ext/libcouchbase/tests/iotests/t_configcache.cc +117 -0
  397. data/ext/libcouchbase/tests/iotests/t_confmon.cc +241 -0
  398. data/ext/libcouchbase/tests/iotests/t_durability.cc +1059 -0
  399. data/ext/libcouchbase/tests/iotests/t_forward.cc +110 -0
  400. data/ext/libcouchbase/tests/iotests/t_get.cc +512 -0
  401. data/ext/libcouchbase/tests/iotests/t_http.cc +438 -0
  402. data/ext/libcouchbase/tests/iotests/t_iops.cc +175 -0
  403. data/ext/libcouchbase/tests/iotests/t_lock.cc +275 -0
  404. data/ext/libcouchbase/tests/iotests/t_misc.cc +713 -0
  405. data/ext/libcouchbase/tests/iotests/t_mutate.cc +609 -0
  406. data/ext/libcouchbase/tests/iotests/t_n1ql.cc +270 -0
  407. data/ext/libcouchbase/tests/iotests/t_netfail.cc +654 -0
  408. data/ext/libcouchbase/tests/iotests/t_obseqno.cc +157 -0
  409. data/ext/libcouchbase/tests/iotests/t_regression.cc +321 -0
  410. data/ext/libcouchbase/tests/iotests/t_sched.cc +88 -0
  411. data/ext/libcouchbase/tests/iotests/t_serverops.cc +230 -0
  412. data/ext/libcouchbase/tests/iotests/t_smoke.cc +528 -0
  413. data/ext/libcouchbase/tests/iotests/t_subdoc.cc +822 -0
  414. data/ext/libcouchbase/tests/iotests/t_syncmode.cc +64 -0
  415. data/ext/libcouchbase/tests/iotests/t_views.cc +405 -0
  416. data/ext/libcouchbase/tests/iotests/testutil.cc +250 -0
  417. data/ext/libcouchbase/tests/iotests/testutil.h +163 -0
  418. data/ext/libcouchbase/tests/mc/mctest.h +119 -0
  419. data/ext/libcouchbase/tests/mc/pktmaker.h +101 -0
  420. data/ext/libcouchbase/tests/mc/t_alloc.cc +269 -0
  421. data/ext/libcouchbase/tests/mc/t_context.cc +100 -0
  422. data/ext/libcouchbase/tests/mc/t_flush.cc +185 -0
  423. data/ext/libcouchbase/tests/mc/t_forward.cc +239 -0
  424. data/ext/libcouchbase/tests/mc/t_ioflush.cc +102 -0
  425. data/ext/libcouchbase/tests/mc/t_iovcursor.cc +173 -0
  426. data/ext/libcouchbase/tests/mocksupport/procutil.c +305 -0
  427. data/ext/libcouchbase/tests/mocksupport/procutil.h +89 -0
  428. data/ext/libcouchbase/tests/mocksupport/server.c +391 -0
  429. data/ext/libcouchbase/tests/mocksupport/server.h +72 -0
  430. data/ext/libcouchbase/tests/mocksupport/timeout.c +69 -0
  431. data/ext/libcouchbase/tests/nonio_tests.cc +23 -0
  432. data/ext/libcouchbase/tests/rdb/rdbtest.h +133 -0
  433. data/ext/libcouchbase/tests/rdb/t_basic.cc +128 -0
  434. data/ext/libcouchbase/tests/rdb/t_bigalloc.cc +93 -0
  435. data/ext/libcouchbase/tests/rdb/t_refs.cc +112 -0
  436. data/ext/libcouchbase/tests/socktests/socktest.cc +347 -0
  437. data/ext/libcouchbase/tests/socktests/socktest.h +448 -0
  438. data/ext/libcouchbase/tests/socktests/t_basic.cc +143 -0
  439. data/ext/libcouchbase/tests/socktests/t_ctx.cc +73 -0
  440. data/ext/libcouchbase/tests/socktests/t_manager.cc +179 -0
  441. data/ext/libcouchbase/tests/socktests/t_putex.cc +256 -0
  442. data/ext/libcouchbase/tests/socktests/t_read.cc +187 -0
  443. data/ext/libcouchbase/tests/socktests/t_reentrant.cc +143 -0
  444. data/ext/libcouchbase/tests/socktests/t_ssl.cc +80 -0
  445. data/ext/libcouchbase/tests/socktests/t_write.cc +95 -0
  446. data/ext/libcouchbase/tests/start_mock.bat +15 -0
  447. data/ext/libcouchbase/tests/start_mock.sh +42 -0
  448. data/ext/libcouchbase/tests/unit_tests.cc +43 -0
  449. data/ext/libcouchbase/tests/vbucket/confdata/bad.json +101 -0
  450. data/ext/libcouchbase/tests/vbucket/confdata/full_25.json +363 -0
  451. data/ext/libcouchbase/tests/vbucket/confdata/memd_25.json +90 -0
  452. data/ext/libcouchbase/tests/vbucket/confdata/memd_30.json +1 -0
  453. data/ext/libcouchbase/tests/vbucket/confdata/memd_45.json +1 -0
  454. data/ext/libcouchbase/tests/vbucket/confdata/terse_25.json +291 -0
  455. data/ext/libcouchbase/tests/vbucket/confdata/terse_30.json +1 -0
  456. data/ext/libcouchbase/tests/vbucket/t_config.cc +341 -0
  457. data/ext/libcouchbase/tools/CMakeLists.txt +51 -0
  458. data/ext/libcouchbase/tools/cbc-handlers.h +462 -0
  459. data/ext/libcouchbase/tools/cbc-n1qlback.cc +439 -0
  460. data/ext/libcouchbase/tools/cbc-pillowfight.cc +822 -0
  461. data/ext/libcouchbase/tools/cbc.cc +1541 -0
  462. data/ext/libcouchbase/tools/common/histogram.cc +43 -0
  463. data/ext/libcouchbase/tools/common/histogram.h +23 -0
  464. data/ext/libcouchbase/tools/common/my_inttypes.h +22 -0
  465. data/ext/libcouchbase/tools/common/options.cc +420 -0
  466. data/ext/libcouchbase/tools/common/options.h +81 -0
  467. data/ext/libcouchbase/tools/docgen/docgen.h +469 -0
  468. data/ext/libcouchbase/tools/docgen/loc.h +210 -0
  469. data/ext/libcouchbase/tools/docgen/placeholders.h +211 -0
  470. data/ext/libcouchbase/tools/docgen/seqgen.h +94 -0
  471. data/lib/libcouchbase.rb +36 -0
  472. data/lib/libcouchbase/bucket.rb +819 -0
  473. data/lib/libcouchbase/callbacks.rb +72 -0
  474. data/lib/libcouchbase/connection.rb +790 -0
  475. data/lib/libcouchbase/design_docs.rb +86 -0
  476. data/lib/libcouchbase/error.rb +68 -0
  477. data/lib/libcouchbase/ext/libcouchbase.rb +1135 -0
  478. data/lib/libcouchbase/ext/libcouchbase/cmdbase.rb +23 -0
  479. data/lib/libcouchbase/ext/libcouchbase/cmdcounter.rb +36 -0
  480. data/lib/libcouchbase/ext/libcouchbase/cmdendure.rb +26 -0
  481. data/lib/libcouchbase/ext/libcouchbase/cmdfts.rb +24 -0
  482. data/lib/libcouchbase/ext/libcouchbase/cmdget.rb +30 -0
  483. data/lib/libcouchbase/ext/libcouchbase/cmdgetreplica.rb +49 -0
  484. data/lib/libcouchbase/ext/libcouchbase/cmdhttp.rb +58 -0
  485. data/lib/libcouchbase/ext/libcouchbase/cmdn1ql.rb +40 -0
  486. data/lib/libcouchbase/ext/libcouchbase/cmdobseqno.rb +33 -0
  487. data/lib/libcouchbase/ext/libcouchbase/cmdobserve.rb +30 -0
  488. data/lib/libcouchbase/ext/libcouchbase/cmdstore.rb +40 -0
  489. data/lib/libcouchbase/ext/libcouchbase/cmdstoredur.rb +45 -0
  490. data/lib/libcouchbase/ext/libcouchbase/cmdsubdoc.rb +49 -0
  491. data/lib/libcouchbase/ext/libcouchbase/cmdverbosity.rb +29 -0
  492. data/lib/libcouchbase/ext/libcouchbase/cmdviewquery.rb +61 -0
  493. data/lib/libcouchbase/ext/libcouchbase/contigbuf.rb +14 -0
  494. data/lib/libcouchbase/ext/libcouchbase/create_st.rb +15 -0
  495. data/lib/libcouchbase/ext/libcouchbase/create_st0.rb +23 -0
  496. data/lib/libcouchbase/ext/libcouchbase/create_st1.rb +26 -0
  497. data/lib/libcouchbase/ext/libcouchbase/create_st2.rb +32 -0
  498. data/lib/libcouchbase/ext/libcouchbase/create_st3.rb +26 -0
  499. data/lib/libcouchbase/ext/libcouchbase/crst_u.rb +20 -0
  500. data/lib/libcouchbase/ext/libcouchbase/durability_opts_st_v.rb +11 -0
  501. data/lib/libcouchbase/ext/libcouchbase/durability_opts_t.rb +14 -0
  502. data/lib/libcouchbase/ext/libcouchbase/durabilityopt_sv0.rb +63 -0
  503. data/lib/libcouchbase/ext/libcouchbase/enums.rb +991 -0
  504. data/lib/libcouchbase/ext/libcouchbase/fragbuf.rb +18 -0
  505. data/lib/libcouchbase/ext/libcouchbase/ftshandle.rb +7 -0
  506. data/lib/libcouchbase/ext/libcouchbase/histogram.rb +34 -0
  507. data/lib/libcouchbase/ext/libcouchbase/http_request_t.rb +7 -0
  508. data/lib/libcouchbase/ext/libcouchbase/keybuf.rb +20 -0
  509. data/lib/libcouchbase/ext/libcouchbase/multicmd_ctx.rb +30 -0
  510. data/lib/libcouchbase/ext/libcouchbase/mutation_token.rb +17 -0
  511. data/lib/libcouchbase/ext/libcouchbase/n1qlhandle.rb +7 -0
  512. data/lib/libcouchbase/ext/libcouchbase/n1qlparams.rb +7 -0
  513. data/lib/libcouchbase/ext/libcouchbase/respbase.rb +29 -0
  514. data/lib/libcouchbase/ext/libcouchbase/respcounter.rb +32 -0
  515. data/lib/libcouchbase/ext/libcouchbase/respendure.rb +49 -0
  516. data/lib/libcouchbase/ext/libcouchbase/respfts.rb +40 -0
  517. data/lib/libcouchbase/ext/libcouchbase/respget.rb +44 -0
  518. data/lib/libcouchbase/ext/libcouchbase/resphttp.rb +48 -0
  519. data/lib/libcouchbase/ext/libcouchbase/respmcversion.rb +38 -0
  520. data/lib/libcouchbase/ext/libcouchbase/respn1ql.rb +41 -0
  521. data/lib/libcouchbase/ext/libcouchbase/respobseqno.rb +52 -0
  522. data/lib/libcouchbase/ext/libcouchbase/respobserve.rb +41 -0
  523. data/lib/libcouchbase/ext/libcouchbase/respserverbase.rb +32 -0
  524. data/lib/libcouchbase/ext/libcouchbase/respstats.rb +38 -0
  525. data/lib/libcouchbase/ext/libcouchbase/respstore.rb +32 -0
  526. data/lib/libcouchbase/ext/libcouchbase/respstoredur.rb +38 -0
  527. data/lib/libcouchbase/ext/libcouchbase/respsubdoc.rb +35 -0
  528. data/lib/libcouchbase/ext/libcouchbase/respviewquery.rb +67 -0
  529. data/lib/libcouchbase/ext/libcouchbase/sdentry.rb +22 -0
  530. data/lib/libcouchbase/ext/libcouchbase/sdspec.rb +26 -0
  531. data/lib/libcouchbase/ext/libcouchbase/t.rb +7 -0
  532. data/lib/libcouchbase/ext/libcouchbase/valbuf.rb +22 -0
  533. data/lib/libcouchbase/ext/libcouchbase/valbuf_u_buf.rb +14 -0
  534. data/lib/libcouchbase/ext/libcouchbase/viewhandle.rb +7 -0
  535. data/lib/libcouchbase/ext/libcouchbase_iocp.rb +26 -0
  536. data/lib/libcouchbase/ext/libcouchbase_libuv.rb +18 -0
  537. data/lib/libcouchbase/ext/tasks.rb +87 -0
  538. data/lib/libcouchbase/n1ql.rb +73 -0
  539. data/lib/libcouchbase/query_full_text.rb +147 -0
  540. data/lib/libcouchbase/query_n1ql.rb +121 -0
  541. data/lib/libcouchbase/query_view.rb +129 -0
  542. data/lib/libcouchbase/results_fiber.rb +262 -0
  543. data/lib/libcouchbase/results_native.rb +211 -0
  544. data/lib/libcouchbase/version.rb +5 -0
  545. data/libcouchbase.gemspec +61 -0
  546. data/spec/bucket_spec.rb +270 -0
  547. data/spec/connection_spec.rb +277 -0
  548. data/spec/design_docs_spec.rb +23 -0
  549. data/spec/error_spec.rb +26 -0
  550. data/spec/fts_spec.rb +129 -0
  551. data/spec/n1ql_spec.rb +201 -0
  552. data/spec/results_libuv_spec.rb +229 -0
  553. data/spec/results_native_spec.rb +259 -0
  554. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/design.json +1 -0
  555. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/data-0000.cbb +0 -0
  556. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/failover.json +1 -0
  557. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/meta.json +1 -0
  558. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/seqno.json +1 -0
  559. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/snapshot_markers.json +1 -0
  560. data/spec/view_spec.rb +195 -0
  561. metadata +775 -0
@@ -0,0 +1,2691 @@
1
+ # Release Notes
2
+
3
+ ## 2.6.3 (September 27 2016)
4
+
5
+ * Fix memory corruption for some JSON APIs when no rows are returned.
6
+ This fixes a bug where the JSON parser would read from garbage memory when
7
+ parsing a response that had no rows, but due to a slow network, would be
8
+ received in multiple chunks.
9
+ This affects N1QL, CBFT, and View APIs.
10
+ * Priority: Major
11
+ * Issues: [CCBC-721](https://issues.couchbase.com/browse/CCBC-721)
12
+
13
+ * Allow to adjust bytes to read per event loop iteration.
14
+ This allows applications with high network throughput but low CPU capacity
15
+ to prevent the library from oversaturating a specific event callback invocation
16
+ or starve other sockets. It may be controlled through the `read_chunk_size`
17
+ connection string option or via `lcb_cntl_string`.
18
+ * Priority: Major
19
+ * Issues: [CCBC-568](https://issues.couchbase.com/browse/CCBC-568)
20
+
21
+ * Use `htonll` for CAS values.
22
+ This allows a consistent representation of CAS values regardless of underlying
23
+ platform. This allows interoperability between other SDKs with respect to
24
+ exchanging CAS values. This however may break interoperability with older
25
+ versions of the same SDK, if the CAS value is being passed around (which it
26
+ shouldn't be).
27
+
28
+ * New subdocument additions.
29
+ This adds the `LCB_SUBDOC_F_MKDOCUMENT` flag which allows document creation
30
+ if the document does not exist, and can be used for mutation operations which
31
+ may create new paths or values. The `LCB_SUBDOC_CMD_GET_COUNT` is also added,
32
+ which is a new command which retrieves the number of elements (for an array)
33
+ or key-value items (within an object/dictionary) of a given path.
34
+ Both these features require Couchbase Server 4.6 (or its prereleases).
35
+ * Priority: Major
36
+ * Issues: [CCBC-718](https://issues.couchbase.com/browse/CCBC-718)
37
+
38
+ ## 2.6.2 (July 26 2016)
39
+
40
+ * Don't crash on high number of FDs with select plugin. Because `select(2)`
41
+ can only accomodate up to a certain number of file descriptors in the
42
+ application, if opening a socket results in a too-high-numbered FD, the
43
+ plugin will return an error rather than silently failing during polling.
44
+ * Priority: Major
45
+ * Issues: [CCBC-567](https://issues.couchbase.com/browse/CCBC-567)
46
+
47
+ * Pillowfight can now set ttl (expiry). This is done via the `-e` or `--expiry`
48
+ option.
49
+ * Priority: Major
50
+ * Issues: [CCBC-637](https://issues.couchbase.com/browse/CCBC-637)
51
+
52
+ * Log URLs of HTTP requests. This may make it easier to debug some HTTP-based
53
+ APIs. The URLs are printed as part of the `TRACE` logging level.
54
+ * Priority: Major
55
+ * Issues: [CCBC-641](https://issues.couchbase.com/browse/CCBC-641)
56
+
57
+ * Fix crash on shutdown with completion-based I/O. The crash was a result
58
+ of dereferencing the `lcb_t` after it had been destroyed. This bug affected
59
+ completion-based I/O subsystems such as libuv and IOCP.
60
+ * Priority: Major
61
+ * Issues: [CCBC-707](https://issues.couchbase.com/browse/CCBC-707)
62
+
63
+ * Do not require `operation` field to be set on `lcb_CMDSTORE`.
64
+ Starting from this version, a new `lcb_storage_t` constant, `LCB_UPSERT`
65
+ has been added with a value of 0. This means that upsert operations no
66
+ longer need to explicitly use `LCB_SET`, it being the default.
67
+ * Priority: Major
68
+ * Issues: [CCBC-545](https://issues.couchbase.com/browse/CCBC-545)
69
+
70
+ ## 2.6.1 (June 21 2016)
71
+
72
+ * Index management API now properly handles 'fields' field. Previously this
73
+ was treated as a csv string, when it is in fact a JSON array.
74
+
75
+ * `pillowfight` now has a `--populate-only` option, which is useful when simply
76
+ trying to populate buckets with large amounts of data.
77
+
78
+ * Allow to bypass OpenSSL initialization. This allows applications which already
79
+ have OpenSSL intialization code in place to suppress libcouchbase's own
80
+ OpenSSL initialization code. You can disable SSL initialization by using
81
+ `ssl=no_global_init` in the connection string.
82
+
83
+ * Allow to toggle sending of multiple credentials in N1QL queries.
84
+ You can use the `LCB_CMD_F_MULTIAUTH` in the `lcb_CMDN1QL::cmdflags` field
85
+ to indicate that multiple credentials should be added. Otherwise only the
86
+ current bucket's credentials will be sent.
87
+
88
+ * Fix infinite loop on completion (UV,nodejs,IOCP) type IO plugins.
89
+ This bug would be triggered when only a single server remained in the cluster
90
+ and that single server failed. This would result in the client never being
91
+ able to perform operations due to a delayed reference count decrement.
92
+ * Priority: Major
93
+ * Issues: [CCBC-704](https://issues.couchbase.com/browse/CCBC-704)
94
+
95
+ ## 2.6.0 (May 17 2016)
96
+
97
+ * Improve index management API and implementation. The `rawjson` field was
98
+ being ignored and the `condition` field was missing as well.
99
+
100
+ * Add pillowfight support for subdoc. At the simplest level you can simply
101
+ invoke pillowfight as `cbc-pillowfight --subdoc --json <other args>`.
102
+ Refer to the pillowfight documentation for more details.
103
+
104
+ ## 2.5.8 (April 19 2016)
105
+
106
+ * Fix SSL connectivity errors with views and HTTP bootstrapping.
107
+ This would cause network connectivity issues when attempting to bootstrap
108
+ via `https://` or using views (`lcb_view_query()`). The fix is a workaround
109
+ to not advertise older SSL encryption methods.
110
+ * Priority: Major
111
+ * Issues: [CCBC-688](https://issues.couchbase.com/browse/CCBC-688)
112
+
113
+ * Do not abort when receiving a memcached EINVAL response.
114
+ While the client should never end up in a situation where it receives an
115
+ `EINVAL` from the server, it should nevertheless not terminate the execution
116
+ of the current process. This bug was introduced in 2.5.6
117
+ * Issues: [CCBC-689](https://issues.couchbase.com/browse/CCBC-689)
118
+
119
+ * Fix memory leak when using N1QL prepared statements.
120
+ Prepared statements would never be freed, even when the client handle was
121
+ destroyed (`lcb_destroy()`) causing a slight memory leak.
122
+
123
+ * Append CRLF header after host header.
124
+ This would sometimes result in odd HTTP headers being sent out.
125
+ * Issues: [CCBC-694](https://issues.couchbase.com/browse/CCBC-694)
126
+
127
+ * Experimental CBFT (Full-Text search API)
128
+ This version adds a new fulltext api. The API is a row-based API similar
129
+ to N1QL and MapReduce. See the `<libcouchbase/cbft.h>` header for more details.
130
+ The API is experimental and subject to change.
131
+ * Issues: [CCBC-638](https://issues.couchbase.com/browse/CCBC-638)
132
+
133
+ * Allow additional client identifier for HELLO command.
134
+ The SDK sends a version string to the server when doing initial negotiation.
135
+ The server then uses this string in the context of any logging messages
136
+ pertaining to that connection. In this version, a new setting has been added
137
+ to allow 'user-defined' version strings to be appended to the logs. Note that
138
+ this feature is intended only for use with wrapping SDKs such as Python, node.js
139
+ and PHP so that their versions can be present in the log messages as well.
140
+ This setting is exposed as a string control (in the connection string, or
141
+ `lcb_cntl_string()` with the name of `client_string`.
142
+ * Issues: [CCBC-693](https://issues.couchbase.com/browse/CCBC-693)
143
+
144
+ * vBucket retry logic changes.
145
+ The client will now retry at constant 100ms rate when receiving not-my-vbucket
146
+ error replies from the server (adjustable using `retry_nmv_interval`).
147
+ It will also only use fast-forward map to determine the new location for the
148
+ vbucket, and will not use extended hueristics.
149
+
150
+ The most noteworthy user-visible change is the 100ms retry interval which
151
+ will significantly decrease the network traffic used by the SDK
152
+ during a rebalance.
153
+
154
+ To restore the pre-2.5.8 behavior (i.e. use extended heuristics and and
155
+ exponential retry rate), specify `vb_noguess=false`.
156
+ * Priority: Major
157
+ * Issues: [CCBC-660](https://issues.couchbase.com/browse/CCBC-660)
158
+
159
+ * Add interface for multi-bucket authentication.
160
+ A new API has been added to modify and add additional bucket/password
161
+ pairs in the library. This is done using `lcb_cntl` and the `LCB_CNTL_BUCKET_CRED`
162
+ setting.
163
+
164
+ Note that this functionality is not yet used in N1QL queries due to
165
+ [MB-16964](https://issues.couchbase.com/browse/MB-16964)
166
+ * Priority: Minor
167
+ * Issues: [CCBC-661](https://issues.couchbase.com/browse/CCBC-661)
168
+
169
+
170
+ ## 2.5.7 (March 22 2016)
171
+
172
+ * High-level index management operations.
173
+ A volatile API for high level index management operations has been added to
174
+ assist in common N1QL index operations such as creating the primary index
175
+ and removing indexes.
176
+ * Priority: Major
177
+ * Issues: [CCBC-662](https://issues.couchbase.com/browse/CCBC-662)
178
+
179
+ * Fix N1QL mutation token queries.
180
+ This fixes some bugs in the previous implementation of the way mutation tokens
181
+ were handled with `lcb_N1QLPARAMS`. The bugs and fixes only affect consumers
182
+ of that API. Couchbase SDKs do not consume this API
183
+ * Priority: Minor
184
+ * Issues: [CCBC-658](https://issues.couchbase.com/browse/CCBC-658)
185
+
186
+ * Throttle config request retries on empty NMVB responses.
187
+ This changes the previous behavior where a new configuration would be
188
+ retrieved _immediately_ upon a not-my-vbucket reply if a configuration
189
+ was not included within the error reply itself. The new behavior is to
190
+ request a delayed retry (i.e. subject to the default throttle settings)
191
+ if the current configuration originated from the CCCP (Memcached) provider.
192
+ * Priority: Major
193
+ * Issues: [CCBC-681](https://issues.couchbase.com/browse/CCBC-681)
194
+
195
+ * Rename `LCB_CLIENT_ETMPFAIL` to `LCB_CLIENT_ENOCONF`.
196
+ This error code is returned only when there is no current client configuration.
197
+ This error condition is _not_ temporary and is actually fatal; a result of
198
+ an initial bootstrapping failure. Note that the older name is still valid
199
+ in older code for compatibility purposes.
200
+ * Priority: Minor
201
+ * Issues: [CCBC-679](https://issues.couchbase.com/browse/CCBC-679)
202
+
203
+ * Include PID in log messages on OS X.
204
+ This makes the library logs (via `LCB_LOGLEVEL` etc.) easier to read on a
205
+ mac. Previously this used to display only the thread ID, which was identical
206
+ for multiple processes. Now the display reads as _pid/tid_, making it easier
207
+ to read the logs in a multi-process environment.
208
+ * Priority: Minor
209
+ * Issues: [CCBC-677](https://issues.couchbase.com/browse/CCBC-677)
210
+
211
+
212
+ ## 2.5.6 (February 18 2016)
213
+
214
+ * Sub-Document API (_experimental_)
215
+ The client-side sub-document API has been implemented. Sub-document is
216
+ a feature which vastly reduces network usage when operating on parts
217
+ of documents.
218
+ The API as it appears in this version is highly experimental and may
219
+ (and likely will) change. Examples of use can be found in the `examples/subdoc`
220
+ directory.
221
+ * Priority: Major
222
+
223
+ * Make `lcb_sched_enter` and `lcb_sched_leave` optional.
224
+ When scheduling an operation (e.g. `lcb_get3()`), the scheduling function
225
+ will implicitly create a scheduling context and submit the operation if
226
+ none exists already. A scheduling context is explicitly created by calling
227
+ `lcb_sched_enter()` and finished by calling `lcb_sched_leave()` or
228
+ `lcb_sched_fail()`.
229
+ * Issues: [CCBC-664](https://issues.couchbase.com/browse/CCBC-664)
230
+ * Priority: Major
231
+
232
+ * API3 is now stable.
233
+ The scheduling based API, introduced in version 2.4.0 and known as 'api3',
234
+ is now stable and considered the API for use with the library.
235
+ The previous API (i.e. 'api2') is considered deprecated.
236
+
237
+ While API3 has been promoted to stable in this version, it has been available
238
+ in its current form (and in a mostly compatible manner, _except_ the implicit
239
+ scheduling feature - CCBC-664) since 2.4.0.
240
+
241
+ Storing an item in API2:
242
+
243
+ lcb_get_store_t cmd = { 0 }, *cmd_p = &cmd;
244
+ cmd.v.v0.key = "key";
245
+ cmd.v.v0.nkey = 3;
246
+ cmd.v.v0.bytes = "value";
247
+ cmd.v.v0.nbytes = 5;
248
+ cmd.v.v0.operation = LCB_SET;
249
+ lcb_store(instance, NULL, 1, &cmd_p);
250
+
251
+ Storing an item in API3:
252
+
253
+ lcb_CMDSTORE cmd = { 0 };
254
+ LCB_CMD_SET_KEY(&cmd, "key", 3);
255
+ LCB_CMD_SET_VALUE(&cmd, "value", 5);
256
+ cmd.operation - LCB_SET;
257
+ lcb_store3(instance, NULL, &cmd);
258
+
259
+
260
+ * Add `libcouchbase/` string to version identification to Memcached
261
+ Connections to memcached will now be identified as `libcouchbase/version`
262
+ rather than `version`. This increases readability for server logs
263
+ * Issues: [CCBC-656](https://issues.couchbase.com/browse/CCBC-656)
264
+ * Priority: Minor
265
+
266
+ * Hide `mutation_token` field from API3 mutation respones. The `mutation_token`
267
+ field has never been part of the API itself (it was previously present when
268
+ api3 was marked as "experimental").
269
+ The mutation token for any operation must now be retrieved using the
270
+ `lcb_resp_get_mutation_token()` to retrieve the actual mutation token.
271
+ * Issues: [CCBC-671](https://issues.couchbase.com/browse/CCBC-671)
272
+ * Priority: Minor
273
+
274
+ * Server's `PROTOCOL_BINARY_RESPONSE_EINTERNAL` is no longer mapped to
275
+ `LCB_EINTERNAL`. `LCB_UNKNOWN_MEMCACHED_ERROR` will be returned instead
276
+
277
+ * Allow get-and-touch with an expiry of 0.
278
+ Clearing a document's expiry with `get` is now possible, using the new
279
+ `LCB_CMDGET_F_CLEAREXP` in `lcb_CMDGET::cmdflags`.
280
+ * Issues: [CCBC-667](https://issues.couchbase.com/browse/CCBC-667)
281
+ * Priority: Major
282
+
283
+ * Allow multiple buckets when using sequence number consistency with N1QL
284
+ This uses the new internal `scan_vector` protocol supporting multiple buckets,
285
+ each providing their own `lcb_MUTATION_TOKEN` objects.
286
+ * Issues: [CCBC-658](https://issues.couchbase.com/browse/CCBC-658)
287
+ * Priority: Major
288
+
289
+ ## 2.5.5 (January 12 2016)
290
+
291
+ * Add `retry_interval` string option to adjust retry interval.
292
+ This allows the setting to be modified via `lcb_cntl_string()` and specified
293
+ in the connection string.
294
+ * Priority: Major
295
+ * Issues: [CCBC-654](https://issues.couchbase.com/browse/CCBC-654)
296
+
297
+ * Handle backslashes in view row ID fields.
298
+ This would previously not be handled correctly as the backslashes would not
299
+ be removed, for example an ID of `has_a_"quote` would appear in the API as
300
+ `has_a_\"quote`. This has been fixed and document IDs are now properly
301
+ processed as JSON
302
+ * Priority: Major
303
+ * Issues: [CCBC-649](https://issues.couchbase.com/browse/CCBC-649)
304
+
305
+ * Allow 'file-only' configuration mode.
306
+ This allows applications to make the library instance exclusively configured
307
+ from a file on the local filesystem rather than through network bootstrap.
308
+ This feature is undocumented and unsupported. It may be enabled using the
309
+ `bootstrap_on=file_only` connection string directive.
310
+ * Priority: Major
311
+ * Issues: [CCBC-652](https://issues.couchbase.com/browse/CCBC-652)
312
+
313
+ * Log when squashing network errors.
314
+ This will make the library log the original error whenever a network error
315
+ is translated from a more detailed description into `LCB_NETWORK_ERROR`
316
+ (in case `detailed_errcodes` is not enabled), or if an OS-level error is
317
+ found which cannot be translated into a more specific library error.
318
+ * Priority: Major
319
+
320
+ * Fix memcached/ketama hashing
321
+ This fixes a bug in the ketama hasing code which caused a key to be mapped
322
+ to an effectively arbitrary server for the library instance. In practice the
323
+ node a key was mapped to depended on the order in which the hosts were
324
+ specified in the connection string. This has been fixed to always use
325
+ hashing based on the lexical sort order of each server node.
326
+ It is highly recommended that applications upgrade to this version (2.5.5)
327
+ for proper memcached (cache) bucket functionality.
328
+ * Priority: Critical
329
+ * Issues: [CCBC-653](https://issues.couchbase.com/browse/CCBC-653)
330
+
331
+ * Add `cbc-touch` subcommand.
332
+ This now allows the simple "touching", or modifying expiration time via the
333
+ `cbc` command line client.
334
+ * Priority: Major
335
+ * Issues: [CCBC-651](https://issues.couchbase.com/browse/CCBC-651)
336
+
337
+
338
+ ## 2.5.4 (November 25 2015)
339
+
340
+ * Validate vBucket master nodes for bounds when receiving new configuration.
341
+ This ensures that invalid configurations (addressing nodes which do not
342
+ exist) do not make their way to KV routing operations.
343
+ * Priority: Major
344
+ * Issues: [CCBC-643](https://issues.couchbase.com/browse/CCBC-643)
345
+
346
+ * Add `lcb_strcbtype` to print the name of the callback type
347
+ This small convenience function is added to pretty-print the type
348
+ of callback being invoked. The second argument to the callback can be passed
349
+ to this function.
350
+ * Priority: Minor
351
+
352
+ * Disallow using `certpath` connection string option without explicit SSL
353
+ (`couchbases://`) scheme. Since the SSL and non-SSL schemes are similar,
354
+ a typo can let a user mistakenly think that SSL is being used. This is
355
+ fixed by disallowing the other SSL option (`certpath`) when SSL is not
356
+ enabled.
357
+ * Priority: Minor
358
+ * Issues: [CCBC-644](https://issues.couchbase.com/browse/CCBC-644)
359
+
360
+ * Add convenience function to retrieve hostname for key.
361
+ This is an alternative to retrieving the vBucket configuration (via `lcb_cntl()`)
362
+ and mapping the key to an index, and mapping the index to a node. Note that
363
+ hostnames are sufficient for most but not all configurations. Those running
364
+ multiple server instances on the same host (for example, `cluster_run`) will
365
+ still need to use the full set of steps as this function does not return a
366
+ port. This function is provided both as a vBucket API (`lcbvb_get_hostname()`)
367
+ which retrieves the hostname for an index as well as a top-level instance
368
+ (`lcb_t`) function (`lcb_get_keynode()`) which accepts a key buffer and length.
369
+ * Priority: Minor
370
+
371
+ * Ensure embedded jsoncpp does not throw exceptions.
372
+ This caused some build issues with other build systems. This has been fixed
373
+ by replacing any exception throwing code with `abort()` and `assert()`
374
+ statements.
375
+ * Priority: Minor
376
+ * Issues: [CCBC-634](https://issues.couchbase.com/browse/CCBC-634)
377
+
378
+ * Log vBucket configuration parsing failures.
379
+ This logs vBucket configuration parsing failures when a given config received
380
+ could not be parsed. Parsing failures include both JSON syntax errors as well
381
+ as improper fields or values within the config itself.
382
+ * Priority: Major
383
+ * Issues: [CCBC-647](https://issues.couchbase.com/browse/CCBC-647)
384
+
385
+ * Allow per-request N1QL timeouts to exceed global timeouts.
386
+ This scans the `"timeout"` property of the N1QL request and if set, will
387
+ make the value of this property the timeout value for the request. A small
388
+ parser was implemented which converted the N1QL timeout values (`s`, `h`, etc.)
389
+ into microseconds.
390
+ * Priority: Major
391
+ * Issues: [CCBC-660](https://issues.couchbase.com/browse/CCBC-660)
392
+
393
+ * Request configuration refresh when HTTP API redirects are received.
394
+ Redirects in Couchbase Server are sent when a node is about to exit the
395
+ cluster. We should take this as a sign to refresh the config since it indicates
396
+ a node is about to be removed.
397
+ * Priority: Major
398
+ * Issues: [CCBC-646](https://issues.couchbase.com/browse/CCBC-646)
399
+
400
+
401
+ ## 2.5.3 (August 27 2015)
402
+
403
+ * Add N1QL timeout feature.
404
+ This allows an independent timeout setting for N1QL. Previously this would
405
+ use the views timeout.
406
+ * Priority: Major
407
+ * Issues: [CCBC-631](https://issues.couchbase.com/browse/CCBC-631)
408
+
409
+ * Add N1QL prepared statements.
410
+ This allows prepared statements to be used with N1QL. The library will
411
+ maintain an internal "prepared statement cache" which contains cached
412
+ responses for internal PREPARE requests. To use a prepared statement, an
413
+ application can simply set the `LCB_CMDN1QL_F_PREPCACHE` bit in the
414
+ `cmdflags` field within the `lcb_CMDN1QL` structure. All the rest is
415
+ handled internally within the library.
416
+ * Priority: Major
417
+ * Issues: [CCBC-633](https://issues.couchbase.com/browse/CCBC-633)
418
+
419
+ ## 2.5.2 (July 23 2015)
420
+
421
+ * Fix off-by-one error when populating documents with pillowfight.
422
+ Previously pillowfight would only populate N-1 documents where N
423
+ is the (`-I`, `--num-items`) option. This has been fixed.
424
+ * Priority: Minor
425
+
426
+ * Don't generate negative keys for pillowfight.
427
+ For certain option configurations, pillowfight would generate negative keys
428
+ (some keys were in the format of -nnnnnn).
429
+ * Priority: Minor
430
+
431
+ * Allow in-progress N1QL requests to be cancelled.
432
+ This allows in-progress N1QL requests to be cancelled by adding a new API,
433
+ `lcb_n1ql_cancel()`. Invoking this function on an `lcb_N1QLHANDLE` handle
434
+ (obtained via an _out_ parameter in the command structure) will effectively
435
+ stop the request and stop delivering callbacks to the user.
436
+ * Priority: Major
437
+ * Issues: [CCBC-619](https://issues.couchbase.com/browse/CCBC-619)
438
+
439
+ * Rename `lcb_SYNCTOKEN` to `lcb_MUTATION_TOKEN`.
440
+ This experimental (volatile) API has been renamed to "Mutation Token" to
441
+ better reflect naming conventions found in other client libraries.
442
+ * Priority: Minor
443
+
444
+ * Implement histogram/timings information for N1QL queries via `cbc-n1qlback`.
445
+ This adds support for the (`-T`, `--timings`) option in the
446
+ `cbc-n1qlback` benchmark/stress-test utility. These timings reflect the
447
+ latency between issuing the query and the receipt of the first row of the
448
+ resultset.
449
+ * Priority: Major
450
+ * Issues: [CCBC-624](https://issues.couchbase.com/browse/CCBC-624)
451
+
452
+ * Add (`-M`, `--mode`) option to `cbc-create` to allow for upsert, insert, etc.
453
+ This allows `cbc-create` to use the full gamut of storage options available
454
+ via the SDK by allowing an insert/upsert/replace mode as an argument to the
455
+ new `--mode` option. `append` and `prepend` are now also provided as options,
456
+ though not documented.
457
+ * Priority: Major
458
+ * Issues: [CCBC-625](https://issues.couchbase.com/browse/CCBC-625)
459
+
460
+ * Support `CBC_CONFIG` environment variable for command line tools.
461
+ This variable specifies a path to an alternate `cbcrc` file which may be
462
+ used to provide cluster/bucket settings. This new option allows multiple
463
+ configurations to coexist, without forcing any one of them to be inside the
464
+ user's home directory.
465
+ * Priority: Minor
466
+ * Issues: [CCBC-626](https://issues.couchbase.com/browse/CCBC-626)
467
+
468
+
469
+ ## 2.5.1 (June 17 2015)
470
+
471
+ Bug fixes and improvements in 2.5.1
472
+
473
+ * Fix hanging in durability operations if node is not present and constraints
474
+ include failed node. This condition may be triggered when only a single node
475
+ remains in the broadcast probe and a command sent to it could not be scheduled.
476
+ A symptom of this bug was durability operations 'hanging'
477
+ * Priority: Major
478
+ * Issues: [CCBC-607](http://issues.couchbase.com/browse/CCBC-607)
479
+
480
+ * Improved handling of topology changes when non-data (N1QL, Index) nodes are
481
+ part of the cluster. This fixes some issues (mainly crashes) when non-data
482
+ nodes are found inside the cluster during a topology change. While the library
483
+ since version 2.4.8 was able to handle initial bootstrapping with non-data
484
+ nodes, it would still crash when such nodes were encountered during
485
+ configuration changes.
486
+ * Priority: Major
487
+ * Issues: [CCBC-609](http://issues.couchbase.com/browse/CCBC-609),
488
+ [CCBC-612](http://issues.couchbase.com/browse/CCBC-612)
489
+
490
+ * Improved random host selection algorithm for REST services
491
+ This new algorithm ensures that the distribution is even among all _eligible_
492
+ nodes for a given service. The old algorithm would only distribute evenly when
493
+ the assumption that all nodes contained the same services were true. However
494
+ this assumption is no longer necessarily true with Couchbase 4.0. In this case
495
+ the algorithm ensures that the random selection inspects only the pool of
496
+ nodes which are known to have a given service enabled.
497
+ * Priority: Major
498
+ * Issues: [CCBC-611](http://issues.couchbase.com/browse/CCBC-611)
499
+
500
+ * Ensure ketama/Memcached-bucket hashing works correctly when non-data nodes
501
+ are part of the cluster. In previous versions, ketama hashing would incorrectly
502
+ consider all nodes as candidates for keys, which would result in some items
503
+ being routed to non-data nodes, resulting in odd errors and inaccessible
504
+ data. This is only an issue for the still-unreleased Couchbase 4.0.
505
+ * Priority: Major
506
+ * Issues: [CCBC-613](http://issues.couchbase.com/browse/CCBC-613)
507
+
508
+ * Set `TCP_NODELAY` as a server side option, if it's enabled on the client.
509
+ This uses the `HELLO` protocol functionality to enable this feature, if
510
+ this feature is also enabled on the client (enabled by default).
511
+
512
+
513
+ New features in 2.5.1
514
+
515
+ * Add `cmake/configure` option for enabling the embedding of the libevent
516
+ plugin. This option, named `--enable-embedded-libevent-plugin`, will cause
517
+ the plugin to be linked in with the core library (_libcouchbase_) rather
518
+ than built as its own object
519
+ * Priority: Minor
520
+
521
+ * Add new combined "Store-with-durability" operation. This new API, called
522
+ `lcb_storedur3()` allows specifying the storage input options as well as
523
+ the associated durability options in a single command. Likewise, the status
524
+ of the operation (including durability) is returned in the operation's
525
+ callback.
526
+ * Priority: Major
527
+ * Issues: [CCBC-616](http://issues.couchbase.com/browse/CCBC-616)
528
+
529
+
530
+ ## 2.5.0 (May 12 2015)
531
+
532
+ This change in the major version number signals the addition of new features
533
+ for Couchbase Server 4.0; most of the actual new functionality for Couchbase
534
+ 4.0 has already been included (incrementally) in prior 2.4.x versions. The
535
+ new 2.5 version is built on the 2.4.x codebase.
536
+
537
+ * Add `cbc-n1qlback` - a simple benchmark for N1QL queries. This functions
538
+ by executing a line-delimited file containing query bodies using multiple
539
+ threads if possible.
540
+ * Priority: Major
541
+ * Issues: [CCBC-604](http://issues.couchbase.com/browse/CCBC-604)
542
+
543
+ * `TCP_NODELAY` functionality has now been placed into effect. This
544
+ functionality was nominally present in prior versions, but would not work
545
+ because of a typo.
546
+ * Priority: Minor
547
+
548
+ * Add 'tick' or 'pump' mode for I/O
549
+ As an alternative to `lcb_wait()`, applications may call `lcb_tick_nowait()`
550
+ to incrementally perform (non-blocking) I/O. This may provide a performance
551
+ boost when batching/scheduling many operations. `lcb_wait()` itself must be
552
+ called to guarantee completion of all operations, and the `lcb_tick_nowait()`
553
+ functionality is only available on some I/O plugins. See the API docs for
554
+ more information.
555
+ * Priority: Major
556
+ * Issues: [CCBC-598](http://issues.couchbase.com/browse/CCBC-598)
557
+
558
+ * Allow "console logger" to log to a file
559
+ As a convenience, it is now possible to direct the library to write to
560
+ a log file rather than standard error. This is possible using the
561
+ `LCB_CNTL_CONLOGGER_FP` (to programmatically set a `FILE*` value via
562
+ `lcb_cntl()`) or `console_log_file` to set the path of the file (which
563
+ will be overwritten) via `lcb_cntl_string()` or the connection string.
564
+
565
+ * Make `lcb_N1QLPARAMS` repeatable/debuggable
566
+ This allows the `lcb_n1p_mkcmd()` call to be invoked multiple times without
567
+ actually modifying internal state. Previously calling this function twice
568
+ would result in corruption of the internal parameter state. In this version,
569
+ a new function, `lcb_n1p_encode()` has been added (which `lcb_n1p_mkcmd()`
570
+ wraps) which may be used to inspect the encoded form of the query.
571
+
572
+ ## 2.4.9 (April 14 2015)
573
+
574
+ * Disable HTTP provider when any CCCP config is received.
575
+ This makes the assumption that CCCP will always be available if even a
576
+ single node provides an HTTP configuration. This change may break some
577
+ corner-case upgrade scenarios from version 2.2 to 2.5 where a newly added
578
+ 2.5 node is subsequently removed.
579
+ * Priority: Major
580
+ * Issues: [CCBC-526](http://issues.couchbase.com/browse/CCBC-526),
581
+ [CCBC-589](http://issues.couchbase.com/browse/CCBC-589)
582
+
583
+ * Fix additional missing defines for UV's `EAI_*` symbols
584
+ This was not entirely fixed in 2.4.8, since some undefined macros still
585
+ remained.
586
+ * Priority: Major
587
+ * Issues: [CCBC-596](http://issues.couchbase.com/browse/CCBC-596)
588
+
589
+ * Make connection string timeout parameters (e.g. `operation_timeout`) always
590
+ specify seconds; this will no longer require the decimal point to be used,
591
+ but will break any prior usages of this value for microseconds.
592
+ * Priority: Minor
593
+ * Issues: [CCBC-597](http://issues.couchbase.com/browse/CCBC-597)
594
+
595
+ * Add `cbc n1ql` subcommand, which executes N1QL queries.
596
+ This subcommand is still a bit rough around the edges, mainly because of
597
+ server-side support for "pretty=false" (which makes the rows display rather
598
+ weirdly).
599
+ * Priority: Major
600
+ * Issues: [CCBC-595](http://issues.couchbase.com/browse/CCBC-595)
601
+
602
+ * Allow usage of `-D` option in `cbc` and `cbc-pillowfight` tools.
603
+ This flag allows specifying connection string options in a more
604
+ concise form on the commandline. The `-D` option may be specified
605
+ multiple times in the form of `-Doption=value`.
606
+ * Priority: Minor
607
+
608
+ * Interpret `couchbase://host:8091` connection string as `couchbase://host`
609
+ Previously the library would treat `8091` as a memcached port. While technically
610
+ correct according to the connection string semantics, would often be a
611
+ source of confusion for users migrating from older versions of the library
612
+ (or other SDKs) when using the form `http://host:8091`. A special provision
613
+ is thus made for such a cas.
614
+ * Priority: Major
615
+ * Issues: [CCBC-599](http://issues.couchbase.com/browse/CCBC-599)
616
+
617
+ * Implement enhanced durability using sequence numbers.
618
+ This feature is available in Couchbase 4.0, and uses sequence numbers
619
+ (optionally specified in the response packet of each mutation).
620
+ sequence-based durability constraints help resolve some ambiguity in
621
+ the case of checking the durability of items which have since been
622
+ mutated, or in the case of a cluster failover. Using this functionality
623
+ requires the `LCB_CNTL_FETCH_SYNCTOKENS` (or `fetch_synctokens`) and the
624
+ `LCB_CNTL_DURABILITY_SYNCTOKENS` (or `dur_synctokens`)
625
+ settings to be enabled (using `lcb_cntl()` or `lcb_cntl_string()`, or
626
+ in the connection string). Enabling `LCB_CNTL_FETCH_SYNCTOKENS` will
627
+ cause mutation response packets from the server to return an additional
628
+ 16 bytes of sequence data, and enabling `LCB_CNTL_DURABILITY_SYNCTOKENS`
629
+ will cause `lcb_durability_poll()` to transparently use this information
630
+ (rather than the CAS) to check for persistence/replication.
631
+ **Only available in Couchbase 4.0**. As a result of this feature, much
632
+ of the durability subsystem itself has been rewritten, making durability
633
+ overall more performant, even for CAS-based durability.
634
+ * Priority: Major
635
+ * Issues: [CCBC-569](http://issues.couchbase.com/browse/CCBC-569)
636
+
637
+ * Add `lcb_version_g` extern symbol as alternative to `lcb_get_version()`.
638
+ This symbol is an extern global which allows simple runtime checking of
639
+ the library version. This is more convenient than `lcb_get_version()` as
640
+ it avoids the requirement to create a temporary variable on the stack
641
+ (`lcb_get_version()` returns a string, and requires an `lcb_U32` pointer
642
+ as its first argument to get the actual numeric version).
643
+ * Priority: Minor
644
+
645
+
646
+ ## 2.4.8 (Mar. 8 2015)
647
+
648
+ * Retry next nodes on initial bootstrap, even if first node says bucket does
649
+ not exist (or auth error), as this might be a recently removed node
650
+ * Priority: Major
651
+ * Issues: [CCBC-577](http://issues.couchbase.com/browse/CCBC-577)
652
+
653
+ * The `cbc` and `cbc-pillowfight` binaries on Windows are now distributed
654
+ in both _release_ and _debug_ variants. Previously they would be clobbered
655
+ by one or the other depending on the build host. This fixes some issues in
656
+ performance and dependency resolution when using these libraries.
657
+ * Priority: Minor
658
+ * Issues: [CCBC-581](http://issues.couchbase.com/browse/CCBC-581)
659
+
660
+ * Provide Read-Only config cache mode. In this mode the configuration cache
661
+ file is read but never updated. Additionally, a missing file in this mode
662
+ results in a hard error.
663
+ * Priority: Major
664
+ * Issues: [CCBC-584](http://issues.couchbase.com/browse/CCBC-584)
665
+
666
+ * Keep vBucket heuristic guesses for limited periods of time.
667
+ This will allow previously-learned vBucket master locations to persist
668
+ over a configuration change, providing these changes were discovered
669
+ recently. This allows the reduction of not-my-vbucket responses while
670
+ allowing new configs to overwrite our heuristic info, if the heuristic is
671
+ too old.
672
+ * Priority: Major
673
+
674
+ * Fix potential crashes in get-with-replica (`lcb_rget3`, `lcb_get_replica`)
675
+ when there are no replicas available, or if there is an error in retrieving
676
+ from one of the replicas.
677
+ * Priority: Major
678
+ * Issues: [CCBC-586](http://issues.couchbase.com/browse/CCBC-586)
679
+
680
+ * Do not wait between not-my-vbucket retries
681
+ This behavior restores the pre 2.4.0 behavior of retrying not-my-vbucket
682
+ responses, with a more intelligent retry/rotation algorithm (see the
683
+ release note about "vbucket map heuristics"). Previously a wait-time
684
+ was introduced because of potential busy loops in retrying to the same
685
+ node. The `LCB_CNTL_RETRY_NMV_IMM` setting can be used to disable this
686
+ functionality (by disabling it, i.e. setting it to 0). This may also be
687
+ disabled in the connection string via `retry_nmv_imm=0`.
688
+ * Priority: Major
689
+ * Issues: [CCBC-588](http://issues.couchbase.com/browse/CCBC-588)
690
+
691
+ * Fix compilation error with UV when `EAI_BADHINTS` is not defined in the
692
+ system. This is primarily an issue with newer UV versions and some versions
693
+ of Linux
694
+ * Priority: Major
695
+ * Issues: [CCBC-590](http://issues.couchbase.com/browse/CCBC-590)
696
+
697
+ * Allow means to disable C++ behavior on public library structures, allowing
698
+ them to be initialized via C-style static initializers.
699
+ This allows the zeroing of structures such as `lcb_get_cmd_t cmd = { 0 }`,
700
+ which would ordinarily fail under C++ compilation because of that structure
701
+ having a defined C++ constructor. Applications can take advantage of this
702
+ feature by defining the `LCB_NO_DEPR_CXX_CTORS` preprocessor macro when
703
+ compiling.
704
+ * Priority: Major
705
+ * Issues: [CCBC-591](http://issues.couchbase.com/browse/CCBC-591)
706
+
707
+ * Fix some bugs in timing behavior (`lcb_enable_timings`). Timings between
708
+ 1000-2000ms are now reported accurately. Additionally for more common
709
+ handling, second timing ranges (between 1-9s) are reported in ms range
710
+ (i.e. timings of 4 seconds are reported as 3000-4000ms ).
711
+ * Priority: Minor
712
+ * Issues: [CCBC-582](http://issues.couchbase.com/browse/CCBC-582)
713
+
714
+
715
+ ## 2.4.7 (Feb. 17 2015)
716
+
717
+ * Fix SSL connection failures with `SSL_UNDEFINED_CONST_FUNCTION`.
718
+ This would sometimes cause failures during early connection/negotiation
719
+ stages.
720
+ * Priority: Major
721
+ * Issues: [CCBC-571](http://issues.couchbase.com/browse/CCBC-571)
722
+
723
+ * Add _experimental_ support for N1QL queries.
724
+ This adds support for contacting N1QL endpoints and retrieving their
725
+ result sets. The support at both the client and server components is
726
+ still a work in progress.
727
+ The API is similar to the view api (see `lcb_view_query()`) added in
728
+ version 2.4.6. See details in `<libcouchbase/n1ql.h>`
729
+ * Priority: Major
730
+ * Issues: [CCBC-572](http://issues.couchbase.com/browse/CCBC-572)
731
+
732
+ * Add _experimental_ support for geospatial view queries.
733
+ GeoSpatial views are available as an experimental feature in the
734
+ current releases of the server. This will soon be offered as a
735
+ stable feature in future releases.
736
+ Applications may now use the `lcb_RESPVIEWQUERY::geometry` field
737
+ and the `LCB_CMDVIEWQUERY_F_SPATIAL` to utilize geospatial views.
738
+ * Priority: Major
739
+ * Issues: [CCBC-573](http://issues.couchbase.com/browse/CCBC-573)
740
+
741
+ * Fix memory leak for retried commands.
742
+ In cases where a given command needs to be retried more than once, a
743
+ memory leak was fixed in which the previous instance of the pacekt was
744
+ not properly freed.
745
+ * Priority: Major
746
+ * Issues: [CCBC-574](http://issues.couchbase.com/browse/CCBC-574)
747
+
748
+ ## 2.4.6 (January 20 2015)
749
+
750
+ * Fix floating point exception on OS X.
751
+ A floating point exception would sometimes be thrown on OS X sytems due
752
+ to bad time structure initialization. The installation provided with
753
+ homebrew for 2.4.5 fixed this issue. This is completely fixed in 2.4.6
754
+ Priority: Major
755
+
756
+ * Improve warning messages when using deprecated options in `cbc`.
757
+ This provides less ambiguous help messages when using deprecated options,
758
+ showing a full and complete example for proper usage (when possible).
759
+ * Priority: Minor
760
+ * Issues: [CCBC-562](http://issues.couchbase.com/browse/CCBC-562)
761
+
762
+ * Add patch/micro version to DLL information on Windows.
763
+ This lets the user see the exact version of the library on windows (via
764
+ right clicking on the DLL and inspecting the details). Previously this
765
+ information contained only the major and minor versions.
766
+ * Priority: Minor
767
+ * Issues: [CCBC-563](http://issues.couchbase.com/browse/CCBC-563)
768
+
769
+ * Provide _pkgconfig_ (`.pc`) file with installation.
770
+ This may help third party applications and libraries link against libcouchbase
771
+ in some environments.
772
+
773
+ * Provide one-off `unsafe_optimize` option for connection string/`lcb_cntl`.
774
+ This provides a shorter way to enable some potentially unsafe optimizations
775
+ which may make the client perform better in some scenarios.
776
+ * Priority: Minor
777
+
778
+ * Allow prompting for password in `cbc`.
779
+ The `cbc` and `cbc-pillowfight` utilities will now securely prompt for the
780
+ password if the password specified on the commandline is a hyphen (`-`).
781
+ * Priority: Minor
782
+ * Issues: [CCBC-565](http://issues.couchbase.com/browse/CCBC-565)
783
+
784
+ * Fix timeouts in some durability when not all replicas are online.
785
+ The library will now fail the operation with `LCB_DURABILITY_ETOOMANY`
786
+ rather than allowing the operation to timeout.
787
+ * Priority: Major
788
+ * Issues: [CCBC-560](http://issues.couchbase.com/browse/CCBC-560)
789
+
790
+ * Add high level row-based view functionality.
791
+ This adds a new API (currently considered _volatile_) which allows
792
+ intelligently querying views. This builds atop the basic HTTP
793
+ interface, and exposes a row-based callback API based upon
794
+ streaming JSON parsing. The new API is defined in `<libcouchbase/views.h>`.
795
+ This API will become more stable over time.
796
+ * Priority: Major
797
+ * Issues: [CCBC-100](http://issues.couchbase.com/browse/CCBC-100)
798
+
799
+ * Parse configuration service locations for experimental services
800
+ This exposes the N1QL and indexing services via the _lcbvb_ API. See
801
+ `libcouchbase/vbucket.h` for more information.
802
+
803
+ ## 2.4.5 (December 17 2014)
804
+
805
+ * Fix `pillowfight` ignoring `set-ratio` values above 50
806
+ The program would ignore these values and act as if 100 was specified,
807
+ thus never issuing any GET operations
808
+ * Priority: Minor
809
+ * Issues: [CCBC-550](http://couchbase.com/issues/browse/CCBC-550)
810
+
811
+ * Building with autotools is no longer supported.
812
+ If building the library from source, you _must_ use
813
+ [CMake](http://cmake.org/download) version 2.8.9 or greater. If unfamiliar
814
+ with CMake, the README describes the process. Included also is a top-level
815
+ script called `configure.pl` which functions with an autoconf-like interface.
816
+ * Priority: Major
817
+
818
+ * Fix customized IOPS crashes in some usage cases
819
+ This fixes scenarios where applications assume that the built-in IOPS version
820
+ is 0, and attempt to "Subclass" the IOPS structure. The internal version of
821
+ the library structure is now 3, with some extra heuristics in place to ensure
822
+ that the older code will still function.
823
+ This issue was most visible in the Python SDK when using the gevent or Twisted
824
+ plugins.
825
+ This issue was first introduced with version 2.4.4
826
+ * Priority: Critical
827
+ * Issues: [CCBC-557](http://couchbase.com/issues/browse/CCBC-557)
828
+
829
+ * Allow raw `certpath` to be passed without need for percent-encoding (in most cases)
830
+ This allows for a common pattern fo passing `certpath` in the connection string as
831
+ a raw, unencoded path. This allows a user to do
832
+ `couchbases://host/bucket?certpath=/foo/bar/baz`.
833
+
834
+ * Fix missing installation UV plugin headers and source
835
+ In 2.4.4 this was accidentally left out, and would only be installed if the plugin
836
+ itself was built and installed. This affected building the Node.JS SDK using an
837
+ existing libcouchbase install.
838
+ * Priority: Major
839
+ * Issues: [CCBC-558](http://couchbase.com/issues/browse/CCBC-558)
840
+
841
+ ## 2.4.4 (Nov. 19 2014)
842
+
843
+ * Detect disconnected pooled sockets
844
+ This allows the connection pool to detect dead sockets which were closed
845
+ by a server when they were idle. Sometimes servers will close connections
846
+ to open idle sockets to save resources, or because of bugs in their
847
+ implementations.
848
+ This will fix some issues experienced with views where queries would
849
+ randomly fail with `LCB_NETWORK_ERROR` or `LCB_ESOCKSHUTDOWN`, by first
850
+ checking if the socket is alive before returning it back to the library's
851
+ core.
852
+ Note that the `libuv` plugin does not implement this functionality yet.
853
+ * Priority: Critical
854
+ * Issues: [CCBC-546](http://couchbase.com/issues/browse/CCBC-546)
855
+
856
+ * Fix _pillowfight_ `--min-size` bug
857
+ This fixes a bug where pillowfight would sometimes compare the `min-size`
858
+ option to an uninitialized `max-size` option and round it down to that
859
+ value; then would set the `max-size` option.
860
+ * Priority: Major
861
+ * Issues: [CCBC-542](http://couchbase.com/issues/browse/CCBC-542)
862
+
863
+ * Don't ignore `LCB_CNTL_DURABILITY_INTERVAL`
864
+ Fix a bug where this interval would be ignored, if modified by the user; always
865
+ reverting to 100ms.
866
+ * Priority: Major
867
+ * Issues: [CCBC-543](http://couchbase.com/issues/browse/CCBC-543)
868
+
869
+ * Fix memory leak with HTTP requests using a request body
870
+ Requests (such as `PUT`, `POST`, etc) which contained a request body
871
+ would cause a memory leak as the library forgot to free them when the
872
+ request object was destroyed.
873
+ * Priority: Major
874
+ * Issues: [CCBC-538](http://couchbase.com/issues/browse/CCBC-538)
875
+
876
+ * Fix errneous `LCB_SUCCESS` return when passed duplicate keys to
877
+ `lcb_durability_poll()`. This would cause applications to mistakenly wait
878
+ for a callback to arrive, when in fact the command had failed.
879
+ * Priority: Major
880
+ * Issues: [CCBC-536](http://couchbase.com/issues/browse/CCBC-535)
881
+
882
+ * Add option to preserve vbucket ownership heuristics across config updates
883
+ This allows the learned configuration settings to persist between configuration
884
+ updates. The default behavior (up to, and including this change) is to
885
+ discard any "learned" configuration in favor of the explicitly new config
886
+ passed to the server. This new option allows this information to be persisted
887
+ when a new configuration update is received. This behavior is considered
888
+ experimental, and is primarily intended to reduce the time it takes for the
889
+ client to relearn the current node (which is typically under 1-2 seconds).
890
+ * Priority: Minor
891
+ * Issues: [CCBC-530](http://couchbase.com/issues/browse/CCBC-530)
892
+
893
+ * Relocate memcached packets on topology changes for memcached buckets
894
+ This enhances the behavior of the client when operating with a memcached
895
+ bucket during a topology change. Previously the library would not relocate
896
+ packets to new servers, resulting in errors for items which were now
897
+ mapped to wrong nodes. The new behavior remaps the key to the new server
898
+ using the updated ketama hashing. Note that as a current restriction, the
899
+ remapping will be performed based on the key of the item, not any `hashkey`
900
+ parameter being employed.
901
+ * Priority: Major
902
+ * Issues: [CCBC-331](http://couchbase.com/issues/browse/CCBC-331)
903
+
904
+ * Return error if ignored/conflicting options are found
905
+ This changes the behavior of the library to throw an error if a specific
906
+ option field was filled in which did not make sense for a given command, for
907
+ example, specifying a `cas` value using a `LCB_ADD` operation with `lcb_store`.
908
+ * Priority: Major
909
+ * Issues: [CCBC-529](http://couchbase.com/issues/browse/CCBC-529)
910
+
911
+ * Fix issue when sending out large _OBSERVE_ command.
912
+ This would cause a partial command to be sent out if the size of the output
913
+ packet was greater than 512 bytes. This has been fixed by dynamically growing
914
+ the output buffer for _OBSERVE_
915
+ * Priority: Minor
916
+ * Issues: [CCBC-528](http://couchbase.com/issues/browse/CCBC-528)
917
+
918
+ * Fix spurious timeouts when using `lcb_durability_poll`
919
+ This fixes an issue where sometimes the durability poll operation would
920
+ prematurely time out.
921
+ * Priority: Major
922
+ * Issues: [CCBC-527](http://couchbase.com/issues/browse/CCBC-527)
923
+
924
+ ## 2.4.3 (Oct. 21 2014)
925
+
926
+ * Disable support for SSLv3
927
+ This works around the _POODLE_ SSLv3 vulnerability by disabling support for
928
+ anything below TLSv1.
929
+
930
+ * Priority: Critical
931
+ * Issues: [CCBC-523](http://couchbase.com/issues/browse/CCBC-523)
932
+
933
+ * Pillowfight enhancements
934
+ Several behavior changes were made to pillowfight in this version. These are:
935
+ * The `-l` or `-c -1` option is in effect by default. This means that by
936
+ default `pillowfight` will run an infinite number of cycles. The previous
937
+ behavior was to default to a single cycle, requiring an explicit `--loop`
938
+ to ensure the workload ran for a considerable amount of time.
939
+
940
+ * When multiple threads are used, the workload is divided among the threads,
941
+ thus making it that each thread only operates on a subset of the data.
942
+
943
+ * A `--sequential` option has been added to allow the workload to operate
944
+ in _sequence_ on the total number of items. This is useful when wishing to
945
+ load a bucket with many items.
946
+
947
+ * A `--start-at` option has been added to allow the workload to specify an
948
+ alternate range of keys; effectively allowing resumption of a previous
949
+ run. The `--start-at` flag allows to specify the lower bound number which
950
+ will be used to generate keys. Thus a `--num-items=20000` and a
951
+ `--start-at=10000` will generate keys from 10000 through 30000.
952
+
953
+ * The _population_ phase has now been merged with the general workload
954
+ implementation. This means that all worker threads will participate in
955
+ the population phase. The previous behavior limited the populate phase to
956
+ a single thread.
957
+
958
+ * If `stdout` is detected to be a terminal, a simple "OPS/SEC" meter will
959
+ periodically write the estimated throughput to the screen.
960
+
961
+ * Fix memory leak when using large read buffers
962
+ In the case where large read buffers are used (and the `iovec` elements
963
+ becomes sizable, the library may end up incorrectly caching some memory
964
+ blocks for future use. This fix makes the blocks be cached at the allocator
965
+ level, so that they are properly (re) utilized.
966
+
967
+ * Priority: Major
968
+ * Issues: [CCBC-519](http://couchbase.com/issue/browse/CCBC-519)
969
+
970
+ * Use forward map (and other heuristics) to get a next node for an item after
971
+ a not-my-vbucket reply. Since the server (see bug attached) does not always
972
+ guarantee that a given config is the most _correct_, the client must do some
973
+ guesswork in order to properly map a node when it gets a not-my-vbucket;
974
+ especially if the config says that the node is the correct one.
975
+
976
+ * Priority: Major
977
+ * Issues: [MB-12268](http://couchbase.com/issues/browse/MB-12268)
978
+
979
+ ## 2.4.2 (Sep. 23 2014)
980
+
981
+ * Mark the `hashkey` fields as being _volatile_.
982
+ Usage of this field is not supported in many cluster systems and is thus not
983
+ supported functionality. It exists primarily as a legacy from an older API
984
+ * Priority: Major
985
+ * Issues: [CCBC-508](http://couchbase.com/issues/browse/CCBC-508)
986
+
987
+ * Add "key stats" mode to `lcb_CMDDSTATS`.
988
+ This adds an additional key stats mode to the `lcb_stats3()` API
989
+ which interprets the `key` field as being a document ID for which
990
+ information (such as expiry, status) should be retrieved, rather
991
+ than a system statistics key. Similar functionality already exists
992
+ in the Java client library as `getKeyStats()`. In addition to this
993
+ feature, a `cbc stats --keystats` option is also provided to employ
994
+ this functionality from the command line.
995
+ * Priority: Major
996
+ * Issues: [CCBC-318](http://issues.couchbase.com/browse/CCBC-318)
997
+
998
+ * Add more details about replica nodes in the `cbc hash` command.
999
+ * Priority: Minor
1000
+ * Issues: [CCBC-504](http://couchbase.com/issues/browse/CCBC-504)
1001
+
1002
+ * Add `lcb_cntl()` setting to retrieve bucket name.
1003
+ Previously the library did not have a means by which the bucket name
1004
+ could be retrieved. Using the `LCB_CNTL_BUCKETNAME` setting, the bucket
1005
+ name will now be returned.
1006
+ * Priority: Major
1007
+ * Issues: [CCBC-502](http://issues.couchbase.com/browse/CCBC-502)
1008
+
1009
+ ## 2.4.1
1010
+
1011
+
1012
+ * Implement `mcflush` subcommand for `cbc`. This was removed in the cbc
1013
+ rewrite as the previous `flush` command.
1014
+ * Priority: Minor
1015
+ * Issues: [CCBC-486](http://couchbase.com/issues/browse/CCBC-486)
1016
+
1017
+
1018
+ * Requests issued to an invalid replica via `lcb_get_replica()` should fail
1019
+ with the `LCB_NO_MATCHING_SERVER_CODE`. Previously this sometimes went
1020
+ through due to an incorrect bounds checking in the `lcbvb_vbreplica()`
1021
+ function.
1022
+ * Priority: Major
1023
+ * Issues: [CCBC-488](http://couchbase.com/issues/browse/CCBC-488)
1024
+
1025
+
1026
+ * Fixed a memory leak in `lcb_get_replica()` when the operation would fail.
1027
+ * Priority: Major
1028
+ * Issues: [CCBC-489](http://couchbase.com/issues/browse/CCBC-489)
1029
+ [CCBC-490](http://couchbase.com/issues/browse/CCBC-490)
1030
+
1031
+
1032
+
1033
+ * Fix memory leak in `lcb_sched_fail()` when extended commands are in the
1034
+ pipeline
1035
+ * Priority: Major
1036
+ * Issues: [CCBC-474](http://couchbase.com/issues/browse/CCBC-474)
1037
+
1038
+
1039
+
1040
+ * Provide `lcb_dump()` function call to dump state information about
1041
+ a client handle. The function call itself is currently marked as
1042
+ volatile and the output format is very much likely to change.
1043
+ * Priority: Minor
1044
+ * Issues: [CCBC-491](http://couchbase.com/issues/browse/CCBC-490)
1045
+
1046
+
1047
+ * Fix `ratio` argument in `cbc-pillowfight`. This ensures that the
1048
+ `ratio` argument will truly determine the ratio of gets to sets.
1049
+ * Priority: Minor
1050
+
1051
+ * Fix crash when HTTP request is retried. This may take place during topology
1052
+ changes
1053
+ * Priority: Major
1054
+ * Issues: [CCBC-497](http://couchbase.com/issues/browse/CCBC-497)
1055
+
1056
+ * Allow simple host-port string in connection string, giving it an implicit
1057
+ `http://` scheme. This allows easier backwards compatibility with some
1058
+ application
1059
+ * Priority: Minor
1060
+ * Issues: [CCBC-500](http://couchbase.com/issues/browse/CCBC-500)
1061
+
1062
+ * Update some SSL options to better reflect server 3.0 functionality
1063
+ The old `capath` option has been renamed to `certpath` to indicate that the
1064
+ path is not to the signing authority, but to the self-signed server certificate
1065
+ generated by the server itself. Additionally the `no_verify` option has been
1066
+ hidden.
1067
+ * Priority: Major
1068
+ * Issues: [CCBC-501](http://couchbase.com/issues/browse/CCBC-501)
1069
+
1070
+ ## 2.4.0 GA
1071
+
1072
+ * [major] Attempt to retry items that are mapped to a non-existent node in
1073
+ a degraded cluster. Rather than returning `LCB_NO_MATCHING_SERVER` the
1074
+ behavior should be to wait for the item to succeed and attempt to fetch
1075
+ a new cluster configuration.
1076
+
1077
+ In order to control how such 'orphaned' commands are handled, a new value
1078
+ has been added to the `lcb_RETRYMODEOPTS` called `LCB_RETRY_ON_MISSINGNODE`
1079
+ which dictates how commands should be rescheduled if the associated vbucket
1080
+ has no master. The default is to retry the command until it times out, but
1081
+ by setting this value to `0` (See `LCB_CNTL_RETRYMODE`) it may only be
1082
+ attempted once, causing 'fail fast' behavior in such a case.
1083
+
1084
+ * [major] Don't throttle config requests based on initial file-based config.
1085
+ This allows the client to quickly recover from a stale config cache without
1086
+ waiting for the `LCB_CNTL_CONFDELAY_THRESH` interval to elapse. Prior to this
1087
+ fix, a client would appear to "not recover" if bootstrapping from a stale cache.
1088
+ In reality the client would eventually recover but was waiting for the delay
1089
+ threshold to elapse.
1090
+
1091
+ * [major] Ignore `NOT_MY_VBUCKET` config payloads if CCCP provider is disabled.
1092
+ This allows the client to circumvent any possible bugs in the CCCP response
1093
+ payload and rely entirely on the HTTP config. It also allows 'rewriting'
1094
+ proxies like confsed to function.
1095
+
1096
+ ## 2.4.0-beta
1097
+
1098
+ * [major] Better error reporting for SSL failures.
1099
+ This adds new error codes (`LCB_SSL_ERROR`, `LCB_SSL_CANTVERIFY`)
1100
+ which are returned on initialization and verification failures
1101
+ respectively.
1102
+
1103
+ * [minor] Communication via legacy memcached servers is possible
1104
+ by using the `memcached://` scheme in the connection string.
1105
+
1106
+ * [minor] Environment variables understood by the library are now
1107
+ documented in their own section.
1108
+
1109
+ * [major] Add `lcb_get_node()` function to retrieve addresses for
1110
+ various nodes in the cluster. This deprecates the `lcb_get_host()`,
1111
+ `lcb_get_port()` and `lcb_get_server_list()` functions as they are
1112
+ constrained to only return information about the administrative API.
1113
+ The new function is configurable to return information about various
1114
+ ports.
1115
+
1116
+ * [major] The `dsn` field in the `lcb_create_st` structure has been
1117
+ renamed to `connstr`.
1118
+
1119
+ * [major] An HTTP request which has followed redirects will cause the
1120
+ `lcb_wait()` function to never return. This bug was introduced in
1121
+ 2.4.0-DP1 and has now been fixed.
1122
+
1123
+ * [minor] `lcb_get_server_list()` function now returns updated information
1124
+ from the current cluster configuration. Previously this would only return
1125
+ a node from the list specified during initial creation.
1126
+
1127
+ * [minor] Provide additional error classifiers. Two error classifiers have
1128
+ been added, they are:
1129
+
1130
+ * `LCB_ERRTYPE_SRVLOAD` which indicates that the server is likely under high load.
1131
+ * `LCB_ERRTYPE_SRVGEN` which indicates that the error is a direct reply from the
1132
+ server. This code can help distinguish between client and server generated
1133
+ return codes.
1134
+
1135
+ * [major] Provide HTTP keepalive and connection pooling for HTTP requests.
1136
+ This allows the client to reuse an HTTP connection for multiple requests
1137
+ rather than creating a new connection and closing it for each operation.
1138
+
1139
+ The functionality may be controlled via the `LCB_CNTL_HTTP_POOLSIZE` setting
1140
+ which limits how many open connections (per server) to maintain inside the
1141
+ client. Setting this value to `0` will disable pooling and restore old
1142
+ behavior.
1143
+
1144
+ * [major] Properly schedule next invocations for retry queue. A bug was introduced
1145
+ in 2.4.0-dp1 which would cause the next tick callback to be invoked in what is
1146
+ effectively a busy loop. This would be reflected in higher CPU load and less
1147
+ throughput during topology changes.
1148
+
1149
+ * [major] Return error if empty key is passed to an operation. Empty keys will
1150
+ cause the server to drop the connection.
1151
+ The error code returned is the newly added `LCB_EMPTY_KEY`
1152
+
1153
+ * [minor] Provide setting to disable refreshing the configuration when an HTTP
1154
+ API error is encountered (from one of the HTTP callback functions). This
1155
+ adds the `LCB_CNTL_HTTP_REFRESH_CONFIG_ON_ERROR` setting.
1156
+
1157
+ * [major] Fix bug where the CCCP provider may prematurely fail, activating the
1158
+ HTTP provider
1159
+
1160
+
1161
+ ## 2.4.0-dp1 (2014-06-18)
1162
+
1163
+
1164
+ **Changes affecting older APIs**
1165
+
1166
+ * [minor] Make `run_event_loop` and `stop_event_loop` private.
1167
+ These functions may no longer be used from within an application to
1168
+ start/stop the event loop. `lcb_wait()` and `lcb_wait3()` should be
1169
+ used instead.
1170
+
1171
+ * [major] Deprecate the `lcb_set_XXX` functions. `lcb_set_timeout`
1172
+ and some other calls have been deprecated in favor of the `lcb_cntl()`
1173
+ interface. These functions will still work but will cause the compiler
1174
+ to print a deprecation warning.
1175
+
1176
+ * [minor] `lcb_socket_t` is typedefed to a `DWORD` on windows. In
1177
+ previous versions this was an `int`.
1178
+
1179
+ * [minor] Connecting to a standalone memcached instance is currently no longer
1180
+ supported.
1181
+
1182
+ * [major] `lcb_set_error_callback()` has been deprecated. Applications should
1183
+ use the new `lcb_set_bootstrap_callback()` and/or operation callbacks
1184
+ to determine success/failure status.
1185
+
1186
+ * [major] `lcb_get_last_error()` has been deprecated. Error information is always
1187
+ returned in the operation callback
1188
+
1189
+ * [major] Disable the sending of `GETQ` packets. The format of this command
1190
+ is cumbersome to deal with and in most uses cases is actually slightly
1191
+ _less_ efficient on the network. Note that this does not change the API
1192
+ of the actual `lcb_get()` call, but simply changes the format of the
1193
+ packets sent over the wire.
1194
+
1195
+ * [major] The IOPS API has been changed. This is considered volatile interface
1196
+ and may subsequently change in the future as well.
1197
+
1198
+ **New APIs added in 2.4.0 extending existing functionality**
1199
+
1200
+ These changes extend existing features with enhanced APIs
1201
+
1202
+ * [major] Additional APIs for `lcb_cntl()`. These consist of helper functions
1203
+ to make it easier to use simple types or strings rather than pointers, if
1204
+ possible. These functions are `lcb_cntl_string()`, `lcb_cntl_setu32()` and
1205
+ `lcb_cntl_getu32()`
1206
+
1207
+ * [minor] Provide extended version of `lcb_wait()`.
1208
+ A new function called `lcb_wait3()` has been added which offers additional
1209
+ options with respect to running the event loop. Specifically it offers to
1210
+ bypass the check for pending operations which `lcb_wait()` executes. This
1211
+ is both more performant and allows us to wait for operations which are
1212
+ not explicitly scheduled.
1213
+
1214
+ * [major] Provide API to request a configuration refresh.
1215
+ Sometimes it is necessary to force the client to request a new configuration,
1216
+ for example in certain failover conditions. A new API called `lcb_config_refresh()`
1217
+ has been added, and should be used in conjunction with `lcb_wait3()`.
1218
+
1219
+ * [major] Provide bootstrapping notification callback
1220
+ This provides an explicit `lcb_set_bootstrap_callback()` to definitively
1221
+ determine whether the client has received its initial configuration (and
1222
+ thus may now start performing operations) or whether it failed (and thus
1223
+ must be reinitialized). This deprecates the common use case of
1224
+ `lcb_set_error_callback()`.
1225
+
1226
+ * [major] New vBucket interface/API. This API is used internally and exposed
1227
+ as _volatile_ inside the public header files. It provides extended features,
1228
+ a more concise API, and is compatible with the upcoming Couchbase 3.0 config
1229
+ format. Note that file-based configuration caches written by this version of
1230
+ the library are incompatible with previous versions, however this version may
1231
+ read caches generated by previous versions. This is because this version generates
1232
+ a stripped-down version of the "terse" configuration style.
1233
+
1234
+ * [major] Extended detailed error codes.
1235
+ These error codes expose more detail about the `NETWORK_ERROR` and
1236
+ `CONNECT_ERROR` codes returned by previous versions of the library. The extended
1237
+ codes are not returned by default and must be explicitly enabled in order to
1238
+ retain backwards compatibility with applications which rely on the older
1239
+ error codes.
1240
+
1241
+
1242
+ **New Features in 2.4.0**
1243
+
1244
+ * [major] Connection Strings (aka "dsn") feature for instance creation. This adds a new
1245
+ version of the `lcb_create_st` structure which is passed a URI-like string
1246
+ rather than a semicolon-delimited list of hosts. This string is used to
1247
+ provide options and the list of hosts that the library should connect to.
1248
+ For example, `couchbase://default/localhost&compression=off`
1249
+
1250
+ * [major] SSL transport support for Couchbase 3.0 Enterprise.
1251
+ Couchbase 3.0 enterprise features the ability to encrypt communications
1252
+ between the client and the server using the SSL protocol. SSL protocol
1253
+ support in _libcouchbase_.
1254
+
1255
+ * [major] Retry queue for failed operations. The retry queue is used
1256
+ as a place to place operations which have failed internally and which
1257
+ should be retried within a certain amount of time. This also provides
1258
+ options on which commands should be retried.
1259
+
1260
+ * [minor] Compression/JSON flag (aka Datatype) support
1261
+ This adds support for a future feature of Couchbase server which will
1262
+ feature transparent compression. This feature also allows the server
1263
+ to signal to the library if a document is JSON or not. The compression
1264
+ feature may be disabled at compile-time, and may also be modified at
1265
+ runtime by setting `compression=off` in either the connection string
1266
+ or via `lcb_cntl_setstring(instance, "compression", "off")`
1267
+
1268
+ * [major] Experimental _scheduling_ API. This API replaces most of the older
1269
+ operation APIs with a scheduling API. These APIs are called with one
1270
+ command at a time and insert the resultant packet into a pipeline. The
1271
+ user may "schedule" the commands or "fail" the pipeline if a certain
1272
+ request has failed to be scheduled.
1273
+
1274
+ This API also provides a common ABI header for commands so that they may
1275
+ easily be used via type-punning, or wrapped as a class hierarchy in C++.
1276
+
1277
+ This API is currently considered volatile but will be the basis of the
1278
+ upcoming libcouchbase 3.0 API. The header file is `<libcouchbase/api3.h>`
1279
+
1280
+ * [major] Raw memcached packets may be sent to the library and have a callback
1281
+ invoked when their responses have been received.
1282
+ This adds an `lcb_pktfwd3()` API. This requires the new scheduling API.
1283
+
1284
+
1285
+ **Bug Fixes in 2.4.0**
1286
+
1287
+ * [major] _select_ plugin may endlessly loop in some cases
1288
+ The plugin may loop if there was a long timeout from the
1289
+ future .
1290
+
1291
+ * [major] Do not break TCP connections on topology changes unless ejected from
1292
+ cluster. This ensures that nodes which are still part of the cluster have their
1293
+ TCP connections remain in tact despite being shifted in their server index values.
1294
+ Packets which have been sent to the wrong vBucket are silently ignored and
1295
+ rescheduled to their appropriate destination. This decreases load significantly
1296
+ on the client, network, and cluster during topology changes.
1297
+
1298
+ * [major] Use new-style "Terse" URI format when requesting a configuration over HTTP.
1299
+ This uses the HTTP configuration format over the new `/pools/default/bs/default`
1300
+ rather than the older `/pools/default/bucketsStreaming/default` form. The former
1301
+ form is much more efficient on the cluster side. If the new URI form is not
1302
+ supported (i.e. the server responds with an HTTP 404) the older form will be
1303
+ used instead. You may modify this behavior by setting the `LCB_CNTL_HTCONFIG_URLTYPE`
1304
+ setting via `lcb_cntl()`.
1305
+
1306
+ * [minor] The `cmake/configure` script now accepts the `LDFLAGS`, `CPPFLAGS`, `CFLAGS`,
1307
+ `CXXFLAGS`, `CC`, and `CXX` settings both within the environment _and_ the
1308
+ commandline, so the forms of `CC=clang ./cmake/configure` and
1309
+ `./cmake/configure CC=clang` are equivalent.
1310
+
1311
+ * [minor] The `pillowfight` tool will now print latencies between 1-10ms in resolutions
1312
+ of 100us.
1313
+
1314
+
1315
+ **Metadata and Packaging Changes in 2.4.0**
1316
+
1317
+ * [major] Use Doxygen for API documentation.
1318
+ This replaces the _manpages_ for API documentation with Doxygen. Doxygen
1319
+ is a free and portable documentation system which may be obtained from your
1320
+ distribution or at [](http://doxygen.org). To generate the documentation
1321
+ from the source tree, simply run `doxygen` from the source root directory.
1322
+ To generate internal documentation, run `./docs/gen_internal_apidoc.sh`.
1323
+
1324
+ * [major] Add interface attributes to all API calls
1325
+ This properly documents all API calls with a certain API stability level
1326
+ such as _committed_ (for stable APIs), _uncomitted_ for APIs which may, but
1327
+ are not likely to change, and _volatile_ for APIs which are likely to be
1328
+ changed or removed.
1329
+
1330
+ * [major] Public header files have been reorganized
1331
+ This changes the layout of the header files from previous versions. This should
1332
+ not affect applications as applications should only ever include the main
1333
+ `<libcouchbase/couchbase.h>` file.
1334
+
1335
+ the following files have been _removed_ from the
1336
+ `<libcouchbase/*>` header directory:
1337
+
1338
+ * `types.h` - Merged into other header files
1339
+ * `arguments.h` - now a part of `couchbase.h`
1340
+ * `callbacks.h` - now a part of `couchbase.h`
1341
+ * `debug.h` - unused and obsolete
1342
+ * `durability.h` - now a part of `couchbase.h`
1343
+ * `behavior.h` - Merged into `deprecated.h`
1344
+ * `sanitycheck.h` - Merged into `deprecated.h`
1345
+ * `timings.h` - Part of `couchbase.h`
1346
+ * `compat.h` - Part of `deprecated.h`
1347
+
1348
+ The following files have been _added_ into the `<libcouchbase/*>` directory.
1349
+ Unless otherwise noted, these files are included by `<libcouchbase/couchbase.h>`:
1350
+
1351
+ * `api3.h` - Volatile proposed 3.0 API. **Not included by default**
1352
+ * `cxxwrap.h` - Contains the implementation for the deprecated C++ wrappers
1353
+ * `deprecated.h` - Contains deprecated APIs
1354
+ * `iops.h` - Contains the IO integration APIs
1355
+ * `pktfwd.h` - Contains the packet forwarding API. **Not included by default**
1356
+ * `vbucket.h` - Contains the vBucket mapping API. **Not included by default**
1357
+
1358
+ * OpenSSL is now a base dependency for the library. This may be disabled at configure
1359
+ time via `--enable-ssl=no`. See `./configure --help`.
1360
+
1361
+ * Snappy compression library is bundled and optionally compiled. This is left out by
1362
+ default as the configure script will search for a system installed `libsnappy`.
1363
+ Snappy provides the compression feature needed for compressing and inflating data
1364
+ between client and server. It may be disabled at compile-time via `--enable-snappy=no`
1365
+
1366
+ * [minor] _libvbucket_ has been fully integrated into libcouchbase from the forked
1367
+ _libvbucket_ package and, lives fully as part of the
1368
+ library. The public vBucket API may be found in `<libcouchbase/vbucket.h>`.
1369
+
1370
+ * [minor] As an alternative to the cross-platform `lcb_uintNN_t` typedefs, a shorter
1371
+ (and more standards compliant) alternative `lcb_UNN` typedefs are provided, thus
1372
+ instead of `lcb_uint32_t` you may use `lcb_U32`. The full listing of cross platform
1373
+ typdefs may be found inside `<libcouchbase/sysdefs.h>`
1374
+
1375
+
1376
+
1377
+ ## 2.3.1 (2014-05-08)
1378
+
1379
+ * [major] CCBC-404: Segfault in `connmgr_invoke_request`
1380
+ Occasionally a segmentation fault would happen when a connection was being
1381
+ released as a result of a connection failure. This was because of invalid
1382
+ list tracking.
1383
+
1384
+ * [major] CCBC-395: Add `lcb_cntl()` interface for configuration cache
1385
+ Configuration cache options may be set after instantiation using `lcb_cntl()`
1386
+ with the new `LCB_CNTL_CONFIGCACHE` operation. The old-style `lcb_create_compat`
1387
+ creation path is deprecated.
1388
+
1389
+ * [major] CCBC-394: Get-with-replica occasionally crashes on Windows and UV
1390
+ during topology changes. This was due to not allocating a buffer if one did
1391
+ not exist.
1392
+
1393
+ * [major] CCBC-392: ABI compatibility broken between 2.x and 2.3 for
1394
+ `lcb_create_compat`. This has been fixed by symbol aliasing between versions.
1395
+ Developers are recommended to use the `lcb_cntl()` API to set the
1396
+ configuration cache, as specified in CCBC-395
1397
+
1398
+ * [major] CCBC-385: Failed assertion on get-with-replica when connection fails.
1399
+ If a connection fails with a `CMD_GET_REPLICA` command still in the queue an
1400
+ assertion failure will crash the library. This has been fixed by handling the
1401
+ opcode in the `failout_single_request` function.
1402
+
1403
+ * [major] CCBC-384: Unknown Winsock error codes crash application. This was fixed
1404
+ by providing proper handlers for Winsock codes which were not explicitly
1405
+ converted into their POSIX equivalents.
1406
+
1407
+ * [major] CCBC-376: Fix memory leak in configuration parsing. A leak was
1408
+ introduced in version 2.3.0 by not freeing the JSON pool structure. This has
1409
+ been fixed in 2.3.1
1410
+
1411
+ * [minor] CCBC-370: `lcb_get_host` and `lcb_get_port` may return host-port
1412
+ combinations from different servers. If multiple servers are listening on
1413
+ different ports this may result in yielding an invalid endpoint by combining
1414
+ the output from those two functions. This has been fixed in 2.3.1 by returning
1415
+ the host and port from the first host, in lieu of a currently-connected REST
1416
+ endpoint.
1417
+
1418
+ * [minor] CCBC-368: Initial bootstrapping failure may mask `LCB_BUCKET_ENOENT`
1419
+ calls with `LCB_ETIMEDOUT`. This has been fixed by not retrying configuration
1420
+ retrieval if an explicit HTTP 404 code is received. Note that when using
1421
+ bootstrap over memcached, a missing bucket may still be manifest as
1422
+ `LCB_AUTH_ERROR`.
1423
+
1424
+ * [minor] CCBC-367: Ensure `lcb_get_host` does not return `NULL` when the
1425
+ associated `lcb_t` is of `LCB_TYPE_CLUSTER`. This would cause crashes in some
1426
+ applications which relied on this function to not return `NULL`.
1427
+
1428
+ * [major] CCBC-389: Fixed Spurious timeouts being delivered in asynchronous
1429
+ use cases.
1430
+ In applications which do not use `lcb_wait()` the library will potentially
1431
+ time out commands internally triggering an erroneous configuration refresh.
1432
+ While this issue would not end up failing operations it will cause unnecessary
1433
+ network traffic for retrieving configurations. Applications using `lcb_wait()`
1434
+ are not affected as that function resets the timeout handler.
1435
+
1436
+ * [major] CCBC-332, CCBC-364: Compare configuration revision information
1437
+ for memcached cluster bootstrap. Previously we would refresh the
1438
+ configuration upon receipt
1439
+ of any new configuration update from memcached. This is fixed in 2.3.1 where
1440
+ the configuration will only be applied if it is deemed to be newer than the
1441
+ current configuration. With memcached bootstrap this is only true if the
1442
+ configuration's `rev` field is higher than the current one.
1443
+
1444
+
1445
+ ## 2.3.0 GA (2014-04-07)
1446
+
1447
+ * [major] CCBC-152: Provide a master-only observe option. This adds a new
1448
+ struct version to the `lcb_observe_cmd_t` which allows to select only the
1449
+ master node. One can use this to efficiently check if the key exists (without
1450
+ retrieving it). It also allows one to get the CAS of the item without fetching
1451
+ it.
1452
+
1453
+ * [major] CCBC-281: Fix partial scheduling during multi operations. Previously
1454
+ the library would deliver spurious callbacks if multiple operations were
1455
+ scheduled with a single command and one of the operations could not be mapped
1456
+ to a server. This fixes this behavior and ensures that callbacks are only
1457
+ invoked for items if the entire API call succeeded.
1458
+
1459
+ * [major] CCBC-150: Multi-packet commands will no longer deliver spurious
1460
+ callbacks on failure. Previously these commands would be relocated to the
1461
+ same server during a configuration change, resulting in multiple callbacks
1462
+ for the same command. In this case the client would think all the commands
1463
+ had been completed, and when the next response arrived it would incorrectly
1464
+ map it to a different request.
1465
+
1466
+ * [minor] CCBC-327: Fix assumption of `vbucket_compare()` only returning if
1467
+ a diff exists. This function actually returns a non-NULL pointer always
1468
+ unless it cannot allocate more memory. This bug was introduced with the
1469
+ _DP1_ release.
1470
+
1471
+ * [minor] CCBC-326: Memcached buckets should use streaming config. This was
1472
+ left unchecked in the _DP1_ release and has now been fixed.
1473
+
1474
+ * [major] CCBC-351: Enhance performance for configuration parsing. In previous
1475
+ versions receiving multiple configurations at once would cause CPU spikes on
1476
+ slower systems. The configuration parser code has been optimized to alleviate
1477
+ this issue.
1478
+
1479
+ * [minor] CCBC-350: Provide `lcb_cntl()` API to retrieve the SCM changeset used
1480
+ by the currently loaded binary. This is a more effective way to get the
1481
+ revision as it does not depend on the specific headers the library was
1482
+ compiled with.
1483
+
1484
+ * [major] CCBC-340: Correctly parse `""`, `"0"` and `"1"` for environment
1485
+ variables. In previous versions having the entry set to an empty string
1486
+ or `0` would still be treated by the library as a true value for various
1487
+ environment variables. This has been fixed so that clear "False" values
1488
+ such as the empty string or 0 are treated as such.
1489
+
1490
+
1491
+ ## 2.3.0-dp1 (2014-02-04)
1492
+
1493
+ * [major] CCBC-234: Implementation of
1494
+ [Cluster Configuration Carrier Publication][cccp-wiki]. This is the new and
1495
+ more efficient way to bootstrap from a cluster using the native memcached
1496
+ protocol and is quicker than the previous HTTP bootstrap mechanism, dramatically
1497
+ improving startup times and reducing load on the server. This feature is
1498
+ available in server verions 2.5 and greater. The existing HTTP configuration is
1499
+ still supported and will be employed as a fallback in the event that `CCCP`
1500
+ is not supported.
1501
+
1502
+ In conjunction with this, a new struct version has been added to the
1503
+ `lcb_create_st` parameters structure for use with `lcb_create`. This allows
1504
+ you to get more control over how the client is initialized:
1505
+
1506
+ lcb_t instance;
1507
+ struct lcb_create_st options;
1508
+ lcb_config_transport_t enabled_transports = {
1509
+ LCB_CONFIG_TRANSPORT_CCCP,
1510
+ LCB_CONFIG_TRANSPORT_LIST_END
1511
+ };
1512
+
1513
+ memset(&options, 0, sizeof(options));
1514
+ options.version = 2;
1515
+ options.v.v2.mchosts = "example.com:11210";
1516
+ options.v.v2.transports = enabled_transports;
1517
+
1518
+ lcb_error_t rc = lcb_create(&instance, &options);
1519
+ if (rc != LCB_SUCCESS) {
1520
+ fprintf(stderr, "Failed to create instance: %s\n", lcb_strerror(instance, rc));
1521
+ }
1522
+
1523
+ The above snippet will configure a client to _always_ use the `CCCP` protocol
1524
+ and never attempt to fall back on HTTP
1525
+
1526
+ The CCCP implementation required a significant rewrite in how sockets were
1527
+ created and re-used. Particularly, a connection pooling feature was implemented.
1528
+
1529
+ Additionally, the `cbc` command now has an additional `-C` option which accepts
1530
+ the preferred configuration mechanism to use.
1531
+
1532
+ * [major] CCBC-305: Implement logging hooks.
1533
+
1534
+ This improvements adds various levels of diagnostic logging with the library
1535
+ itself. It may be utilized via the environment (by setting the `LCB_LOGLEVEL`
1536
+ environment variable to a positive integer -- the higher the number the more
1537
+ verbose the logging).
1538
+
1539
+ Integrators may also use the logging API specified in `<libcouchbase/types.h>`
1540
+ to proxy the library's logging messages into your own application.
1541
+
1542
+ Current events logged include connection initialization, destruction, connection
1543
+ pool management, configuration changes, and timeouts.
1544
+
1545
+ By default the library is silent.
1546
+
1547
+ * [major] CCBC-316: Allow per-node bootstrap/config timeouts.
1548
+ This change allows more finer grained control over how long to wait per-node
1549
+ to receive updated configuration info. This setting helps adjust the initial
1550
+ and subsequent bootstrap processes to help ensure each node gets a slice of
1551
+ time.
1552
+
1553
+ * [major] CCBC-297: Handle spurious EWOULDBLOCK on UV/Win32
1554
+ This issue caused odd errors on Windows when large amounts of data
1555
+ would be received on the socket.
1556
+
1557
+ ## 2.2.0 (2013-10-05)
1558
+
1559
+ * [major] CCBC-169 Handle 302 redirects in HTTP (views, administrative
1560
+ requests). By default the library will follow up to three redirects.
1561
+ Once the limit reached the request will be terminated with code
1562
+ `LCB_TOO_MANY_REDIRECTS`. Limit is configurable through
1563
+ `LCB_CNTL_MAX_REDIRECTS`. If set to -1, it will disable redirect
1564
+ limit.
1565
+
1566
+ int new_value = 5;
1567
+ lcb_cntl(instance, LCB_CNTL_SET, LCB_CNTL_MAX_REDIRECTS, &new_value);
1568
+
1569
+ * [major] CCBC-243 Replace isasl with cbsasl, the latter has
1570
+ implemented both PLAIN and CRAM-MD5 authentication mechanisms.
1571
+
1572
+ * `LCB_CNTL_MEMDNODE_INFO` command updated to include effective
1573
+ SASL mechanism:
1574
+
1575
+ cb_cntl_server_t node;
1576
+ node.version = 1;
1577
+ node.v.v1.index = 0; /* first node */
1578
+ lcb_cntl(instance, LCB_CNTL_GET, LCB_CNTL_MEMDNODE_INFO, &node);
1579
+ if (node.v.v1.sasl_mech) {
1580
+ printf("authenticated via SASL '%s'\n",
1581
+ node.v.v1.sasl_mech);
1582
+ }
1583
+
1584
+ * It is also possible to force specific authentication mechanism for
1585
+ the connection handle using `LCB_CNTL_FORCE_SASL_MECH` command:
1586
+
1587
+ lcb_cntl(instance, LCB_CNTL_SET, LCB_CNTL_FORCE_SASL_MECH, "PLAIN");
1588
+
1589
+ * [major] CCBC-286 libuv plugin: use same CRT for free/malloc
1590
+
1591
+ * [major] CCBC-288 Fail `NOT_MY_VBUCKET` responses on timeout
1592
+
1593
+ * [major] CCBC-275 Do a full purge when negotiation times out. In this
1594
+ case we must purge the server from all commands and not simply pop
1595
+ individual items.
1596
+
1597
+ * [major] CCBC-275 Reset the server's buffers upon reconnection. This
1598
+ fixes a crash experienced when requesting a new read with the
1599
+ previous buffer still in tact. This was exposed by calling
1600
+ `lcb_failout_server` on a timeout error while maintaining the same
1601
+ server struct.
1602
+
1603
+ * [major] CCBC-282 Make server buffers reentrant-safe. When purging
1604
+ implicit commands, we invoke callbacks which may in turn cause other
1605
+ LCB entry points to be invoked which can shift the contents and/or
1606
+ positions of the ringbuffers we're reading from.
1607
+
1608
+ * [major] CCBC-204, CCBC-205 Stricter/More inspectable behavior for
1609
+ config cache. This provides a test and an additional `lcb_cntl`
1610
+ operation to check the status of the configuration cache. Also it
1611
+ switches off config cache with memcached buckets.
1612
+
1613
+ int is_loaded;
1614
+ lcb_cntl(instance, LCB_CNTL_GET, LCB_CNTL_CONFIG_CACHE_LOADED, &is_loaded);
1615
+ if (is_loaded) {
1616
+ printf("Configuration cache saved us a trip to the config server\n");
1617
+ } else {
1618
+ printf("We had to contact the configuration server for some reason\n");
1619
+ }
1620
+
1621
+ * [major] CCBC-278 Use common config retry mechanism for bad
1622
+ configcache. This uses the same error handling mechanism as when a
1623
+ bad configuration has been received from the network. New
1624
+ `LCB_CONFIG_CACHE_INVALID` error code to notify the user of such a
1625
+ situation
1626
+
1627
+ * [major] CCBC-274 Handle getl/unl when purging the server (thanks
1628
+ Robert Groenenberg)
1629
+
1630
+ * [major] Don't failout all commands on a timeout. Only fail those
1631
+ commands which are old enough to have timed out already.
1632
+
1633
+ * [major] CCBC-269 Don't record and use TTP/TTR from observe. Just
1634
+ poll at a fixed interval, as the responses from the server side can
1635
+ be unreliable.
1636
+
1637
+ * [minor] Allow hooks for mapping server codes to errors. This also
1638
+ helps handle sane behavior if a new error code is introduced, or
1639
+ allow user-defined logging when a specific error code is received.
1640
+
1641
+ lcb_errmap_callback default_callback;
1642
+
1643
+ lcb_error_t user_map_error(lcb_t instance, lcb_uint16_t in)
1644
+ {
1645
+ if (in == PROTOCOL_BINARY_RESPONSE_ETMPFAIL) {
1646
+ fprintf(stderr, "temporary failure on server\n");
1647
+ }
1648
+ return default_callback(instance, in);
1649
+ }
1650
+
1651
+ ...
1652
+
1653
+ default_callback = lcb_set_errmap_callback(conn, user_map_error);
1654
+
1655
+ * [minor] Add an example of a connection pool. See
1656
+ `example/instancepool` directory
1657
+
1658
+ * [minor] CCBC-279 Force `lcb_wait` return result of wait operation
1659
+ instead of `lcb_get_last_error`. It returns `last_error` if and only
1660
+ if the handle is not yet configured
1661
+
1662
+ * [minor] CCBC-284 `cbc-pillowfight`: compute item size correctly
1663
+ during set If `minSize` and `maxSize` are set to the same value it
1664
+ can sometimes crash since it may try to read out of memory bounds
1665
+ from the allocated data buffer.
1666
+
1667
+ * [minor] CCBC-283 Apply key prefix CLI option in cbc-pillowfight
1668
+
1669
+ * [minor] Add `--enable-maintainer-mode`. Maintainer mode enables
1670
+ `--enable-werror --enable-warnings --enable-debug`, forces all
1671
+ plugins to be installed and forces all tests, tools, and examples to
1672
+ be built
1673
+
1674
+ * [minor] CCBC-255 Expose `LCB_MAX_ERROR` to allow user-defined codes
1675
+
1676
+ ## 2.1.3 (2013-09-10)
1677
+
1678
+ * [minor] Updated gtest to version 1.7.0. Fixes issue with building
1679
+ test suite with new XCode 5.0 version being released later this
1680
+ month.
1681
+
1682
+ * [major] CCBC-265 Do not try to parse config for `LCB_TYPE_CLUSTER`
1683
+ handles. It fixes timouts for management operations (like 'cbc
1684
+ bucket-create', 'cbc bucket-flush', 'cbc bucket-delete' and 'cbc
1685
+ admin')
1686
+
1687
+ * [major] CCBC-263 Skip unfinished SASL commands on rebalance. During
1688
+ rebalance, it is possible that the newly added server doesn't have
1689
+ chance to finish SASL auth before the cluster will push config
1690
+ update, in this case packet relocator messing cookies. Also the
1691
+ patch makes sure that SASL command/cookie isn't mixing with other
1692
+ commands
1693
+
1694
+ * [major] Use cluster type connection for cbc-bucket-flush. Although
1695
+ flush command is accessible for bucket type connections,
1696
+ cbc-bucket-flush doesn't use provided bucket name to connect to,
1697
+ therefore it will fail if the bucket name isn't "default".
1698
+
1699
+ * [major] Allow to make connect order deterministic. It allows the
1700
+ user to toggle between deterministic and random connect order for
1701
+ the supplied nodes list. By default it will randomize the list.
1702
+
1703
+ * [major] Do not allow to use Administrator account for
1704
+ `LCB_TYPE_BUCKET`
1705
+
1706
+ * [major] CCBC-258 Fig segmentation faults during tests load of
1707
+ node.js. Sets `inside_handler` on `socket_connected`. Previously we
1708
+ were always using SASL auth, and as such, we wouldn't flush packets
1709
+ from the `cmd_log` using `server_send_packets` (which calls
1710
+ `apply_want`). `apply_want` shouldn't be called more than once per
1711
+ event loop entry -- so this sets and unsets the `inside_handler`
1712
+ flag.
1713
+
1714
+ * [major] Added support of libuv 0.8
1715
+
1716
+ * [major] Close config connection before trying next node. It will fix
1717
+ asserts in case of the config node becomes unresponsive, and the
1718
+ threshold controlled by `LCB_CNTL_CONFERRTHRESH` and `lcb_cntl(3)`
1719
+
1720
+ ## 2.1.2 (2013-08-27)
1721
+
1722
+ * [major] CCBC-253, CCBC-254 Use bucket name in SASL if username
1723
+ omitted. Without this fix, you can may encounter a segmentation
1724
+ faults for buckets, which are not protected by a password.
1725
+
1726
+ * [major] Preserve IO cookie in `options_from_info` when using v0
1727
+ plugins with user-provided IO loop instance. This issue was
1728
+ introduced in 2.1.0.
1729
+
1730
+ * [minor] Display the effective IO backend in 'cbc-version'. This is
1731
+ helpful to quickly detect what is the effective IO plugin on a given
1732
+ system.
1733
+
1734
+ ## 2.1.1 (2013-08-22)
1735
+
1736
+ * [minor] Use provided credentials for authenticating to the data
1737
+ nodes. With this fix, it is no longer possible to use Administrator
1738
+ credentials with a bucket. If your configuration does so, you must
1739
+ change the credentials you use before applying this update. No
1740
+ documentation guides use of Administrator credentials, so this
1741
+ change is not expected to affect few, if any deployments.
1742
+
1743
+ * [major] CCBC-239 Do not use socket after failout. Fixes segmentation
1744
+ faults during rebalance.
1745
+
1746
+ * [minor] CCBC-245 Distribute debug information with release binaries
1747
+ on Windows
1748
+
1749
+ * [minor] CCBC-248 Do not disable config.h on UNIX-like platforms. It
1750
+ fixes build issue, when application is trying to include plugins
1751
+ from the tarball.
1752
+
1753
+ * [major] CCBC-192 Skip misconfigured nodes in the list. New
1754
+ lcb\_cntl(3couchbase) added to control whether the library will skip
1755
+ nodes in initial node list, which listen on configuration port (8091
1756
+ usually) but doesn't meet required parameters (invalid
1757
+ authentication or missing bucket). By default report this issue and
1758
+ stop trying nodes from the list, like all previous release. Read
1759
+ more at man page lcb\_cntl(3couchbase) in section
1760
+ LCB\_CNTL\_SKIP\_CONFIGURATION\_ERRORS\_ON\_CONNECT
1761
+
1762
+ * [major] CCBC-246 Fallback to 'select' IO plugin if default plugin
1763
+ cannot be loaded. On UNIX-like systems, default IO backend is
1764
+ 'libevent', which uses third-party library might be not available
1765
+ at the run-time. Read in lcb\_cntl(3couchbase) man page in section
1766
+ LCB\_CNTL\_IOPS\_DEFAULT\_TYPES about how to determine effective IO
1767
+ plugin, when your code chose to use LCB\_IO\_OPS\_DEFAULT during
1768
+ connection instantiation. The fallback mode doesn't affect
1769
+ application which specify IO backend explicitly.
1770
+
1771
+ ## 2.1.0 (2013-08-17)
1772
+
1773
+ * [major] New backend `select`. This backend is based on the select(2)
1774
+ system call and its Windows version. It could be considered the most
1775
+ portable solution and is available with the libcouchbase core.
1776
+
1777
+ * [major] CCBC-236 New backend `libuv`. This backend previously was
1778
+ part of the `couchnode` project and is now available as a plugin.
1779
+ Because libuv doesn't ship binary packages there is no binary
1780
+ package `libcouchbase2-libuv`. You can build plugin from the source
1781
+ distribution, or through the `libcouchbase-dev` or
1782
+ `libcouchbase-devel` package on UNIX like systems.
1783
+
1784
+ * [major] New backend `iocp`. This is a Windows specific backend,
1785
+ which uses "I/O Completion Ports". As a part of the change, a new
1786
+ version of plugin API was introduced which is more optimized to this
1787
+ model of asynchronous IO.
1788
+
1789
+ * [major] CCBC-229 Fixed bug when REPLICA\_FIRST fails if first try
1790
+ does not return key
1791
+
1792
+ * [major] CCBC-228 Fixed bug when REPLICA\_SELECT didn't invoke
1793
+ callbacks for negative error codes
1794
+
1795
+ * [major] CCBC-145 API for durability operations. This new API is
1796
+ based on `lcb_observe(3)` and allows you to monitor keys more
1797
+ easily. See the man pages `lcb_durability_poll(3)` and
1798
+ `lcb_set_durability_callback(3)` for more info.
1799
+
1800
+ * [major] New configuration interface lcb\_cntl(3) along with new
1801
+ tunable options of the library and connection instances. In this
1802
+ release the following settings are available. See the man page for
1803
+ more information and examples.:
1804
+
1805
+ * LCB\_CNTL\_OP\_TIMEOUT operation timeout (default 2.5 seconds)
1806
+
1807
+ * LCB\_CNTL\_CONFIGURATION\_TIMEOUT time to fetch cluster
1808
+ configuration. This is similar to a connection timeout (default 5
1809
+ seconds)
1810
+
1811
+ * LCB\_CNTL\_VIEW\_TIMEOUT timeout for couchbase views (default 75
1812
+ seconds)
1813
+
1814
+ * LCB\_CNTL\_HTTP\_TIMEOUT timeout for other HTTP operations like
1815
+ RESTful flush, bucket creating etc. (default 75 seconds)
1816
+
1817
+ * LCB\_CNTL\_RBUFSIZE size of the internal read buffer (default
1818
+ 32768 bytes)
1819
+
1820
+ * LCB\_CNTL\_WBUFSIZE size of the internal write buffer (default
1821
+ 32768 bytes)
1822
+
1823
+ * LCB\_CNTL\_HANDLETYPE type of the `lcb\_t` handler (readonly)
1824
+
1825
+ * LCB\_CNTL\_VBCONFIG returns pointer to VBUCKET\_CONFIG\_HANDLE
1826
+ (readonly)
1827
+
1828
+ * LCB\_CNTL\_IOPS get the implementation of IO (lcb\_io\_opt\_t)
1829
+
1830
+ * LCB\_CNTL\_VBMAP get vBucket ID for a given key
1831
+
1832
+ * LCB\_CNTL\_MEMDNODE\_INFO get memcached node info
1833
+
1834
+ * LCB\_CNTL\_CONFIGNODE\_INFO get config node info
1835
+
1836
+ * LCB\_CNTL\_SYNCMODE control synchronous behaviour (default
1837
+ LCB\_ASYNCHRONOUS)
1838
+
1839
+ * LCB\_CNTL\_IP6POLICY specify IPv4/IPv6 policy (default
1840
+ LCB\_IPV6\_DISABLED)
1841
+
1842
+ * LCB\_CNTL\_CONFERRTHRESH control configuration error threshold
1843
+ (default 100)
1844
+
1845
+ * LCB\_CNTL\_DURABILITY\_TIMEOUT durability timeout (default 5 seconds)
1846
+
1847
+ * LCB\_CNTL\_DURABILITY\_INTERVAL durability polling interval (default
1848
+ 100 milliseconds)
1849
+
1850
+ * LCB\_CNTL\_IOPS\_DEFAULT\_TYPES get the default IO types
1851
+
1852
+ * LCB\_CNTL\_IOPS\_DLOPEN\_DEBUG control verbose printing of dynamic
1853
+ loading of IO plugins.
1854
+
1855
+ ## 2.0.7 (2013-07-10)
1856
+
1857
+ * [major] CCBC-183 Improve `lcb_get_replica()`. Now it is possible
1858
+ to choose between three strategies:
1859
+
1860
+ 1. `LCB_REPLICA_FIRST`: Previously accessible and now the default,
1861
+ the caller will get a reply from the first replica to successfully
1862
+ reply within the timeout for the operation or will receive an
1863
+ error.
1864
+
1865
+ 2. `LCB_REPLICA_ALL`: Ask all replicas to send documents/items
1866
+ back.
1867
+
1868
+ 3. `LCB_REPLICA_SELECT`: Select one replica by the index in the
1869
+ configuration starting from zero. This approach can more quickly
1870
+ receive all possible replies for a given topology, but it can
1871
+ also generate false negatives.
1872
+
1873
+ Note that applications should not assume the order of the
1874
+ replicas indicates more recent data is at a lower index number.
1875
+ It is up to the application to determine which version of a
1876
+ document/item it may wish to use in the case of retrieving data
1877
+ from a replica.
1878
+
1879
+ ## 2.0.6 (2013-05-07)
1880
+
1881
+ * [major] CCBC-188 Fix segfault when rebalancing
1882
+ When a (!connected) server is reconnected, the tasks in its
1883
+ "pending" buffer will be moved into "output" buffer. If its
1884
+ connection is broken again immediately, `relocate_packets()` will go
1885
+ to wrong path.
1886
+
1887
+ * [major] CCBC-202 Don't try to switch to backup nodes when timeout is
1888
+ reached
1889
+
1890
+ * [major] CCBC-188 Check if SASL struct is valid before disposing
1891
+
1892
+ * [major] Fix compile error with sun studio
1893
+ "src/event.c", line 172: error: statement not reached (`E_STATEMENT_NOT_REACHED`)
1894
+
1895
+ * [major] Don't invoke HTTP callbacks after cancellation, because
1896
+ user code might assume a previously-freed resource is still valid
1897
+
1898
+ * [minor] CCBC-179 Added an example to properly use the bucket
1899
+ credentials for authentication instead of administrator credentials
1900
+
1901
+ * [minor] example/yajl/couchview.c: pass cookie to the command
1902
+ Fixes coredump when executing ./examples/yajl/couchview
1903
+
1904
+ * [minor] CCBC-201 Add Host header in http request
1905
+ http://cbugg.hq.couchbase.com/bug/bug-555 points out that Host is a
1906
+ required field in HTTP 1.1
1907
+
1908
+ ## 2.0.5 (2013-04-05)
1909
+
1910
+ * [minor] Try to search the --libdir for modules if dlopen
1911
+ fails to find the module in the default library path
1912
+
1913
+ * [minor] CCBC-190 New compat mode (experimental) for configuration
1914
+ caching. See man `lcb_create_compat()`
1915
+
1916
+ * [minor] Manpage fixes
1917
+
1918
+ * [minor] Fix build on FreeBSD (http://review.couchbase.org/25289)
1919
+
1920
+ * [minor] Fix reconnecting issues on windows
1921
+ (http://review.couchbase.org/25170 and
1922
+ http://review.couchbase.org/25155)
1923
+
1924
+ * [minor] pillowfight example updated to optionally use threads
1925
+
1926
+ ## 2.0.4 (2013-03-06)
1927
+
1928
+ * [minor] CCBC-185 The bootstrap URI is not parsed correctly
1929
+
1930
+ * [minor] CCBC-175 Work properly on systems where EWOULDBLOCK != EAGAIN
1931
+
1932
+ * [critical] CCBC-180 Segmentation fault when the hostname resolved
1933
+ into several addresses and first of them reject couchbase
1934
+ connections.
1935
+
1936
+ * [major] CCBC-182 The library stops iterating backup nodes list if
1937
+ the next one isn't accessible.
1938
+
1939
+ * [major] CCBC-147 Fixed illegal memory access in win32 plugin
1940
+
1941
+ * [minor] CCBC-178 Build error on solaris/sparc: -Werror=cast-align
1942
+
1943
+ ## 2.0.3 (2013-02-06)
1944
+
1945
+ * [minor] bypass SASL LIST MECH
1946
+
1947
+ * [minor] Shrink internal lookup tables (and reduce the size of
1948
+ `lcb_t`)
1949
+
1950
+ * [minor] Add a new library: `libcouchbase_debug.so` (see
1951
+ include/libcouchbase/debug.h) which is a new library that contains
1952
+ new debug functionality.
1953
+
1954
+ * [minor] Added manual pages for the library
1955
+
1956
+ * [major] CCBC-153 Reset internal state on `lcb_connect()`. Allow caller
1957
+ to use `lcb_connect()` multiple times to implement reconnecting using
1958
+ the same `lcb_t` instance. Also it sets up the initial-connection
1959
+ timer for users who don't use `lcb_wait()` and drive IO loop manually.
1960
+
1961
+ * [major] CCBC-171 Invalid read in libevent plugin, when the plugin
1962
+ compiled in 1.x mode
1963
+
1964
+ * [critical] CCBC-155 Observe malfunctions in the case of multiple
1965
+ keys and server failure
1966
+
1967
+ * [major] CCBC-156 The ep-engine renders meaningful body for observe
1968
+ responses only if status code is 0 (`PROTOCOL_BINARY_RESPONSE_SUCCESS`).
1969
+ We shouldn't interpret response body in other cases, just decode &
1970
+ failout request instead. Also we shouldn't retry observe commands on
1971
+ `PROTOCOL_BINARY_RESPONSE_NOT_MY_VBUCKET`, because it can cause the
1972
+ client to loop infinitely
1973
+
1974
+ * [major] CCBC-145 KV Durability operation API. Async APIs added to
1975
+ allow the checking of the durability (replication and persistence)
1976
+ status of a key, and to notify the user when a specific criteria has
1977
+ been satisfied.
1978
+
1979
+ ## 2.0.2 (2013-01-04)
1980
+
1981
+ * [major] CCBC-150 commands sent to multiple servers fail to detect
1982
+ the respose if mixed with other commands.
1983
+
1984
+ * [minor] CCBC-143 'cbc version' reports that uses 2.0.0, but really
1985
+ installed with 2.0.1. Minor but confusing issue.
1986
+
1987
+ * [major] CCBC-151 Cancellation of the HTTP request might lead to
1988
+ memory leaks or to segfaults (2e3875c2).
1989
+
1990
+ * [minor] Document `LCB_SERVER_BUG` and `LCB_PLUGIN_VERSION_MISMATCH`.
1991
+ Enhance the the `lcb_strerror()` test to detect undocumented error
1992
+ codes.
1993
+
1994
+ * [critical] CCBC-153 Under high load the library could generate
1995
+ `LCB_ETIMEDOUT` errors without reason owing to internal limitations.
1996
+
1997
+ ## 2.0.1 (2012-12-11)
1998
+
1999
+ 50 files changed, 1009 insertions(+), 274 deletions(-)
2000
+
2001
+ * libev-plugin: delay all timers while the loop isn't active. It will
2002
+ fix `LCB_ETIMEOUT` in the following scenario:
2003
+
2004
+ * connect the instance
2005
+ * sleep for time greater than default timeout (e.g. 3 seconds)
2006
+ * schedule and execute a command (it will be timed out
2007
+ immediately)
2008
+
2009
+ * libev-plugin: reset IO event on delete. We need to reset it,
2010
+ because it might be re-used later
2011
+
2012
+ * CCBC-136: do not abort when purging SASL commands
2013
+
2014
+ * Make library C89 friendly again
2015
+
2016
+ * CCBC-132, CCBC-133: Ensure HTTP works even when the network may be
2017
+ unreliable. This changeset encompasses several issues which had been
2018
+ found with HTTP requests during network errors and configuration
2019
+ changes. Specifically some duplicate code paths were removed, and
2020
+ the process for delivering an HTTP response back to the user is more
2021
+ streamlined.
2022
+
2023
+ * CCBC-130: Fix a memory leak on the use of http headers
2024
+
2025
+ * CCBC-131: Compensate for cluster nodes lacking couchApiBase
2026
+
2027
+ * Fix possible SEGFAULT. Not-periodic timers are destroyed after
2028
+ calling user's callback, after that library performed read from
2029
+ freed pointer.
2030
+
2031
+ * SystemTap and DTrace integration
2032
+
2033
+ ## 2.0.0 (2012-11-27)
2034
+
2035
+ 12 files changed, 50 insertions(+), 12 deletions(-)
2036
+
2037
+ * Install unlock callback in synchronous mode
2038
+
2039
+ * Add the CAS to the delete callback
2040
+
2041
+ * Minor update of the packaging layout:
2042
+
2043
+ * libcouchbase-all package comes without version
2044
+ * extract debug symbols from libcouchbase-{bin,core} to
2045
+ libcouchbase-dbg package
2046
+
2047
+ ## 2.0.0beta3 (2012-11-21)
2048
+
2049
+ 64 files changed, 3641 insertions(+), 735 deletions(-)
2050
+
2051
+ * CCBC-104 Fix illegal memory access. Reconnect config listener if the
2052
+ config connection was gone without proper shutdown.
2053
+
2054
+ * Check for EWOULDBLOCK/EINTR on failed send
2055
+
2056
+ * Allow to use gethrtime() from C++
2057
+
2058
+ * Fix using freed memory (was introduced in 4397181)
2059
+
2060
+ * Use dynamic versioning for plugins
2061
+
2062
+ * Remove libtool version from the plugins
2063
+
2064
+ * Allow to use 'cbc-hash' with files
2065
+
2066
+ * CCBC-120 Purge stale OBSERVE packets
2067
+
2068
+ * CCBC-120 Reformat and refactor `lcb_server_purge_implicit_responses`:
2069
+
2070
+ * move packet allocation out of GET handler
2071
+ * dropping NOOP command shouldn't return error code
2072
+
2073
+ * CCBC-122 Try to switch another server from backup list on timeout
2074
+
2075
+ * CCBC-119: Allow the user to specify a different hash key. All of the
2076
+ data operations contains a hashkey and nhashkey field. This allows
2077
+ you to "group" items together in your cluster. A typical use case
2078
+ for this is if you're storing lets say data for a single user in
2079
+ multiple objects. If you want to ensure that either all or none of
2080
+ the objects are available if a server goes down, it could be a good
2081
+ idea to locate them on the same server. Do bear in mind that if you
2082
+ do try to decide where objects is located, you may end up with an
2083
+ uneven distribution of the number of items on each node. This will
2084
+ again result in some nodes being more busy than others etc. This is
2085
+ why some clients doesn't allow you to do this, so bear in mind that
2086
+ by doing so you might not be able to get your objects from other
2087
+ clients.
2088
+
2089
+ * Create man pages for cbc and cbcrc
2090
+
2091
+ * CCBC-118 `lcb_error_t` member in the http callbacks shouldn't reflect
2092
+ the HTTP response code. So the error code will be always `LCB_SUCCESS`
2093
+ if the library managed to receive the data successfully.
2094
+
2095
+ * Timer in libev uses double for interval. Ref:
2096
+ [](http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#code_ev_timer_code_relative_and_opti)
2097
+
2098
+ * CCBC-115 Return zero from `do_read_data()` if `operations_per_call`
2099
+ reached. The `operations_per_call' limit was introduced to prevent
2100
+ from freezing event loop. But in the function variable rv could
2101
+ store two different results and in case of reaching this limit it is
2102
+ returning number of the processed records, which is wrong. The
2103
+ function should return either zero (success) or non-zero (failure).
2104
+
2105
+ * Do not allow admin operations without authentication
2106
+
2107
+ * Fix cbc-bucket-create. `sasl-password' is misspelled, and it fails
2108
+ to parse the command line option.
2109
+
2110
+ * CCBC-114 Lookup the plugin symbol also in the current executable
2111
+ image.
2112
+
2113
+ * CCBC-113 Remove unauthorized asserion (d344037). The
2114
+ `lcb_server_send_packets()` function later check if the server object
2115
+ connected and establish connection if not (with raising possible
2116
+ errors)
2117
+
2118
+ * Try all known plugins for `LCB_IO_OPS_DEFAULT` in run time
2119
+
2120
+ * Don't use the `time_t` for win32. When compiling from php it turns out
2121
+ that it gets another size of the `time_t` type, causing the struct
2122
+ offsets to differ.
2123
+
2124
+ * Add `lcb_verify_compiler_setup()`. This function allows the "user" of
2125
+ the library to verify that the compiler use a compatible struct
2126
+ packing scheme.
2127
+
2128
+ * CCBC-87: Add documentation about the error codes
2129
+
2130
+ ## 2.0.0beta2 (2012-10-12)
2131
+
2132
+ 81 files changed, 2822 insertions(+), 1353 deletions(-)
2133
+
2134
+ * Search ev.h also in ${includedir}/libev
2135
+
2136
+ * Fix SEGFAULT if IO struct is allocated not by the `lcb_create()`
2137
+
2138
+ * Allow libcouchbase to connect to an instance without specifying bucket. It is useful
2139
+ when the bucket not needed, e.g. when performing administration
2140
+ tasks.
2141
+
2142
+ * Fix memory leak after an unsuccessful connection
2143
+
2144
+ * Fix invalid memory access in cbc tool. Affected command is
2145
+ cbc-bucket-create
2146
+
2147
+ * `lcb_create`: replace `assert()` with error code
2148
+
2149
+ * CCBC-105 breakout event loop in default `error_callback`. This provides
2150
+ better default behaviour for users who haven't defined global error
2151
+ callback.
2152
+
2153
+ * Allow users to build the library without dependencies. For example,
2154
+ without plugins at all. This may be useful if the plugin is
2155
+ implemented by or built into the host application.
2156
+
2157
+ * Allow users to install both libraries (2.x and 1.x) on the same system.
2158
+
2159
+ * Make the content type optional for `lcb_make_http_request()`
2160
+
2161
+ * Fix password memory leak in http.c (7e71493)
2162
+
2163
+ * Add support for raw http requests. libcouchase already contains all
2164
+ the bits to execute a raw http request, except for the possibility
2165
+ to specify a host:port, username and password.
2166
+
2167
+ * Cleanup HTTP callbacks. Use the same callbacks both for Management
2168
+ and View commands, and rename them to `lcb_http_complete_callback` and
2169
+ `lcb_http_data_callback`.
2170
+
2171
+ * Allow users to use environment variables to pick the event plugin
2172
+
2173
+ * Add a new interface version for creating IO objects via plugins
2174
+
2175
+ * Implement a new libev plugin. It is compatible with both libev3 and
2176
+ libev4.
2177
+
2178
+ * CCBC-103: Fix linked event/timer lists for win32
2179
+
2180
+ * Allow to disable CXX targets
2181
+
2182
+ * `lcb_connect()` should honor the syncmode setting. Automatically call
2183
+ `lcb_wait()` when in synchronous mode
2184
+
2185
+ ## 2.0.0beta (2012-09-13)
2186
+
2187
+ 123 files changed, 13753 insertions(+), 8264 deletions(-)
2188
+
2189
+ * Refactor the API. This is a full redesign of the current
2190
+ libcouchbase API that'll allow us to extend parts of the API without
2191
+ breaking binary compatibility. Also it renames all functions to have
2192
+ `lcb_` prefix instead of `libcouchbase_` and `LCB`/`LIBCOUCHBASE` in macros.
2193
+
2194
+ * Added --enable-fat-binary. Helps to solve issues when linking with
2195
+ fat binaries on MacOS.
2196
+
2197
+ * Implement getter for number of nodes in the cluster:
2198
+ `lcb_get_num_nodes()`
2199
+
2200
+ * Implement RESTful flush in the cbc toolset
2201
+
2202
+ * Bundle Windows packages as zip archives
2203
+
2204
+ * CCBC-98 Differentiate between TMPFAILs. This allows a developer
2205
+ to know if the temporary condition where the request cannot be
2206
+ handled is due to a constraint on the client or the server.
2207
+
2208
+ * Don't try to put the current node last in the backup list. This may
2209
+ cause "duplicates" in the list if the REST server returns another
2210
+ name for the server than you used. Ex: you specify "localhost" and
2211
+ the REST response contains 127.0.0.1
2212
+
2213
+ * Fix locking keys in multi-get mode
2214
+
2215
+ * Fix bug where HTTP method is not set
2216
+
2217
+ * CCBC-96 Correct buffer length for POST/PUT headers
2218
+
2219
+ * Add `lcb_get_server_list`
2220
+
2221
+ * Merge `lcb_get_locked` into `lcb_get` function
2222
+
2223
+ * Fix Windows build
2224
+
2225
+ * Include sys/uio.h. Needed by OpenBSD
2226
+
2227
+ * Fix mingw build (c394a1c)
2228
+
2229
+ * CCBC-80: Default to IPv4 only
2230
+
2231
+ * Sync `memcached/protocol_binary.h`. Pull extra
2232
+ `protocol_binary_datatypes` declarations.
2233
+
2234
+ * Deliver HTTP headers via callbacks
2235
+
2236
+ * Unify HTTP interface. This means massive rename of the symbols
2237
+
2238
+ * CCBC-92 release ringbuffer in `lcb_purge_single_server`
2239
+
2240
+ * CCBC-91 Fix switching to backup node in case of server outage
2241
+
2242
+ * CCBC-91 Reset timer for commands with `NOT_MY_VBUCKET` response
2243
+
2244
+ * Fix alignment for sparc platforms
2245
+
2246
+ * Fix win32 build (Add strings.h)
2247
+
2248
+ * Fix build with libyajl available
2249
+
2250
+ * Bundle libvbucket
2251
+
2252
+ * Fix a problem with allocating too few slots in the `backup_nodes`. Fixes
2253
+ illegal memory access.
2254
+
2255
+ * CCBC-90 Fix initialization of backup nodes array. The code switching
2256
+ nodes relies on NULL terminator rather than `nbackup_nodes` variable.
2257
+ Fixes illegal memory access.
2258
+
2259
+ * CCBC-89: Release the memory allocated by the http parser
2260
+
2261
+ ## 1.0.6 (2012-08-30)
2262
+
2263
+ 5 files changed, 18 insertions(+), 5 deletions(-)
2264
+
2265
+ * CCBC-92 release ringbuffer in `libcouchbase_purge_single_server`
2266
+
2267
+ ## 1.0.5 (2012-08-15)
2268
+
2269
+ 6 files changed, 23 insertions(+), 15 deletions(-)
2270
+
2271
+ * CCBC-91 Fix switching to backup node in case of server outage
2272
+
2273
+ * CCBC-91 Reset timer for commands with `NOT_MY_VBUCKET` response
2274
+
2275
+ ## 1.1.0dp9 (2012-07-27)
2276
+
2277
+ 5 files changed, 18 insertions(+), 11 deletions(-)
2278
+
2279
+ * Render auth credentials for View requests.
2280
+ `libcouchbase_make_http_request()` won't accept credentials anymore.
2281
+ It will pick them bucket configuration.
2282
+
2283
+ ## 1.1.0dp8 (2012-07-27)
2284
+
2285
+ 36 files changed, 2093 insertions(+), 704 deletions(-)
2286
+
2287
+ * Allow the client to specify the verbosity level on the servers using
2288
+ `lcb_set_verbosity()` function.
2289
+
2290
+ * Bind timeouts to server sockets instead of commands. This means that
2291
+ from this point timeout interval will be started from the latest IO
2292
+ activity on the socket. This is a behavior change from the 1.0 series.
2293
+
2294
+ * Allow the user to get the number of replicas using
2295
+ `libcouchbase_get_num_replicas()`
2296
+
2297
+ * Allow a user to breakout from the event loop in callbacks using
2298
+ `libcouchbase_breakout()`
2299
+
2300
+ * Make `libcouchbase_wait()` re-entrable
2301
+
2302
+ * Let users detect if the event loop running already using
2303
+ `libcouchbase_is_waiting()` function.
2304
+
2305
+ * CCBC-77 Use separate error code for ENOMEM on the client
2306
+
2307
+ * CCBC-82 Implement read replica
2308
+
2309
+ * CCBC-85 Implement general purpose timers. It is possible for users
2310
+ to define their own timers using `libcouchbase_timer_create()`
2311
+ function. (See headers for more info)
2312
+
2313
+ * Implement multiple timers for windows
2314
+
2315
+ * CCBC-15 Add OBSERVE command
2316
+
2317
+ * Allow users to specify content type for HTTP request
2318
+
2319
+ * Fix to handle the case when View base doesn't have URI schema
2320
+
2321
+ * Separate HTTP callbacks for couch and management requests
2322
+
2323
+ * Claim that server has data in buffers if there are HTTP requests
2324
+ pending. Without this patch the event loop can be stopped
2325
+ prematurely.
2326
+
2327
+ * Add new cbc commands and options:
2328
+
2329
+ * cbc-view (remove couchview example)
2330
+ * cbc-verbosity
2331
+ * cbc-admin
2332
+ * cbc-bucket-delete
2333
+ * cbc-bucket-create
2334
+ * Add -p and -r options to cbc-cp to control persistence (uses
2335
+ OBSERVE internally)
2336
+
2337
+ ## 1.1.0dp7 (2012-06-19)
2338
+
2339
+ 18 files changed, 266 insertions(+), 115 deletions(-)
2340
+
2341
+ * Add support for notification callbacks for configuration changes.
2342
+ Now it is possible to install a hook using function
2343
+ `libcouchbase_set_configuration_callback()`, and be notified about all
2344
+ configuration changes.
2345
+
2346
+ * Implement function to execution management requests. Using
2347
+ `libcouchbase_make_management_request()` function you can configure
2348
+ the cluster, add/remove buckets, rebalance etc. It behaves like
2349
+ `libcouchbase_make_couch_request()` but works with another endpoint.
2350
+
2351
+ * Extract HTTP client. Backward incompatible change in Couchbase View
2352
+ subsystem
2353
+
2354
+ ## 1.1.0dp6 (2012-06-13)
2355
+
2356
+ 20 files changed, 201 insertions(+), 127 deletions(-)
2357
+
2358
+ * CCBC-70 Close dynamic libraries. Fixes small memory leak
2359
+
2360
+ * CCBC-72 Fix compilation on macosx with gtest from homebrew
2361
+
2362
+ * CCBC-71 Implement 'help' command for cbc tool
2363
+
2364
+ * Undefine NDEBUG to avoid asserts to be optimized out
2365
+
2366
+ * Fix win32 builds:
2367
+
2368
+ * Add suffix to cbc command implementations
2369
+ * Fix guards for socket errno macros
2370
+ * Define `size_t` types to fix MSVC 9 build
2371
+ * MSVC 9 isn't C99, but has stddef.h, so just include it
2372
+
2373
+ * CCBC-63 Include types definitions for POSIX systems. Fixes C++
2374
+ builds on some systems.
2375
+
2376
+ ## 1.1.0dp5 (2012-06-06)
2377
+
2378
+ 7 files changed, 65 insertions(+), 9 deletions(-)
2379
+
2380
+ * The library doesn't depend on pthreads (eliminates package lint
2381
+ warnings)
2382
+
2383
+ * Implement 'cbc-hash' to match server/vbucket for given key
2384
+
2385
+ ## 1.1.0dp4 (2012-06-05)
2386
+
2387
+ 8 files changed, 54 insertions(+), 7 deletions(-)
2388
+
2389
+ * cbc: strtoull doesn't exist on win32, therefore use C++ equivalent.
2390
+
2391
+ * integration with Travis-CI
2392
+
2393
+ ## 1.1.0dp3 (2012-06-03)
2394
+
2395
+ 54 files changed, 1874 insertions(+), 824 deletions(-)
2396
+
2397
+ * CCBC-68 Implement `UNLOCK_KEY` (`UNL`) command
2398
+
2399
+ * CCBC-68 Implement `GET_LOCKED` (`GETL`) command
2400
+
2401
+ * hashset.c: iterate over whole set on rehashing. Fixes memory leaks
2402
+ related to hash collisions (905ef95)
2403
+
2404
+ * Destroy view requests items when server get destroyed
2405
+
2406
+ * Do not call View callbacks for cancelled requests
2407
+
2408
+ * Fix `ringbuffer_memcpy()` (36afdb2)
2409
+
2410
+ * CCBC-62 A hang could occur in `libcouchbase_wait()` after the timeout
2411
+ period. Check for breakout condition after purging servers
2412
+
2413
+ * CCBC-65 A small memory leak can occur with frequent calls to
2414
+ `libcouchbase_create()` and `libcouchbase_destroy()`
2415
+
2416
+ * CCBC-64. Timeouts can occur during topology changes, rather than be
2417
+ correctly retried. Send the retry-packet to new server
2418
+
2419
+ * `vbucket_found_incorrect_master()` returns server index
2420
+
2421
+ * Fix `ringbuffer_is_continous()`
2422
+
2423
+ * Pick up cookies from pending buffer unless node connected
2424
+
2425
+ * RCBC-33 A fix for a buffer overflow with the supplied password as
2426
+ has been integrated. While it is a buffer overflow issue, this is
2427
+ not considered to be a possible security issue because the password
2428
+ to the bucket is not commonly supplied by an untrusted source
2429
+
2430
+ ## 1.0.4 (2012-06-01)
2431
+
2432
+ 15 files changed, 330 insertions(+), 76 deletions(-)
2433
+
2434
+ * CCBC-65 A small memory leak can occur with frequent calls to
2435
+ `libcouchbase_create()` and `libcouchbase_destroy()`
2436
+
2437
+ * CCBC-62 A hang could occur in `libcouchbase_wait()` after the timeout
2438
+ period. Check for breakout condition after purging servers
2439
+
2440
+ * CCBC-64. Timeouts can occur during topology changes, rather than be
2441
+ correctly retried. Send the retry-packet to new server
2442
+
2443
+ * [backport] `vbucket_found_incorrect_master()` returns server index.
2444
+ (orig: c32fdae)
2445
+
2446
+ ## 1.0.3 (2012-05-02)
2447
+
2448
+ 6 files changed, 44 insertions(+), 7 deletions(-)
2449
+
2450
+ * [backport] Fix `ringbuffer_is_continous()` (orig: 9cfda9d)
2451
+
2452
+ * [backport] Pick up cookies from pending buffer unless node connected
2453
+ (orig: 463958d)
2454
+
2455
+ * RCBC-33 A fix for a buffer overflow with the supplied password as
2456
+ has been integrated. While it is a buffer overflow issue, this is
2457
+ not considered to be a possible security issue because the password
2458
+ to the bucket is not commonly supplied by an untrusted source
2459
+
2460
+ ## 1.1.0dp2 (2012-04-10)
2461
+
2462
+ 10 files changed, 54 insertions(+), 20 deletions(-)
2463
+
2464
+ * CCBC-59 Don't wait for empty buffers. If called with no operations
2465
+ queued, `libcouchbase_wait()` will block forever. This means that a
2466
+ single threaded application that calls `libcouchbase_wait()` at
2467
+ different times to make sure operations are sent to the server runs
2468
+ the risk of stalling indefinitely. This is a very likely scenario.
2469
+
2470
+ * Don't define `size_t` and `ssize_t` for VS2008
2471
+
2472
+ * Fix segfault while authorizing on protected buckets (211bb04)
2473
+
2474
+ ## 1.1.0dp (2012-04-05)
2475
+
2476
+ 59 files changed, 4374 insertions(+), 1205 deletions(-)
2477
+
2478
+ * This release adds new functionality to directly access Couchbase
2479
+ Server views using the `libcouchbase_make_couch_request()` function.
2480
+ See the associated documentation and header files for more details
2481
+
2482
+ * Check for newer libvbucket
2483
+
2484
+ * MB-4834: Request the tap bytes in a known byte order (adf2b30)
2485
+
2486
+ ## 1.0.2 (2012-03-06)
2487
+
2488
+ 83 files changed, 4095 insertions(+), 654 deletions(-)
2489
+
2490
+ * Implement VERSION command from binary protocol
2491
+
2492
+ * Allow use of libcouchbase to pure memcached clusters by using
2493
+ `libcouchbase_create_compat()` function
2494
+
2495
+ * Always sign deb packages and allow to pass PGP key
2496
+
2497
+ * Bundle the protocol definitions for memcached
2498
+ (`memcached/protocol_binary.h` and `memcached/vbucket.h`) to make it
2499
+ easier to build
2500
+
2501
+ * Bundle sasl client implementation
2502
+
2503
+ * Fix windows build for MS Visual Studio 9
2504
+
2505
+ * define `E*` if missing
2506
+ * stdint header
2507
+
2508
+ * Add support for multiple hosts for the bootstrap URL. A list of
2509
+ hosts:port separated by ';' to the administration port of the
2510
+ couchbase cluster. (ex: "host1;host2:9000;host3" would try to
2511
+ connect to host1 on port 8091, if that fails it'll connect to host2
2512
+ on port 9000 etc)
2513
+
2514
+ * Raise error if <stdint.h> missing
2515
+
2516
+ * Add JSON support for cbc-cp command
2517
+
2518
+ * Add option to set timeout for cbc
2519
+
2520
+ * Added support for '-' to cp
2521
+
2522
+ * Added cbc-verify: verify content in cache with files
2523
+
2524
+ * Now cbc supports better usage messages
2525
+
2526
+ ## 1.0.1 (2012-02-13)
2527
+
2528
+ 65 files changed, 3275 insertions(+), 1329 deletions(-)
2529
+
2530
+ * CCBC-38 Use alternate nodes when current is dead. A fix to allow the
2531
+ client library to failover automatically to other nodes when the
2532
+ initial bootstrap node becomes unavailable has been added. All users
2533
+ are recommended to upgrade for this fix.
2534
+
2535
+ * Fix connect timeouts. Timeouts are per-operation and only set if
2536
+ there is any I/O. The special exception to this is initial
2537
+ connections, which do not necessarily have a data stream or write
2538
+ buffer associated wiht them yet.
2539
+
2540
+ * Update to new MT-safe libvbucket API
2541
+
2542
+ * Add option for embedding libevent IO plugin
2543
+
2544
+ * Fix multi-{get,touch} requests handling when nkeys > 1
2545
+
2546
+ * Allow to build without tools which require C++ compiler
2547
+
2548
+ * Destroy event base if we created it
2549
+
2550
+ * CCBC-51 Check server index before using
2551
+
2552
+ * Handle `PROTOCOL_BINARY_RESPONSE_NOT_MY_VBUCKET` and retry it until
2553
+ success or another error, which can be handled by caller
2554
+
2555
+ * Do not attempt SASL when SASL already in progress
2556
+
2557
+ * Finer grained error reporting for basic REST errors:
2558
+
2559
+ * return `LIBCOUCHBASE_AUTH_ERROR` on HTTP 401
2560
+ * return `LIBCOUCHBASE_BUCKET_ENOENT` on HTTP 404
2561
+ * event loop is stopped (via `maybe_breakout`) on REST error
2562
+
2563
+ * Fixed segfaults and memory access errors on libevent1.4
2564
+
2565
+ * Allow for notification on initial vbucket config. This makes
2566
+ libcouchbase `stop_event_loop` and libcouchbase maybe breakout work
2567
+ properly in cooperative asynchronous event loops. the wait flag is
2568
+ set by `libcouchbase_wait()` and unset by `maybe_breakout`.
2569
+ Additionally, `breakout_vbucket_state_listener` will call
2570
+ `maybe_breakout` as well, instead of having synchronous behavior
2571
+ assumed by `libcouchbase_wait()`
2572
+
2573
+ * Fix `sasl_list_mech_response_handler()`. `sasl_client_start()` expects
2574
+ null-terminated string
2575
+
2576
+ * Refactor: use `libcouchbase_xxxx` for the datatypes
2577
+
2578
+ * Do not notify user about the same error twice. Use command callback
2579
+ when it's possible. (e.g. where the `libcouchbase_server_t` is
2580
+ accessible and we can `libcouchbase_failout_server()`)
2581
+
2582
+ * Install configuration.h for win32
2583
+
2584
+ * CCBC-20 Implement operation timeouts. Timeouts applies for all
2585
+ operations, and the timer starts running from the moment you call
2586
+ the libcouchbase operation you want. The timer includes times for
2587
+ connect/send/ receive, and all of the time our application spend
2588
+ before letting the event loop call callbacks into libcouchbase.
2589
+
2590
+ * Fix double free() error when reading key from packet in handler.c
2591
+ (b5d485a)
2592
+
2593
+ ## 1.0.0 (2012-01-22)
2594
+
2595
+ 170 files changed, 6048 insertions(+), 7553 deletions(-)
2596
+
2597
+ * Allow the user to specify sync mode on an instance
2598
+
2599
+ * Empty string as bucket name should be treated as NULL
2600
+
2601
+ * Bail out if you can't find memcached/vbucket.h and
2602
+ libvbucket/vbucket.h
2603
+
2604
+ * New command cbc. This command intended as the analog of `mem*`
2605
+ tools from libmemcached distribution. Supported commands:
2606
+
2607
+ * cbc-cat
2608
+ * cbc-cp
2609
+ * cbc-create
2610
+ * cbc-flush
2611
+ * cbc-rm
2612
+ * cbc-stats
2613
+ * cbc-send
2614
+ * cbc-receive
2615
+
2616
+ * CCBC-37 allow config for cbc tool to be read from .cbcrc
2617
+
2618
+ * Convert flags to network byte order
2619
+
2620
+ * Remove <memcached/vbucket.h> dependency
2621
+
2622
+ * Use the error handler instead of printing to stderr
2623
+
2624
+ * Disable Views code
2625
+
2626
+ * Don't accept NULL as a valid "callback"
2627
+
2628
+ * Add make targets to build RPM and DEB packages
2629
+
2630
+ * Allow download memcached headers from remote host
2631
+
2632
+ * Added docbook-based manual pages
2633
+
2634
+ * Gracefully update vbucket configuration. This means that the
2635
+ connection listener, could reconfigure data sockets on the fly
2636
+
2637
+ * Allow libcouchbase build with libevent 1.x (verified for 1.4.14)
2638
+
2639
+ * Aggregate flush responses
2640
+
2641
+ * Add stats command
2642
+
2643
+ ## 0.3.0 (2011-11-02)
2644
+
2645
+ 102 files changed, 6188 insertions(+), 1531 deletions(-)
2646
+
2647
+ * Add flush command from binary protocol
2648
+
2649
+ * Remove packet filter
2650
+
2651
+ * Use ringbuffers instead `buffer_t`
2652
+
2653
+ * Win32 build fixes
2654
+
2655
+ * Allow to specify IO framework but using IO plugins
2656
+
2657
+ * CCBC-11 The interface to access views
2658
+
2659
+ * Initial man pages
2660
+
2661
+ * Extend the test suite
2662
+
2663
+ ## 0.2.0 (2011-09-01)
2664
+
2665
+ 85 files changed, 12144 insertions(+)
2666
+
2667
+ * Simple bootstapping which builds HTTP packet and listens
2668
+ /pools/default/buckets/BUCKETNAME directly. Allowed usage of
2669
+ defaults (bucket name, password)
2670
+
2671
+ * Support basic set of binary protocol commands:
2672
+
2673
+ * get (get and touch)
2674
+ * set
2675
+ * increment/decrement
2676
+ * remove
2677
+ * touch
2678
+
2679
+ * MB-3294 Added `_by_key` functions
2680
+
2681
+ * CCBC-5 Fixed abort in `do_read_data` (c=0x7b09bf0) at src/event.c:105
2682
+
2683
+ * Added timings API. It might be possible to turn on timing collection
2684
+ using `libcouchbase_enable_timings()`/`libcouchbase_disable_timings()`,
2685
+ and receive the data in timings callback.
2686
+
2687
+ * Basic TAP protocol implementation
2688
+
2689
+ * Initial win32 support
2690
+
2691
+