17ecb11eeSSergey Avseyev# Release Notes
27ecb11eeSSergey Avseyev
369f9a4ebSSergey Avseyev## 3.0.0 (2020-01-17)
469f9a4ebSSergey Avseyev
569f9a4ebSSergey Avseyev* CCBC-1152: Enable `SCRAM-SHA*` SASL by default.
669f9a4ebSSergey Avseyev* CCBC-1153: Renamed `lcb_wait3` to `lcb_wait`.
769f9a4ebSSergey Avseyev* CCBC-1147: Return `LCB_SUCCESS` for `lcb_exists` when the document is missing. `lcb_respexists_is_found` should be used on its response object to check the presense of the document.
869f9a4ebSSergey Avseyev* CCBC-1152: Do not allow to use SASL PLAIN on non-TLS connections. Compiling libcouchbase with OpenSSL is strongly recommended.
969f9a4ebSSergey Avseyev* CCBC-1032: Use operation node to resolve collection and return timeout when collection cannot be resolved
1069f9a4ebSSergey Avseyev* Added shortcut for query options to request metrics
1169f9a4ebSSergey Avseyev* Do not fallback to single subdocument API when only one specification passed to `lcb_subdoc`.
1269f9a4ebSSergey Avseyev* CCBC-1137: Allow to retrieve error context for HTTP response (`lcb_http` API)
1369f9a4ebSSergey Avseyev* CCBC-1145: Expose endpoints in error context.
1469f9a4ebSSergey Avseyev* CCBC-1146: Expose user-cookie in retry handler.
1569f9a4ebSSergey Avseyev* CCBC-1148: Added NULL checks for enhanced error info.
1669f9a4ebSSergey Avseyev* CCBC-1075: Renamed "FTS" to "SEARCH" in the APIs.
1769f9a4ebSSergey Avseyev* CCBC-1073: Renamed "N1QL" to "QUERY" in the APIs.
1869f9a4ebSSergey Avseyev* Fixed bucketless bootstrap for Server 6.0.
1969f9a4ebSSergey Avseyev* Fixed various memory leaks. Improved build, testing and packaging systems.
2069f9a4ebSSergey Avseyev
21150aa4adSSergey Avseyev## 3.0.0-beta.2 (2019-12-23)
22150aa4adSSergey Avseyev
23150aa4adSSergey Avseyev* CCBC-1066: Update retry framework to retry handling RFC
24150aa4adSSergey Avseyev* Reorganize error handing according to RFC. Expose error context object.
25150aa4adSSergey Avseyev* CCBC-1123: migrate exists function to `GET_META(0xa0)`
26150aa4adSSergey Avseyev* CCBC-1141: Map `MULTI_PATH_FAILURE` to success code for subdocument
27150aa4adSSergey Avseyev* CCBC-1126: Ensure KV connection select bucket when needed
28150aa4adSSergey Avseyev* CCBC-1127: Fix extlen for subdocument
29150aa4adSSergey Avseyev* CCBC-1101: Fix location of plugins for debian systems
30150aa4adSSergey Avseyev* Use per-operation timeout when deriving durability timeout
31150aa4adSSergey Avseyev* Remove durability support from GET operation
32150aa4adSSergey Avseyev* Rename payload setters/getters for queries
33150aa4adSSergey Avseyev* Fix setting empty path to subdoc mutation
34150aa4adSSergey Avseyev* Remove old flush command
35150aa4adSSergey Avseyev* Do not use classic authenticator for cluster instances
36150aa4adSSergey Avseyev* Allow to set CAS value for counter operations
37150aa4adSSergey Avseyev* Views: extend lifetime for content type string object
38150aa4adSSergey Avseyev* CCBC-1112: Send durability timeout in network byte ordering. This was being sent in host byte ordering before, which failed on some platforms.
39150aa4adSSergey Avseyev* Validate getreplica options before collection resolving. It allows to fail faster if the options are not correct for the command.
40150aa4adSSergey Avseyev* CCBC-1136: use `uint64_t` instead of type aliases for CAS
41150aa4adSSergey Avseyev* Fix const access specifier for logger API
42150aa4adSSergey Avseyev* Fix warnings reported by compiler and static analyzer
43150aa4adSSergey Avseyev* Fix leaks reported by memory sanitizer tools
44150aa4adSSergey Avseyev* Add cbc commands for search and analytics queries
45150aa4adSSergey Avseyev* Do not insert date in generated lexer (`cbc-gen`)
46150aa4adSSergey Avseyev
47397eb8eaSSergey Avseyev## 3.0.0-beta.1 (2019-10-01)
48397eb8eaSSergey Avseyev
49397eb8eaSSergey Avseyev* Renamed FTS function `lcb_cmdfts_query` to `lcb_cmdfts_payload`. This is done because in next beta release, the first
50397eb8eaSSergey Avseyev  function will modify only query part of the payload.
51397eb8eaSSergey Avseyev* 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.
52397eb8eaSSergey Avseyev* Implemented accessors to control subdocument store symantics: `lcb_cmdsubdoc_store_semantics`
53397eb8eaSSergey Avseyev* Add accessor to access deleted for subdoc: `lcb_cmdsubdoc_access_deleted`
54397eb8eaSSergey Avseyev* Updated build scripts to require compiler to support at least C++11.
55397eb8eaSSergey Avseyev* Renamed KV command accessors from `*_expiration()` to `*_expiry()`.
56397eb8eaSSergey Avseyev* CCBC-939: Performance improvement in tracing subsystem by avoiding copies for network addresses and system tags
57397eb8eaSSergey Avseyev* Report reasons of `lcb_open` failures in the logs.
58397eb8eaSSergey Avseyev* Do not fallback to "default" bucket in the cluster mode.
59397eb8eaSSergey Avseyev* Implemented function to test for end of stream of replica responses: `lcb_respreplica_is_final`
60397eb8eaSSergey Avseyev* Fixed key size calculation for `lcb_getreplica`.
61397eb8eaSSergey Avseyev* Made ciphers and minimum TLS version tunable. New environment variables could be defined to control openssl
62397eb8eaSSergey Avseyev  initialization:
63397eb8eaSSergey Avseyev  - `LCB_SSL_CIPHER_LIST` to pass to `SSL_CTX_set_cipher_list`
64397eb8eaSSergey Avseyev  - `LCB_SSL_CIPHERSUITES` to pass to `SSL_CTX_set_ciphersuites`
65397eb8eaSSergey Avseyev  - `LCB_SSL_MINIMUM_TLS` with supported values (`"tlsv1.1"`, `"tlsv1.2"` and `"tlsv1.3"`) to configure flags for `SSL_CTX_set_options`
66397eb8eaSSergey Avseyev* Removed multi-ctx from public API. The feature will re-appear in future releases in the shape, that is more consistent
67397eb8eaSSergey Avseyev  with other APIs.
68397eb8eaSSergey Avseyev* CCBC-1090: Handle `GET_COUNT` as lookup subdoc operation
69397eb8eaSSergey Avseyev* CCBC-1088: Renamed `lcb_cmdsubdoc_operations` to `lcb_cmdsubdoc_specs` (also renamed `lcb_SUBDOCOPS` to `lcb_SUBDOCSPECS`)
70397eb8eaSSergey Avseyev* CCBC-1092: add count/interval options for cbc-ping
71397eb8eaSSergey Avseyev* Remove CAS durability polling. New server-side durability means must be used instead, or polling using mutation-token.
72397eb8eaSSergey Avseyev* Encapsulate create options into `lcb_CREATEOPTS *`. See `lcb_createopts_create` function.
73397eb8eaSSergey Avseyev* Refactored logger. See `example/minimal/logger.c` example
74397eb8eaSSergey Avseyev* CCBC-1086: Renamed `LCB_STORE_ADD` and remove `LCB_STORE_SET`
75397eb8eaSSergey Avseyev* CCBC-1079: Renamed instance option from `fetch_mutation_tokens` to `enable_mutation_tokens`. Enable mutation tokens by
76397eb8eaSSergey Avseyev  default.
77397eb8eaSSergey Avseyev* CCBC-1091: Set `HAVE__FTIME64_S` when not running tests
78397eb8eaSSergey Avseyev* CCBC-1069: Don't hardcode path prefix for analytics
79397eb8eaSSergey Avseyev* Renamed `cbc-bench` to `cbc-gen`, and implemented workload type selector and batch support (see `tools/bench-script.txt`).
80397eb8eaSSergey Avseyev* Various API fixes and cleanup
81397eb8eaSSergey Avseyev
82684f9f78SSergey Avseyev## 3.0.0-alpha.5 (2019-08-09)
83684f9f78SSergey Avseyev
84684f9f78SSergey Avseyev* 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.
85684f9f78SSergey Avseyev* CCBC-983: Even more asynchronous example for libuv
86684f9f78SSergey Avseyev* Don't log if the logger callback is not specified
87684f9f78SSergey Avseyev* 3GCP improvements and examples
88684f9f78SSergey Avseyev* Fix memory leak in collections wrapper
89684f9f78SSergey Avseyev* Implement setter for prettiness of N1QL response payload.
90684f9f78SSergey Avseyev* CCBC-1059: Fixed hostname truncation when using alt-network
91684f9f78SSergey Avseyev* Add bucket to the connection config cache. When `config_cache` or `LCB_CNTL_CONFIGCACHE` argument is a directory (ends
92684f9f78SSergey Avseyev  with `/`), the library will use a bucket name as the file name, so that different buckets can use the same connection
93684f9f78SSergey Avseyevstring options set.
94684f9f78SSergey Avseyev* Add missing timeouts for HTTP APIs.
95684f9f78SSergey Avseyev* CCBC-1058: Fix some casting warnings on Mac OS.
96684f9f78SSergey Avseyev
97d49e4cbfSSergey Avseyev## 3.0.0-alpha.4 (2019-07-10)
98d49e4cbfSSergey Avseyev
99d49e4cbfSSergey Avseyev* Do not build cbc-bench if compiler does not support C++11
100d49e4cbfSSergey Avseyev* CCBC-1034: Do not enable collections automatically. When user disabled collections, the library should not enable it automatically
101d49e4cbfSSergey Avseyev* CCBC-1024: per-operation KV timeouts
102d49e4cbfSSergey Avseyev* CCBC-1057: Support enhanced prepared statements
103d49e4cbfSSergey Avseyev* Allow to specify `client_context_id` for N1QL query
104d49e4cbfSSergey Avseyev* GCCCP (G3CP) implementation
105d49e4cbfSSergey Avseyev* CCBC-1056: Workaround for `H_collections_get_cid` segfault due to NULL ext field in response
106d49e4cbfSSergey Avseyev* CCBC-983: Example for external libuv loop
107d49e4cbfSSergey Avseyev* Implement better benchmarking tool (cbc-benchmark):
108d49e4cbfSSergey Avseyev  -  smooth workload generator (no saw-shaped graph)
109d49e4cbfSSergey Avseyev  -  better support of writes with durability
110d49e4cbfSSergey Avseyev  -  interactive shell
111d49e4cbfSSergey Avseyev* CCBC-1052: remove spatial views from API
112d49e4cbfSSergey Avseyev* CCBC-600: Use bucket not found error if select bucket fails
113d49e4cbfSSergey Avseyev* CCBC-1055: use `lcb_assert` wrapper instead of assert(3). Do not include assert.h if NDEBUG defined
114d49e4cbfSSergey Avseyev* CCBC-866: track invalidated `active_provider_list` using unique ID
115d49e4cbfSSergey Avseyev
1164e5efd79SSergey Avseyev## 3.0.0-alpha.3 (2019-05-02)
1174e5efd79SSergey Avseyev
1184e5efd79SSergey Avseyev* Removed debug output.
1194e5efd79SSergey Avseyev
1204e6095a7SSergey Avseyev## 3.0.0-alpha.2 (2019-05-02)
1214e6095a7SSergey Avseyev
1224e6095a7SSergey Avseyev* CCBC-1030: Derive value of durability timeout from KV operation timeout.
1234e6095a7SSergey Avseyev* CCBC-1037: Implement `lcb_exists` as lightweight way to check if document exists.
1244e6095a7SSergey Avseyev* CCBC-1040: Use aspend counter for ingest queries only (solves inifinite wait for regular analytics queries)
1254e6095a7SSergey Avseyev* CCBC-1036: Add support for durableWrite for `cbc-pillowfight` (see `--durability-level` switch)
1264e6095a7SSergey Avseyev* Fix network IO when running openssl 1.1.1b (solves infinite loop on reading data from sockets).
1274e6095a7SSergey Avseyev
128988e73b1SSergey Avseyev## 3.0.0-alpha.1 (2019-04-03)
1291fde4080SSergey Avseyev
130988e73b1SSergey Avseyev* [CCBC-1017](https://issues.couchbase.com/browse/CCBC-1017): Removed v1,v2,v3 APIs.
131faff593cSSergey Avseyev
132988e73b1SSergey Avseyev  Migration path: New API have to used. Instead open structures, setter-functions available.
133faff593cSSergey Avseyev
1341fde4080SSergey Avseyev* [CCBC-655](https://issues.couchbase.com/browse/CCBC-655): Removed `retry_backoff` setting. This is a redundant
1351fde4080SSergey Avseyev  property, as the wait period is always `retry_interval * retry_backoff * num_attempts`. In this case, `retry_interval`
1361fde4080SSergey Avseyev  itself can be specified as `retry_interval * retry_backoff` as a single setting.
1371fde4080SSergey Avseyev
1381fde4080SSergey Avseyev  Migration path:
1391fde4080SSergey Avseyev  * if the application used `"retry_backoff"` setting via connection string or `lcb_cntl_string()`, it should remove
1401fde4080SSergey Avseyev    that call, and set only `"retry_interval"` with new value equal `retry_interval * retry_backoff` (the value is time
1411fde4080SSergey Avseyev    in seconds represented as floating point number).
1421fde4080SSergey Avseyev  * if the application used `LCB_CNTL_RETRY_BACKOFF` setting via `lcb_cntl`, it should remove that call, and set only
1431fde4080SSergey Avseyev    `LCB_CNTL_RETRY_INTERVAL` with new value equal `retry_interval * retry_backoff` (the value is time in microseconds
1441fde4080SSergey Avseyev    represented as unsigned 32-bit integer).
1451fde4080SSergey Avseyev
146728c2235SSergey Avseyev* [CCBC-465](https://issues.couchbase.com/browse/CCBC-465): Removed `lcb_error_callback` and related function to get
147728c2235SSergey Avseyev  and set it for the instance.
148728c2235SSergey Avseyev
149728c2235SSergey Avseyev  Migration path: the application should use `lcb_bootstrap_callback` instead.
150728c2235SSergey Avseyev
151220216d3SSergey Avseyev* [CCBC-466](https://issues.couchbase.com/browse/CCBC-466): Removed `lcb_get_last_error`. This function is deprecated
152220216d3SSergey Avseyev  and its use can result in false positives, true negatives. Most internals do not set `last_error`, and because there
153220216d3SSergey Avseyev  may be multiple things going on within the library, getting the last error does not make sense.
154220216d3SSergey Avseyev
155220216d3SSergey Avseyev  Migration path: only arguments/fields in operation and bootstrap callbacks should be used.
156220216d3SSergey Avseyev
1575e53c750SSergey Avseyev* [CCBC-463](https://issues.couchbase.com/browse/CCBC-463): Removed syncmode. This simplifies internals of the library,
1585e53c750SSergey Avseyev  Synchronous mode was never implemented for REST server APIs, or for new subdocument features, and was deprecated.
1595e53c750SSergey Avseyev
1605e53c750SSergey Avseyev  Migration path: use `lcb_wait()` and `lcb_wait3()` to implement synchronous interaction.
1615e53c750SSergey Avseyev
162793dc954SSergey Avseyev* [CCBC-863](https://issues.couchbase.com/browse/CCBC-863): Removed `lcb_configuration_callback` and related functions.
163793dc954SSergey Avseyev  This API has been superseded by bootstrap callback, which can not just signal about configuration update, but also
164793dc954SSergey Avseyev  provide errors code.
165793dc954SSergey Avseyev
166793dc954SSergey Avseyev  Migration path: the application should use `lcb_bootstrap_callback` instead.
167793dc954SSergey Avseyev
168a2f3d157SSergey Avseyev* [CCBC-467](https://issues.couchbase.com/browse/CCBC-467): Removed `lcb_verify_struct_size` and related definitions.
169a2f3d157SSergey Avseyev   These functions have not been widely used or maintained. Their purpose was to assist applications in verifying the
170a2f3d157SSergey Avseyev   structure sizes used by the library conformed to that of what their application was expecting. However in reality the
171a2f3d157SSergey Avseyev   structure sizes rarely changed, and when they did change, they only changed in compatible ways so that applications
172a2f3d157SSergey Avseyev   compiled against older versions would never break anyway.
173a2f3d157SSergey Avseyev
174a2f3d157SSergey Avseyev   Migration path: If the application directly call this API, all the calls could be safely removed.
175a2f3d157SSergey Avseyev
17679c8cba7SSergey Avseyev* [CCBC-468](https://issues.couchbase.com/browse/CCBC-468): Removed `lcb_timer_t` API. The timer API was never really
17779c8cba7SSergey Avseyev  used and should have always been private (its use came in before we started having 'interface attributes' within the
17879c8cba7SSergey Avseyev  library).
17979c8cba7SSergey Avseyev
18079c8cba7SSergey Avseyev  Migration path: Remove all usages of timer API function and structures. If they are necessary, consider using
18179c8cba7SSergey Avseyev  external IO loop, and use its timers API (see `lcb_create_io_ops()`).
18279c8cba7SSergey Avseyev
18311e18ce0SSergey Avseyev* [CCBC-864](https://issues.couchbase.com/browse/CCBC-864): Removed `lcb_flush_buffers`. This function does nothing.
18411e18ce0SSergey Avseyev
18511e18ce0SSergey Avseyev  Migration path: Remove all usages of this function.
18611e18ce0SSergey Avseyev
187563eac51SSergey Avseyev* [CCBC-865](https://issues.couchbase.com/browse/CCBC-865): Removed old-style setting accessors. They were implemented
188563eac51SSergey Avseyev  before `lcb_cntl`, and should not be used.
189563eac51SSergey Avseyev
190563eac51SSergey Avseyev  Migration path: the following list represents mapping between old accessors and their `lcb_cntl` equivalents:
191563eac51SSergey Avseyev
192563eac51SSergey Avseyev  | old                                        | new                                              |
193563eac51SSergey Avseyev  |--------------------------------------------|--------------------------------------------------|
194563eac51SSergey Avseyev  | `lcb_behavior_set_ipv6`                    | `lcb_cntl(LCB_CNTL_SET, LCB_CNTL_IP6POLICY)`     |
195563eac51SSergey Avseyev  | `lcb_behavior_get_ipv6`                    | `lcb_cntl(LCB_CNTL_GET, LCB_CNTL_IP6POLICY)`     |
196563eac51SSergey Avseyev  | `lcb_behavior_set_config_errors_threshold` | `lcb_cntl(LCB_CNTL_SET, LCB_CNTL_CONFERRTHRESH)` |
197563eac51SSergey Avseyev  | `lcb_behavior_get_config_errors_threshold` | `lcb_cntl(LCB_CNTL_GET, LCB_CNTL_CONFERRTHRESH)` |
198563eac51SSergey Avseyev  | `lcb_behavior_set_timeout`                 | `lcb_cntl(LCB_CNTL_SET, LCB_CNTL_OP_TIMEOUT)`    |
199563eac51SSergey Avseyev  | `lcb_behavior_get_timeout`                 | `lcb_cntl(LCB_CNTL_GET, LCB_CNTL_OP_TIMEOUT)`    |
200563eac51SSergey Avseyev  | `lcb_behavior_set_view_timeout`            | `lcb_cntl(LCB_CNTL_SET, LCB_CNTL_VIEW_TIMEOUT)`  |
201563eac51SSergey Avseyev  | `lcb_behavior_get_view_timeout`            | `lcb_cntl(LCB_CNTL_GET, LCB_CNTL_VIEW_TIMEOUT)`  |
202563eac51SSergey Avseyev
20362a8ab54SSergey Avseyev## 2.10.3 (December 20 2018)
20462a8ab54SSergey Avseyev
20562a8ab54SSergey Avseyev* [CCBC-1008](https://issues.couchbase.com/browse/CCBC-1008): jsoncpp: use
20662a8ab54SSergey Avseyev  `unique_ptr` instead of `auto_ptr`.
20762a8ab54SSergey Avseyev
20862a8ab54SSergey Avseyev* [CCBC-1011](https://issues.couchbase.com/browse/CCBC-1011): Port
20962a8ab54SSergey Avseyev  vbucketkeygen tool to cbc-keygen. The tool generates list of keys, that
21062a8ab54SSergey Avseyev  distributed over all vBuckets in the bucket.
21162a8ab54SSergey Avseyev
21262a8ab54SSergey Avseyev* [CCBC-1006](https://issues.couchbase.com/browse/CCBC-1006): Cleanup pending
21362a8ab54SSergey Avseyev  queue of pipeline on retry
21462a8ab54SSergey Avseyev
21562a8ab54SSergey Avseyev* [CCBC-1007](https://issues.couchbase.com/browse/CCBC-1007): allow using
21662a8ab54SSergey Avseyev  trusted store path without key file
21762a8ab54SSergey Avseyev
21862a8ab54SSergey Avseyev* [MB-31875](https://issues.couchbase.com/browse/MB-31875): cliopts: grow list
21962a8ab54SSergey Avseyev  only if needed
22062a8ab54SSergey Avseyev
2216b3f760eSSergey Avseyev## 2.10.2 (November 23 2018)
2226b3f760eSSergey Avseyev
2236b3f760eSSergey Avseyev* Fixed incorrect header-guard for analytics.h, which might affect API
2246b3f760eSSergey Avseyev  visibility (when included before `libcouchbase/n1ql.h`)
2256b3f760eSSergey Avseyev
226992313b6SSergey Avseyev## 2.10.1 (November 22 2018)
227992313b6SSergey Avseyev
228992313b6SSergey Avseyev* [CCBC-997](https://issues.couchbase.com/browse/CCBC-997): Extract analytics
229992313b6SSergey Avseyev  queries into separate file, and expose new API as set of `lcb_analytics_*`
230992313b6SSergey Avseyev  functions.
231992313b6SSergey Avseyev
232992313b6SSergey Avseyev* [CCBC-992](https://issues.couchbase.com/browse/CCBC-992): KV ingest mode for
233992313b6SSergey Avseyev  analytics. Ingestion mode a way to funnel analytics results back into the KV
234992313b6SSergey Avseyev  layer through mutation.
235992313b6SSergey Avseyev
236992313b6SSergey Avseyev* [CCBC-991](https://issues.couchbase.com/browse/CCBC-991): Analytics Deferred
237992313b6SSergey Avseyev  Queries. Deferred queries allow to decouple the execution of an analytics
238992313b6SSergey Avseyev  query from actually fetching the results. This is very important for queries
239992313b6SSergey Avseyev  that take a long time to complete.
240992313b6SSergey Avseyev
241992313b6SSergey Avseyev* [CCBC-1004](https://issues.couchbase.com/browse/CCBC-1004): Fix request
242992313b6SSergey Avseyev  counting for CAS-observe. Incorrect mapping server indexes during scheduling
243992313b6SSergey Avseyev  observe requests might lead to crashes on multi-node clusters.
244992313b6SSergey Avseyev
245992313b6SSergey Avseyev* [CCBC-1005](https://issues.couchbase.com/browse/CCBC-1005): `select(2)`-based
246992313b6SSergey Avseyev  IO plugin: always use expiration when using `lcb_tick_nowait` function to
247992313b6SSergey Avseyev  avoid waiting for IO events.
248992313b6SSergey Avseyev
249992313b6SSergey Avseyev* Updates in testing infrastructure
250992313b6SSergey Avseyev
25189f85eb3SSergey Avseyev## 2.10.0 (October 18 2018)
25289f85eb3SSergey Avseyev
25389f85eb3SSergey Avseyev* [CCBC-982](https://issues.couchbase.com/browse/CCBC-982): Support analytics
25489f85eb3SSergey Avseyev  for N1QL service in `lcb_ping3`.
25589f85eb3SSergey Avseyev
25689f85eb3SSergey Avseyev* [CCBC-989](https://issues.couchbase.com/browse/CCBC-989): Write bucket
25789f85eb3SSergey Avseyev  capabilities into config cache, so that the client which was bootstrapped
25889f85eb3SSergey Avseyev  from the cache will be able to reason about features availability (e.g. views).
25989f85eb3SSergey Avseyev
26089f85eb3SSergey Avseyev* [CCBC-987](https://issues.couchbase.com/browse/CCBC-987): Document tracing
26189f85eb3SSergey Avseyev  options for cbc tools.
26289f85eb3SSergey Avseyev
26389f85eb3SSergey Avseyev* [CCBC-988](https://issues.couchbase.com/browse/CCBC-988): Update
26489f85eb3SSergey Avseyev  cbc-pillowfight to work with by-id collections. It still does not use any
26589f85eb3SSergey Avseyev  changes in protocol yet. The collection API will be exposed in 3.0 release.
26689f85eb3SSergey Avseyev
2672bf296afSSergey Avseyev## 2.9.5 (September 21 2018)
2682bf296afSSergey Avseyev
2692bf296afSSergey Avseyev* [CCBC-980](https://issues.couchbase.com/browse/CCBC-980): Make idle timeout
2702bf296afSSergey Avseyev  for HTTP pool tunable
2712bf296afSSergey Avseyev
2722bf296afSSergey Avseyev* [CCBC-977](https://issues.couchbase.com/browse/CCBC-977): Update
2732bf296afSSergey Avseyev  documentation analytics. Add example demonstrating analytics queries
2742bf296afSSergey Avseyev
2752bf296afSSergey Avseyev* [CCBC-968](https://issues.couchbase.com/browse/CCBC-968): Improve log message
2762bf296afSSergey Avseyev  for `SELECT_BUCKET` on `EACCESS`. Add note saying that this error code might
2772bf296afSSergey Avseyev  be because of missing bucket.
2782bf296afSSergey Avseyev
2792bf296afSSergey Avseyev* [CCBC-976](https://issues.couchbase.com/browse/CCBC-976): Keep HTTP
2802bf296afSSergey Avseyev  connections pooled after `lcb_ping3`
2812bf296afSSergey Avseyev
2822bf296afSSergey Avseyev* [CCBC-975](https://issues.couchbase.com/browse/CCBC-975): Make sure kv
2832bf296afSSergey Avseyev  service is only enabled if in nodes list.
2842bf296afSSergey Avseyev
2852bf296afSSergey Avseyev* [CCBC-972](https://issues.couchbase.com/browse/CCBC-972): Fix memory issues
2862bf296afSSergey Avseyev  reported by valgrind
2872bf296afSSergey Avseyev
2882bf296afSSergey Avseyev* [CCBC-973](https://issues.couchbase.com/browse/CCBC-974): Correctly convert
2892bf296afSSergey Avseyev  non-null terminated tag buffers to `Json::Value`
2902bf296afSSergey Avseyev
29187231c57SSergey Avseyev## 2.9.4 (August 29 2018)
29287231c57SSergey Avseyev
29387231c57SSergey Avseyev* [CCBC-970](https://issues.couchbase.com/browse/CCBC-970): Update list of retriable errors for
29487231c57SSergey Avseyev  analytics
29587231c57SSergey Avseyev
29687231c57SSergey Avseyev* [CCBC-965](https://issues.couchbase.com/browse/CCBC-965): Update log level in config cache
29787231c57SSergey Avseyev  provider
29887231c57SSergey Avseyev
29987231c57SSergey Avseyev* [CCBC-967](https://issues.couchbase.com/browse/CCBC-967): optimize Threshold Tracer queues/sorting
30087231c57SSergey Avseyev
30187231c57SSergey Avseyev* [CCBC-963](https://issues.couchbase.com/browse/CCBC-963): remove global state from random
30287231c57SSergey Avseyev  generator, and make it thread-safe.
30387231c57SSergey Avseyev
30487231c57SSergey Avseyev* [CCBC-966](https://issues.couchbase.com/browse/CCBC-966): return current network for
30587231c57SSergey Avseyev  LCB_CNTL_NETWORK
30687231c57SSergey Avseyev
30787231c57SSergey Avseyev* [CCBC-969](https://issues.couchbase.com/browse/CCBC-969): Allow to skip version from git tags
30887231c57SSergey Avseyev
30987231c57SSergey Avseyev* [CCBC-961](https://issues.couchbase.com/browse/CCBC-961): Add examples for FTS queries
31087231c57SSergey Avseyev
31187231c57SSergey Avseyev* [CCBC-971](https://issues.couchbase.com/browse/CCBC-971): disable dead socket detection for older
31287231c57SSergey Avseyev  libuv (fixes build on platforms, where old libuv-dev package installed).
31387231c57SSergey Avseyev
31487231c57SSergey Avseyev* Report HELO features to logger in the single line.
31587231c57SSergey Avseyev
31687231c57SSergey Avseyev* Allow to select compression mode in connection string. This might be useful for debugging
31787231c57SSergey Avseyev  purposes. For example, to bypass inflation step when receiving data.
31887231c57SSergey Avseyev
31987231c57SSergey Avseyev      $ CONNSTRING=couchbase://localhost/default?compression=deflate_only
32087231c57SSergey Avseyev      $ cbc cat -U $CONNSTRING 00000000.json > bindoc.dat
32187231c57SSergey Avseyev      00000000.json        CAS=0x15431f831dc60000, Flags=0x0, Size=739, Datatype=0x03(JSON,SNAPPY)
32287231c57SSergey Avseyev
3233ec427acSSergey Avseyev## 2.9.3 (July 18 2018)
3243ec427acSSergey Avseyev
3253ec427acSSergey Avseyev* [CCBC-955](https://issues.couchbase.com/browse/CCBC-955): Parse uint32 as
3263ec427acSSergey Avseyev  unsigned ints instead of timeouts. Some settings were interpreted as time
3273ec427acSSergey Avseyev  values, while they should not (e.g. console_log_level, compression_min_size
32816febfdaSMatt Ingenthron  etc). This issue forced the library to misinterpret user input (converter was
3293ec427acSSergey Avseyev  multiplying all values to 1000000, e.g. log level was always TRACE).
3303ec427acSSergey Avseyev
3313ec427acSSergey Avseyev* [CCBC-957](https://issues.couchbase.com/browse/CCBC-957): Automatically
33216febfdaSMatt Ingenthron  disable SSL support, when OpenSSL is unavailable.
3333ec427acSSergey Avseyev
3343ec427acSSergey Avseyev* [CCBC-954](https://issues.couchbase.com/browse/CCBC-954): Define EFTYPE
3353ec427acSSergey Avseyev  error code if it does not exist. Fixes support of libuv 1.21 and higher.
3363ec427acSSergey Avseyev
3373ec427acSSergey Avseyev* [CCBC-951](https://issues.couchbase.com/browse/CCBC-951): Remove
3383ec427acSSergey Avseyev  experimental warning from subdoc API.
3393ec427acSSergey Avseyev
3403ec427acSSergey Avseyev* [CCBC-948](https://issues.couchbase.com/browse/CCBC-948): Consider retry
34116febfdaSMatt Ingenthron  queue with only 0xb5 as empty. This allows a breakout from lcb_wait earlier
34216febfdaSMatt Ingenthron  (when application operates in synchronous style). The old behavior, where
34316febfdaSMatt Ingenthron  lcb_wait does not breakout until the library gets the first successful
3443ec427acSSergey Avseyev  configuration, still can be restored with `lcb_cntl(...,
3453ec427acSSergey Avseyev  LCB_CNTL_WAIT_FOR_CONFIG, ...)`.
3463ec427acSSergey Avseyev
3473ec427acSSergey Avseyev* [CCBC-939](https://issues.couchbase.com/browse/CCBC-939): Optimize
34816febfdaSMatt Ingenthron  the performance of built-in tracer. It now uses sllist for tags container
3493ec427acSSergey Avseyev  instead of Json::Value.
3503ec427acSSergey Avseyev
3513ec427acSSergey Avseyev* [CCBC-958](https://issues.couchbase.com/browse/CCBC-958): Check tracing span
3523ec427acSSergey Avseyev  tags argument more pedantically and return error if arguments are not valid.
3533ec427acSSergey Avseyev
3543ec427acSSergey Avseyev* [CCBC-956](https://issues.couchbase.com/browse/CCBC-956): Combine operation
35516febfdaSMatt Ingenthron  id and name into single field in the threshold tracer.
3563ec427acSSergey Avseyev
3573ec427acSSergey Avseyev* [CCBC-949](https://issues.couchbase.com/browse/CCBC-949): Do not hardcode
3583ec427acSSergey Avseyev  libevent dependencies in DEB packages. Instead let `dh_shlibdeps` script to
35916febfdaSMatt Ingenthron  detect dependencies for each platform. This fixes a usless dependency on libevent-1
3603ec427acSSergey Avseyev  for ubuntu 18.04.
3613ec427acSSergey Avseyev
3623ec427acSSergey Avseyev* [CCBC-947](https://issues.couchbase.com/browse/CCBC-947): Fix build scripts
3633ec427acSSergey Avseyevfor examples (when built with `-DLCB_BUILD_EXAMPLES=ON`).
3643ec427acSSergey Avseyev
3653ec427acSSergey AvseyevAnd other small fixes and improvements.
3663ec427acSSergey Avseyev
3670f7cb6feSSergey Avseyev## 2.9.2 (June 22 2018)
3680f7cb6feSSergey Avseyev
3690f7cb6feSSergey Avseyev* [CCBC-946](https://issues.couchbase.com/browse/CCBC-946): Restore broken ABI in 360ea68ef7738d543bbd3feac3f2c3c6c8ff976b
3700f7cb6feSSergey Avseyev
37113210f0fSSergey Avseyev## 2.9.1 (June 22 2018)
37213210f0fSSergey Avseyev
3730f7cb6feSSergey Avseyev* [CCBC-942](https://issues.couchbase.com/browse/CCBC-942): Expose new error
37413210f0fSSergey Avseyev  codes for subdocument operations.
37513210f0fSSergey Avseyev
3760f7cb6feSSergey Avseyev* [CCBC-866](https://issues.couchbase.com/browse/CCBC-866): Check cached
37713210f0fSSergey Avseyev  provider isn't NULL.
37813210f0fSSergey Avseyev
3790f7cb6feSSergey Avseyev* [CCBC-890](https://issues.couchbase.com/browse/CCBC-890): Always check if SSL
38013210f0fSSergey Avseyev  used when getting ports.
38113210f0fSSergey Avseyev
3820f7cb6feSSergey Avseyev* [CCBC-945](https://issues.couchbase.com/browse/CCBC-945): Allow to specify
38313210f0fSSergey Avseyev  logger in lcb_create().
38413210f0fSSergey Avseyev
3850f7cb6feSSergey Avseyev* [CCBC-935](https://issues.couchbase.com/browse/CCBC-935): Display orphan
38613210f0fSSergey Avseyev  tracer report on WARN log level.
38713210f0fSSergey Avseyev
3880f7cb6feSSergey Avseyev* [CCBC-936](https://issues.couchbase.com/browse/CCBC-936): Update default
38913210f0fSSergey Avseyev  tracing interval to 10 seconds.
39013210f0fSSergey Avseyev
3910f7cb6feSSergey Avseyev* [CCBC-937](https://issues.couchbase.com/browse/CCBC-937): Implement support
39213210f0fSSergey Avseyev  for alternate addresses.
39313210f0fSSergey Avseyev
3940f7cb6feSSergey Avseyev* [CCBC-943](https://issues.couchbase.com/browse/CCBC-943): Implement option to
39513210f0fSSergey Avseyev  dump TCP packets.
39613210f0fSSergey Avseyev
39713210f0fSSergey Avseyev  This change introduces new cmake option, which will force library to report
39813210f0fSSergey Avseyev  all incoming/outgoing TCP packets on TRACE log level. It renders the bytes
39913210f0fSSergey Avseyev  in Base64 encoding.
40013210f0fSSergey Avseyev
40113210f0fSSergey Avseyev  Also there is simple extraction tool, which beautifies packet traces, and
40213210f0fSSergey Avseyev  could be used like this:
40313210f0fSSergey Avseyev
40413210f0fSSergey Avseyev      cbc cat  -vvv foo bar 2>&1 | tools/extract-packets.rb
40513210f0fSSergey Avseyev
406b028b9e4SSergey Avseyev## 2.9.0 (May 24 2018)
407b6e2238fSSergey Avseyev
408b6e2238fSSergey AvseyevThis release is mostly about API visibility bump from uncommited to committed,
409b6e2238fSSergey Avseyevbut also includes several bug fixes.
410b6e2238fSSergey Avseyev
411b6e2238fSSergey Avseyev* [CCBC-930](https://issues.couchbase.com/browse/CCBC-930): Dump threshold
412b6e2238fSSergey Avseyev  logging tracer queues before destroying the tracer.
413b6e2238fSSergey Avseyev
414b6e2238fSSergey Avseyev* Updates in crypto API as per RFC. This basically change of the API (ABI has
415b6e2238fSSergey Avseyev  preserved compatible, but `v0` crypto API will return runtime error with 2.9.0
416b6e2238fSSergey Avseyev  library. From this release, all encryption key management encapsulated into
417b6e2238fSSergey Avseyev  crypto provider, so it does not need to expose key loader interface. In
418b6e2238fSSergey Avseyev  addition, that user API is changed to conform RFC, and use noun `fields`
419b6e2238fSSergey Avseyev  instead of `document` (e.g. `lcbcrypt_encrypt_fields`).
420b6e2238fSSergey Avseyev
421b6e2238fSSergey Avseyev* [CCBC-925](https://issues.couchbase.com/browse/CCBC-925): Fix existence checks
422b6e2238fSSergey Avseyev  for registered crypto providers.
423b6e2238fSSergey Avseyev
424b6e2238fSSergey Avseyev* [CCBC-924](https://issues.couchbase.com/browse/CCBC-924): Initialize flag for
425b6e2238fSSergey Avseyev  JSON server feature. Otherwise it might be left uninitialized and the library
426b6e2238fSSergey Avseyev  will send JSON datatype to servers, which do not support it.
427b6e2238fSSergey Avseyev
428b6e2238fSSergey Avseyev* [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
429b6e2238fSSergey Avseyev
430081e8b16SSergey Avseyev## 2.8.7 (May 2 2018)
431081e8b16SSergey Avseyev
432081e8b16SSergey Avseyev* [CCBC-917](https://issues.couchbase.com/browse/CCBC-917): Add tracing for
433081e8b16SSergey Avseyev  observe. So now the library will group all CAS-observe operations, and in
434081e8b16SSergey Avseyev  general will nest observe operations under common parent when
435081e8b16SSergey Avseyev  `lcb_storedur3` API used.
436081e8b16SSergey Avseyev
437081e8b16SSergey Avseyev* [CCBC-918](https://issues.couchbase.com/browse/CCBC-918): Don't ping KV on
438081e8b16SSergey Avseyev  nodes without DATA service.
439081e8b16SSergey Avseyev
440081e8b16SSergey Avseyev* [CCBC-685](https://issues.couchbase.com/browse/CCBC-685): Implementation of
441081e8b16SSergey Avseyev  SCRAM-SHA{1,256,512} authentication mechanisms for KV service. Support for
442081e8b16SSergey Avseyev  SCRAM-SHA* SASL auth is disabled by default, because it is not portable, and
443081e8b16SSergey Avseyev  not every Couchbase service supports it. But if it is necessary, it could be
444081e8b16SSergey Avseyev  enabled using `lcb_cntl(..., LCB_CNTL_FORCE_SASL_MECH, ...)` operation, or
445081e8b16SSergey Avseyev  `"force_sasl_mech=SCRAM-SHA512"` option in connection string.
446081e8b16SSergey Avseyev
447081e8b16SSergey Avseyev* [CCBC-919](https://issues.couchbase.com/browse/CCBC-919): More granular
448081e8b16SSergey Avseyev  settings for compression. Now it is possible to specify minimum size of the
449081e8b16SSergey Avseyev  value to be considered for compression, and also the minimal ratio
450081e8b16SSergey Avseyev  `(compressed / original)`. See `LCB_CNTL_COMPRESSION_MIN_SIZE` (or
451081e8b16SSergey Avseyev  `"compression_min_size=100"` in bytes), and `LCB_CNTL_COMPRESSION_MIN_RATIO`
452081e8b16SSergey Avseyev  (or `"compression=0.9"`).
453081e8b16SSergey Avseyev
454081e8b16SSergey Avseyev* [CCBC-916](https://issues.couchbase.com/browse/CCBC-916): Do not set JSON
455081e8b16SSergey Avseyev  datatype if server didn't ack it. Fixes behavior where old server rejecting
456081e8b16SSergey Avseyev  commands as invalid when compression is enabled.
457081e8b16SSergey Avseyev
458081e8b16SSergey Avseyev* [CCBC-923](https://issues.couchbase.com/browse/CCBC-923): Allow to disable
459081e8b16SSergey Avseyev  fast-forward map for NMV handler. See `LCB_CNTL_VB_NOREMAP`
460081e8b16SSergey Avseyev  (`"vb_noremap=true"`). This option is disabled by default.
461081e8b16SSergey Avseyev
462081e8b16SSergey AvseyevBuild improvements:
463081e8b16SSergey Avseyev
464081e8b16SSergey Avseyev* [CCBC-915](https://issues.couchbase.com/browse/CCBC-915): Fix builds
465081e8b16SSergey Avseyev  where DEBUG macro is defined
466081e8b16SSergey Avseyev
467081e8b16SSergey Avseyev* [CBD-2405](https://issues.couchbase.com/browse/CBD-2405): Change
468081e8b16SSergey Avseyev  target names in conflict with Server targets
469081e8b16SSergey Avseyev
4709cbf5584SSergey Avseyev## 2.8.6 (April 5 2018)
4719cbf5584SSergey Avseyev
4729cbf5584SSergey Avseyev* [CCBC-888](https://issues.couchbase.com/browse/CCBC-888): Add threshold
473eac059bcSSergey Avseyev  logging tracer, which tracks and reports above threshold and orphaned operations.
4749cbf5584SSergey Avseyev  This is beta functionality, which is disabled by default. To enable it, use
4759cbf5584SSergey Avseyev  `enable_tracing=on` in the connection string.
4769cbf5584SSergey Avseyev
4779cbf5584SSergey Avseyev* [CCBC-910](https://issues.couchbase.com/browse/CCBC-910): Field encryption
4789cbf5584SSergey Avseyev  API. The `lcbcrypto_*` functions abstracts encrypted field layout from actual
4799cbf5584SSergey Avseyev  crypto implementations (OpenSSL, libsodium, etc.). The wrapper or application
4809cbf5584SSergey Avseyev  using libcouchbase is expected to connect their own crypto and key providers, while
4819cbf5584SSergey Avseyev  libcouchbase provides transformation of the encrypted data. See
4829cbf5584SSergey Avseyev  sample crypto provider in [example/crypto](example/crypto).
4839cbf5584SSergey Avseyev
4849cbf5584SSergey Avseyev* [CCBC-904](https://issues.couchbase.com/browse/CCBC-904): Remove trailing
4859cbf5584SSergey Avseyev  comma in `lcb_KVBUFTYPE` enum. Fixes build on some older
4869cbf5584SSergey Avseyev  compilers.
4879cbf5584SSergey Avseyev
4889cbf5584SSergey Avseyev* [CCBC-907](https://issues.couchbase.com/browse/CCBC-907): cbc-n1qlback: Do
4899cbf5584SSergey Avseyev  not require trailing empty line for input.
4909cbf5584SSergey Avseyev
4919cbf5584SSergey Avseyev* [CCBC-908](https://issues.couchbase.com/browse/CCBC-908): cbc-n1qlback:
4929cbf5584SSergey Avseyev  Report number of loaded queries.
4939cbf5584SSergey Avseyev
4949cbf5584SSergey Avseyev* Add ability to write OPS/SEC from cbc-pillowfight to a file
4959cbf5584SSergey Avseyev
4969cbf5584SSergey Avseyev      cbc-pillowfight 2> /tmp/stats.txt
4979cbf5584SSergey Avseyev
4989cbf5584SSergey Avseyev  or, when writing to terminal required
4999cbf5584SSergey Avseyev
5009cbf5584SSergey Avseyev      cbc-pillowfight 2>&1 | tee /tmp/stats.txt
5019cbf5584SSergey Avseyev
5029cbf5584SSergey Avseyev* Build improvements for easier integration into with server manifest (and TLM project).
5039cbf5584SSergey Avseyev
504e9c46be2SSergey Avseyev## 2.8.5 (February 23 2018)
505e9c46be2SSergey Avseyev
506e9c46be2SSergey Avseyev* [CCBC-883](https://issues.couchbase.com/browse/CCBC-883): Always use built-in compression.
507e9c46be2SSergey Avseyev  It is not possible to unbundle the Snappy library, as libcouchbase uses the C++ API which is not
508e9c46be2SSergey Avseyev  exported in the headers. Also, compression can now work on all types of buffers, including
509e9c46be2SSergey Avseyev  `LCB_KV_IOV` and `LCB_KV_IOVCOPY`. This fixes compression in `cbc-pillowfight` tool.
510e9c46be2SSergey Avseyev
511e9c46be2SSergey Avseyev* [CCBC-895](https://issues.couchbase.com/browse/CCBC-895): Fix typo in rendering IPv6 addresses
512e9c46be2SSergey Avseyev  in `lcb_diag`.
513e9c46be2SSergey Avseyev
514e9c46be2SSergey Avseyev* [CCBC-879](https://issues.couchbase.com/browse/CCBC-879): Implement log redaction. When
515e9c46be2SSergey Avseyev  `log_redaction=on` is specified in the connection string, the library will wrap sensitive
516e9c46be2SSergey Avseyev  data in the logs in special tags, which can be processed by the
517e9c46be2SSergey Avseyev  `cblogredaction` tool from the server distribution.
518e9c46be2SSergey Avseyev
519e9c46be2SSergey Avseyev* [CCBC-893](https://issues.couchbase.com/browse/CCBC-894): Updated list of subdoc error codes.
520e9c46be2SSergey Avseyev
521e9c46be2SSergey Avseyev* [CCBC-892](https://issues.couchbase.com/browse/CCBC-892): Enable the SSL trust store to be in
522e9c46be2SSergey Avseyev  a separate file. Trust store has to be specified with option `truststorepath=…`, otherwise
523e9c46be2SSergey Avseyev  the library will expect it to be stored with the certificate in `certpath=`.
524e9c46be2SSergey Avseyev
525e9c46be2SSergey Avseyev* [CCBC-888](https://issues.couchbase.com/browse/CCBC-888): Per operation tracing. When
526e9c46be2SSergey Avseyev  compiled with tracing support (`cmake -DLCB_TRACING=ON`), the library will expose the tracing
527e9c46be2SSergey Avseyev  API, which allows to measure time of every data operation, and include some extra information.
528ae4cadc7SSergey Avseyev  The API is modeled after OpenTracing and allows one to write custom tracers to consume this
529e9c46be2SSergey Avseyev  information. For more information, see an example in
530e9c46be2SSergey Avseyev  [example/tracing/tracing.c](example/tracing/tracing.c).  This is uncommitted API at this time.
531e9c46be2SSergey Avseyev
532e9c46be2SSergey Avseyev  Also this feature includes support for new type of the server responses, which include
533e9c46be2SSergey Avseyev  time spent to execute the KV command on the server. This feature controlled by `enable_tracing`
534e9c46be2SSergey Avseyev  option in connection string or `lcb_cntl(..., LCB_CNTL_ENABLE_TRACING, ...)`.
535e9c46be2SSergey Avseyev
536e9c46be2SSergey Avseyev* Added basic support of JSON datatype. The library will negotiate a mode, in which the
537e9c46be2SSergey Avseyev  application will see `LCB_VALUE_F_JSON` flag on datatype field of the response in the
538e9c46be2SSergey Avseyev  operation callback, if the cluster  detected the content of the document to be valid JSON.
539e9c46be2SSergey Avseyev  Also the application can send this flag on the outgoing documents to notify the server
540e9c46be2SSergey Avseyev  about payload format.
541e9c46be2SSergey Avseyev
542e9c46be2SSergey Avseyev* Refresh dtrace/systemtap integration. Also adds tapset for SystemTap to simplify access to
543e9c46be2SSergey Avseyev  trace points.
544e9c46be2SSergey Avseyev
545e9c46be2SSergey Avseyev* cbc-pillowfight improvements and changes:
546e9c46be2SSergey Avseyev  * dump diagnostics on `SIGQUIT` (CTRL-\ in terminal).
547e9c46be2SSergey Avseyev  * with `-J`/`--json`, the JSON datatype will be sent on the documents.
548e9c46be2SSergey Avseyev  * enable randomized document bodies with `-R`/`--random-body` switch.
549e9c46be2SSergey Avseyev  * durability checks for pillowfight with `--persist-to`/`--replicate-to`.
550e9c46be2SSergey Avseyev  * pessimistic locking of keys before updating with `--lock`.
551e9c46be2SSergey Avseyev  * when requesting timings with `-T`/`--timings`, the application will no longer dump them
552e9c46be2SSergey Avseyev    periodically.Instead it will await for the user to signal `SIGQUIT` and also dump
553e9c46be2SSergey Avseyev    them on exit. The old mode of reporting regularly is enabled by repeating the switch more than
554e9c46be2SSergey Avseyev    once (e.g. `-TT`).
555e9c46be2SSergey Avseyev
556e9c46be2SSergey Avseyev* Added the cbc-watch command to monitor server stats. By default it tracks `cmd_total_ops`,
557e9c46be2SSergey Avseyev  `cmd_total_gets` and `cmd_total_sets` updating stats once a second, and displaying
558e9c46be2SSergey Avseyev  diff with the previous value.
559e9c46be2SSergey Avseyev
560e9c46be2SSergey Avseyev
561c7017965SSergey Avseyev## 2.8.4 (December 20 2017)
562c7017965SSergey Avseyev
563c7017965SSergey Avseyev* [CCBC-880](https://issues.couchbase.com/browse/CCBC-880): Implement x.509 client
564c7017965SSergey Avseyev  certificate authentication. Connection string must use TLS-enabled scheme
565c7017965SSergey Avseyev  (`couchbases://` or `https://`) and set options `certpath` and `keypath`. For example,
566c7017965SSergey Avseyev
567c7017965SSergey Avseyev        couchbases://
568c7017965SSergey Avseyev
569c7017965SSergey Avseyev  Read more at server docs: https://developer.couchbase.com/documentation/server/5.0/security/security-x509certsintro.html
570c7017965SSergey Avseyev
571c7017965SSergey Avseyev* [CCBC-883](https://issues.couchbase.com/browse/CCBC-883): Revisit builtin compression
572c7017965SSergey Avseyev  implementation (snappy). Add compression to cbc tools (see `--compress`, `-y` options).
573c7017965SSergey Avseyev  Future versions of Couchbase Server will have end-to-end compression.
574c7017965SSergey Avseyev
575c7017965SSergey Avseyev* [CCBC-885](https://issues.couchbase.com/browse/CCBC-885): Do not skip HTTP Basic
576c7017965SSergey Avseyev  authentication when password is empty.
577c7017965SSergey Avseyev
578c7017965SSergey Avseyev* [CCBC-876](https://issues.couchbase.com/browse/CCBC-876): Make sure that server
579c7017965SSergey Avseyev  authority is always specified.  In some cases, when libcouchbase generates vbucket
580c7017965SSergey Avseyev  configuration or data service is not available, the authority of the server might be
581c7017965SSergey Avseyev  NULL.  This could cause issues, as we compare servers from configs using their authority
582c7017965SSergey Avseyev  fields.
583c7017965SSergey Avseyev
584c7017965SSergey Avseyev* [CCBC-878](https://issues.couchbase.com/browse/CCBC-878): Support collections in
585c7017965SSergey Avseyev  cbc-pillowfight.
586c7017965SSergey Avseyev
587c7017965SSergey Avseyev  Note that this change does not expose anything related to Collections API for
588c7017965SSergey Avseyev  libcouchbase. It defines hidden switches for pillowfight tool to allow benchmark of
589c7017965SSergey Avseyev  collections. The switches are not documented and might be removed in the future. Use
590c7017965SSergey Avseyev  with care.
591c7017965SSergey Avseyev
592c7017965SSergey Avseyev  Generate only `beer:<seqno>` keys:
593c7017965SSergey Avseyev
594c7017965SSergey Avseyev        cbc pillowfight --separator : --collection beer
595c7017965SSergey Avseyev
596c7017965SSergey Avseyev  Using many --collection will alternate in generating `beer:<seqno>`, `brewery:<seqno>`
597c7017965SSergey Avseyev  keys (default separator is ":"):
598c7017965SSergey Avseyev
599c7017965SSergey Avseyev        cbc pillowfight --collection beer --collection brewery
600c7017965SSergey Avseyev
601c7017965SSergey Avseyev* [CCBC-801](https://issues.couchbase.com/browse/CCBC-801): Expose information about
602c7017965SSergey Avseyev  network IO for monitoring. The diagnostics exposed as string with encoded JSON object.
603c7017965SSergey Avseyev
604c7017965SSergey Avseyev        void diag_callback(lcb_t instance, int cbtype, const lcb_RESPBASE *rb)
605c7017965SSergey Avseyev        {
606c7017965SSergey Avseyev            const lcb_RESPDIAG *resp = (const lcb_RESPDIAG *)rb;
607c7017965SSergey Avseyev            if (resp->rc != LCB_SUCCESS) {
608ae4cadc7SSergey Avseyev                fprintf(stderr, "failed: %s ", lcb_strerror(NULL, resp->rc));
609c7017965SSergey Avseyev            } else {
610c7017965SSergey Avseyev                if (resp->njson) {
611ae4cadc7SSergey Avseyev                    fprintf(stderr, "%.*s", (int)resp->njson, resp->json);
612c7017965SSergey Avseyev                }
613c7017965SSergey Avseyev            }
614c7017965SSergey Avseyev        }
615c7017965SSergey Avseyev
616c7017965SSergey Avseyev        lcb_install_callback3(instance, LCB_CALLBACK_DIAG, diag_callback);
617c7017965SSergey Avseyev        lcb_CMDDIAG cmd = { 0 };
618c7017965SSergey Avseyev        lcb_diag(instance, NULL, &cmd);
619c7017965SSergey Avseyev        lcb_wait(instance);
620c7017965SSergey Avseyev
621c7017965SSergey Avseyev* [CCBC-874](https://issues.couchbase.com/browse/CCBC-874): Dynamic authenticator. Note
622c7017965SSergey Avseyev  that this feature should not be considered at public interface. To use it, application
623c7017965SSergey Avseyev  have to define two callbacks, which will return username and password dependending on
624c7017965SSergey Avseyev  bucket name and hostname/port of the endpoint.
625c7017965SSergey Avseyev
626c7017965SSergey Avseyev        std::map< std::string, std::string > credentials = {
627c7017965SSergey Avseyev            {"protected", "secret"}
628c7017965SSergey Avseyev        };
629c7017965SSergey Avseyev        extern "C" {
630c7017965SSergey Avseyev          static const char *get_username(void *cookie,
631c7017965SSergey Avseyev                                          const char *host,
632c7017965SSergey Avseyev                                          const char *port,
633c7017965SSergey Avseyev                                          const char *bucket)
634c7017965SSergey Avseyev          {
635c7017965SSergey Avseyev              return bucket;
636c7017965SSergey Avseyev          }
637c7017965SSergey Avseyev
638c7017965SSergey Avseyev          static const char *get_password(void *cookie,
639c7017965SSergey Avseyev                                          const char *host,
640c7017965SSergey Avseyev                                          const char *port,
641c7017965SSergey Avseyev                                          const char *bucket)
642c7017965SSergey Avseyev          {
643c7017965SSergey Avseyev              std::map< std::string, std::string > *credentials =
644c7017965SSergey Avseyev                  static_cast<std::map< std::string, std::string > *>(cookie);
645c7017965SSergey Avseyev              return (*credentials)[bucket].c_str();
646c7017965SSergey Avseyev          }
647c7017965SSergey Avseyev        }
648c7017965SSergey Avseyev
649c7017965SSergey Avseyev
650c7017965SSergey Avseyev   and later pass these callbacks to authenticator like this:
651c7017965SSergey Avseyev
652c7017965SSergey Avseyev
653c7017965SSergey Avseyev        lcb_AUTHENTICATOR *auth = lcbauth_new();
654c7017965SSergey Avseyev        lcbauth_set_callbacks(auth, &credentials, get_username, get_password);
655c7017965SSergey Avseyev        lcbauth_set_mode(auth, LCBAUTH_MODE_DYNAMIC);
656c7017965SSergey Avseyev        lcb_set_auth(instance, auth);
657c7017965SSergey Avseyev
658c7017965SSergey Avseyev* Include platform/compiler into client id, which included into HELLO and HTTP requests.
659c7017965SSergey Avseyev
660c7017965SSergey Avseyev* Fix parallel build on Linux when dtrace enabled
661c7017965SSergey Avseyev
662c7017965SSergey Avseyev* cbc-proxy: proxy N1QL, FTS and Analytics queries using STAT command.
663c7017965SSergey Avseyev
664a3500cb9SSergey Avseyev## 2.8.3 (November 21 2017)
665a3500cb9SSergey Avseyev
666a3500cb9SSergey Avseyev* [CCBC-415](https://issues.couchbase.com/browse/CCBC-415): Fixes in IPv6 support.
667a3500cb9SSergey Avseyev  To use IPv6 addresses, the application should connect to IPv6-enabled Couchbase Server,
668a3500cb9SSergey Avseyev  and explicitly switch on option via connection string `ipv6=allow` or `ipv6=only`,
669a3500cb9SSergey Avseyev  where first variant permits the library to use both IPv6 and IPv4, and the second --
6705cf7d350SSergey Avseyev  disables IPv4. Alternatively this setting controlled with `LCB_CNTL_IP6POLICY` and
671a3500cb9SSergey Avseyev  `lcb_cntl`.
672a3500cb9SSergey Avseyev
673a3500cb9SSergey Avseyev* [CCBC-872](https://issues.couchbase.com/browse/CCBC-872): Metrics management
674a3500cb9SSergey Avseyev  These metrics are intended at providing information on libcouchbase operations performed
675a3500cb9SSergey Avseyev  over the lifetime of the current `lcb_t` instance (processed request packets, processed
676a3500cb9SSergey Avseyev  response packets, request packets pending emission, server errors, server timeouts,
677a3500cb9SSergey Avseyev  misrouted operations, retried operations).
678a3500cb9SSergey Avseyev
679a3500cb9SSergey Avseyev  Metrics collection is currently disabled by default. To enable metrics collection,
680a3500cb9SSergey Avseyev  the user should call:
681a3500cb9SSergey Avseyev
682a3500cb9SSergey Avseyev        int activate = 1;
683a3500cb9SSergey Avseyev        lcb_cntl(instance, LCB_CNTL_SET, LCB_CNTL_METRICS, &activate);
684a3500cb9SSergey Avseyev
685a3500cb9SSergey Avseyev  Access to the collected metrics is done using:
686a3500cb9SSergey Avseyev
687a3500cb9SSergey Avseyev        lcb_METRICS* my_metrics;
688a3500cb9SSergey Avseyev        lcb_cntl(instance, LCB_CNTL_GET, LCB_CNTL_METRICS, &my_metrics);
689a3500cb9SSergey Avseyev
6908ce52f92SSergey Avseyev* [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.
691a3500cb9SSergey Avseyev
692a3500cb9SSergey Avseyev* [CCBC-547](https://issues.couchbase.com/browse/CCBC-547): Detect dead sockets under libuv.
693a3500cb9SSergey Avseyev
694a3500cb9SSergey Avseyev* Ensure macros safe by surrounding values with parentheses
695a3500cb9SSergey Avseyev
6965b8d57a3SSergey Avseyev## 2.8.2 (October 17 2017)
6975b8d57a3SSergey Avseyev
6985b8d57a3SSergey Avseyev* [CCBC-833](https://issues.couchbase.com/browse/CCBC-833), [CCBC-834](https://issues.couchbase.com/browse/CCBC-834):
6995b8d57a3SSergey Avseyev  Update real cluster integration in the test suite.
7005b8d57a3SSergey Avseyev
7015b8d57a3SSergey Avseyev* [CCBC-860](https://issues.couchbase.com/browse/CCBC-860): cbc-connstr: Do not zero out C++ instances.
7025b8d57a3SSergey Avseyev
7035b8d57a3SSergey Avseyev* [CCBC-859](https://issues.couchbase.com/browse/CCBC-859): Fix libm shared object detection on Debian 9.
7045b8d57a3SSergey Avseyev
7055b8d57a3SSergey Avseyev* Bugs reported by [clang analyzer](http://clang-analyzer.llvm.org/):
7065b8d57a3SSergey Avseyev
7075b8d57a3SSergey Avseyev  * [CCBC-858](https://issues.couchbase.com/browse/CCBC-858): Fix memory leak for compressed packet.
7085b8d57a3SSergey Avseyev  * [CCBC-857](https://issues.couchbase.com/browse/CCBC-857): Fix possible NULL pointer dereference in `mcreq_reserve_key`.
7095b8d57a3SSergey Avseyev  * [CCBC-856](https://issues.couchbase.com/browse/CCBC-856): Initialize response struct in `H_config`.
7105b8d57a3SSergey Avseyev  * [CCBC-855](https://issues.couchbase.com/browse/CCBC-855): Fix dead assignments in `contrib/genhash`.
7115b8d57a3SSergey Avseyev  * [CCBC-854](https://issues.couchbase.com/browse/CCBC-854): Init vbguess array before entry lookup.
7125b8d57a3SSergey Avseyev  * [CCBC-853](https://issues.couchbase.com/browse/CCBC-853): cbc-proxy: do not use client object after free.
7135b8d57a3SSergey Avseyev  * [CCBC-852](https://issues.couchbase.com/browse/CCBC-852): Do not free memory twice in N1QL index manager.
7145b8d57a3SSergey Avseyev
7155a66d860SSergey Avseyev## 2.8.1 (September 20 2017)
7165a66d860SSergey Avseyev
7175a66d860SSergey Avseyev* Check nodes number for durability checks. The store with durability
7185a66d860SSergey Avseyev  requirements will report more specific error when the library cannot
7195a66d860SSergey Avseyev  fulfill the condition during failover.
7205a66d860SSergey Avseyev  * Issues: [CCBC-817](https://issues.couchbase.com/browse/CCBC-817)
7215a66d860SSergey Avseyev
7225a66d860SSergey Avseyev* Handle enhanced error messages for subdoc operations. The subdoc
7235a66d860SSergey Avseyev  responses will now expose context and reference ID if present.
7245a66d860SSergey Avseyev  * Issues: [CCBC-846](https://issues.couchbase.com/browse/CCBC-846)
7255a66d860SSergey Avseyev
7265a66d860SSergey Avseyev* Discover and bootstrap analytics service from cluster configuration.
7275a66d860SSergey Avseyev  * Issues: [CCBC-840](https://issues.couchbase.com/browse/CCBC-840)
7285a66d860SSergey Avseyev
7295a66d860SSergey Avseyev* Improve documentation of configuration parameters.
7305a66d860SSergey Avseyev  * Issues: [CCBC-835](https://issues.couchbase.com/browse/CCBC-835)
7315a66d860SSergey Avseyev
7325a66d860SSergey Avseyev* Enable Error Map feature by default.
7335a66d860SSergey Avseyev  * Issues: [CCBC-838](https://issues.couchbase.com/browse/CCBC-838)
7345a66d860SSergey Avseyev
7355a66d860SSergey Avseyev* Cleanup and extend `minimal`, `libeventdirect`, `instancepool` examples
7365a66d860SSergey Avseyev
7375a66d860SSergey Avseyev* Tools:
7385a66d860SSergey Avseyev  * improve error reporting
7395a66d860SSergey Avseyev  * experimental subcommand `cbc-proxy`
7405a66d860SSergey Avseyev  * fix memory leaks
7415a66d860SSergey Avseyev  * retry store operations during population phase in `cbc-pillowfight`
7425a66d860SSergey Avseyev
7432f655ce4SSergey Avseyev## 2.8.0 (August 31 2017)
7442f655ce4SSergey Avseyev
7452f655ce4SSergey Avseyev* Add support for OpenSSL-1.1.
74692fc5e12SSergey Avseyev  * Issues: [CCBC-814](https://issues.couchbase.com/browse/CCBC-814)
7472f655ce4SSergey Avseyev
7482f655ce4SSergey Avseyev* Mask `LOCKED` status code for backward compatibility. This code
7492f655ce4SSergey Avseyev  (as well as others possible codes with 'item-locked' attribute)
7502f655ce4SSergey Avseyev  replaced with `LCB_KEY_EEXISTS` for `SET`, `REPLACE` and `DELETE`
7512f655ce4SSergey Avseyev  operations, and with `LCB_ETMPFAIL` for the rest.
7522f655ce4SSergey Avseyev  * Issues: [CCBC-832](https://issues.couchbase.com/browse/CCBC-832)
7532f655ce4SSergey Avseyev
7542f655ce4SSergey Avseyev* Stop enumerating bootstrap nodes and mechanisms when the server
7552f655ce4SSergey Avseyev  returns authentication error.
7562f655ce4SSergey Avseyev  * Issues: [CCBC-825](https://issues.couchbase.com/browse/CCBC-825)
7572f655ce4SSergey Avseyev
7582f655ce4SSergey Avseyev* Fixed double free error with `lcb_ping3`.
7592f655ce4SSergey Avseyev  * Issues: [CCBC-826](https://issues.couchbase.com/browse/CCBC-826)
7602f655ce4SSergey Avseyev
7612f655ce4SSergey Avseyev* Exposed additional N1QL query parameters: `lcb_n1p_readonly`,
7622f655ce4SSergey Avseyev  `lcb_n1p_scancap`, `lcb_n1p_pipelinecap`.
7632f655ce4SSergey Avseyev  * Issues: [CCBC-823](https://issues.couchbase.com/browse/CCBC-823)
7642f655ce4SSergey Avseyev
7652f655ce4SSergey Avseyev* Fixed `cbc-subdoc/upsert` without XATTR.
7662f655ce4SSergey Avseyev  * Issues: [CCBC-823](https://issues.couchbase.com/browse/CCBC-823)
7672f655ce4SSergey Avseyev
7682f655ce4SSergey Avseyev* XERROR attributes synchronized with recent list on server.
7692f655ce4SSergey Avseyev  * Issues: [CCBC-828](https://issues.couchbase.com/browse/CCBC-828)
7702f655ce4SSergey Avseyev
7712f655ce4SSergey Avseyev* Add missing documentation, and update stability of the API.
7722f655ce4SSergey Avseyev  * Issues:
7732f655ce4SSergey Avseyev  [CCBC-830](https://issues.couchbase.com/browse/CCBC-830),
7742f655ce4SSergey Avseyev  [CCBC-831](https://issues.couchbase.com/browse/CCBC-831),
7752f655ce4SSergey Avseyev  [CCBC-827](https://issues.couchbase.com/browse/CCBC-827)
7762f655ce4SSergey Avseyev
7772f655ce4SSergey Avseyev* Do not throttle background configuration polling by throttle interval
7782f655ce4SSergey Avseyev  of configuration error handler.
7792f655ce4SSergey Avseyev  * Issues: [CCBC-829](https://issues.couchbase.com/browse/CCBC-829)
7802f655ce4SSergey Avseyev
7812f655ce4SSergey Avseyev* Turn on background polling by default. The library will try
7822f655ce4SSergey Avseyev  to schedule configuration update every 2.5 seconds. To disable it
7832f655ce4SSergey Avseyev  use `config_poll_interval=0`.
7842f655ce4SSergey Avseyev  * Issues: [CCBC-836](https://issues.couchbase.com/browse/CCBC-836)
7852f655ce4SSergey Avseyev
78678a1ae61SSergey Avseyev## 2.7.7 (August 17 2017)
787269fae2eSSergey Avseyev
788269fae2eSSergey Avseyev* Implement new function `lcb_ping3`, which sends NOOP-like message to
789269fae2eSSergey Avseyev  each service in the cluster and allows to measure latency along with
790269fae2eSSergey Avseyev  health status of the connection. Might be useful for application-side
791269fae2eSSergey Avseyev  keep-alive mechanisms.
792269fae2eSSergey Avseyev  * Issues: [CCBC-801](https://issues.couchbase.com/browse/CCBC-801)
793269fae2eSSergey Avseyev
794269fae2eSSergey Avseyev* Detect and expose bucket type through `LCB_CNTL_BUCKETTYPE`:
795269fae2eSSergey Avseyev
796269fae2eSSergey Avseyev        lcb_BTYPE type;
797269fae2eSSergey Avseyev        lcb_cntl(instance, LCB_CNTL_GET, LCB_CNTL_BUCKETTYPE, &type);
798269fae2eSSergey Avseyev
799269fae2eSSergey Avseyev  * Issues: [CCBC-790](https://issues.couchbase.com/browse/CCBC-790)
800269fae2eSSergey Avseyev
801269fae2eSSergey Avseyev* Fixed setting expiration in subdoc mutations.
802269fae2eSSergey Avseyev  * Issues: [CCBC-799](https://issues.couchbase.com/browse/CCBC-816)
803269fae2eSSergey Avseyev
804269fae2eSSergey Avseyev* Fixed DNS SRV support of Fedora 26 and FreeBSD.
805269fae2eSSergey Avseyev  * Issues: [CCBC-816](https://issues.couchbase.com/browse/CCBC-816)
806269fae2eSSergey Avseyev
807269fae2eSSergey Avseyev* Fixed DNS SRV with SSL connections.
808269fae2eSSergey Avseyev  * Issues: [CCBC-794](https://issues.couchbase.com/browse/CCBC-794)
809269fae2eSSergey Avseyev
810269fae2eSSergey Avseyev* Define EREMOTEIO in libuv
811269fae2eSSergey Avseyev  * Issues: [CCBC-812](https://issues.couchbase.com/browse/CCBC-812)
812269fae2eSSergey Avseyev
813269fae2eSSergey Avseyev* New subdocument command to remove whole document
814269fae2eSSergey Avseyev  * Issues: [CCBC-811](https://issues.couchbase.com/browse/CCBC-811)
815269fae2eSSergey Avseyev
816269fae2eSSergey Avseyev* New cbc command: `cbc-subdoc`. It provides interactive shell, where
817269fae2eSSergey Avseyev  all subdocument commands accessible to inspect and modify documents
818269fae2eSSergey Avseyev  in the cluster.
819269fae2eSSergey Avseyev
820269fae2eSSergey Avseyev* New cbc command: `cbc-ping`. It sends NOOP-like messages to all accessible
821269fae2eSSergey Avseyev  services in the cluster, and displays the status along with latency.
822269fae2eSSergey Avseyev  * Issues: [CCBC-801](https://issues.couchbase.com/browse/CCBC-801)
823269fae2eSSergey Avseyev
824269fae2eSSergey Avseyev* Fix `cbc-cat --replica`, which now allows reading documents from replicas.
825269fae2eSSergey Avseyev  * Issues: [CCBC-820](https://issues.couchbase.com/browse/CCBC-820)
826269fae2eSSergey Avseyev
827269fae2eSSergey Avseyev* Implement NOOP command and `cbc-pillowfight --noop`, which sends NOOP
828269fae2eSSergey Avseyev  instead of data manipulation commands.
829269fae2eSSergey Avseyev  * Issues: [CCBC-801](https://issues.couchbase.com/browse/CCBC-801)
830269fae2eSSergey Avseyev
831269fae2eSSergey Avseyev* Clarify errors found in `.cbcrc`. Now it will display configuration path
832269fae2eSSergey Avseyev  along with error message.
833269fae2eSSergey Avseyev  * Issues: [CCBC-759](https://issues.couchbase.com/browse/CCBC-759]
834269fae2eSSergey Avseyev
835269fae2eSSergey Avseyev* Update examples:
836269fae2eSSergey Avseyev  * Support username/password in subdoc and libeventdirect examples
837269fae2eSSergey Avseyev  * Added example for subdoc XATTRs
838269fae2eSSergey Avseyev
839269fae2eSSergey Avseyev* Integrate fix for parallel build with dtrace on FreeBSD
840269fae2eSSergey Avseyev  https://github.com/freebsd/freebsd-ports/commit/a71e1a86b851d42cd08319d9b28a4424e508e216
841269fae2eSSergey Avseyev
842269fae2eSSergey Avseyev* Make enhanced errors API public
843269fae2eSSergey Avseyev  * Issues: [CCBC-803](https://issues.couchbase.com/browse/CCBC-803)
844269fae2eSSergey Avseyev
845269fae2eSSergey Avseyev* Fixed various compiler and cppcheck warnings and documentation update.
846269fae2eSSergey Avseyev