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