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