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