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