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