1.1. 3.2.x Branch

    • #3963: Optimize compaction and doc updates for conflicted documents on Erlang versions higher than 21.

    • : Add support for SpiderMonkey 91esr.

    1.1.2.1. Features and Enhancements

    • : collation driver has been removed. ICU collation functionality is consolidated in the single couch_ejson_compare module. View performance might slightly increase as there are less corner cases when the C collation driver fails and falls back to Erlang.

    • #3787: Update sequences generated from DB info and _changes?since=now&limit=0 now contain shard uuids as part of their internal, opaque, representation. As a result, there should be less chance of experiencing changes feed rewinds with these sequences.

    • : ICU driver and collator algorithm versions are returned in the _node/$node/_versions result.

    • #3801: Users with the _metrics role can now read _prometheus metrics.

    • : Avoid changes feed rewinds after shard moves.

    • #3779, : Prevent deleted view file cleanup from crashing when database is deleted while the cleanup process is running.

    • #3789: Fix badarith 500 errors when [fabric] request_timeout is set to infinity.

    • : Fix off-by-one limit error for _all_dbs. Also, the auto-injected shard _dbs design doc is removed and replaced with an Erlang module.

    • #3788: Minimize changes feeds rewinds when a node is down.

    • : Enable custodian application reporting. Previously, custodian was accidentally left disabled as it used a hard-coded shards db name different than _dbs.

    • #3805: Cluster setup correctly syncs admin passwords and uses the new (since 3.2.0) [chttpd_auth] config section instead of the previous [couch_httpd_auth] section.

    • : Local development dev/run script now uses the [chttpd_auth] section in local.ini instead of [couch_httpd_auth].

    • #3773: Fix reduce view collation results for unicode equivalent keys.

    1.1.3.1. Features and Enhancements

    • #3364: CouchDB’s replicator now implements a Fair Share replication scheduler. Rather than using a round-robin scheduling mechanism, this update allows specifying the relative priority of jobs via different _replicator databases. More information is available in the .

    • #3166: Allow custom JWT claims for roles, via the [jwt_auth] roles_claim_name config setting.

    • , #3312: CouchDB now includes weatherreport and its dependency custodian, a diagnostic app forked from Basho’s riaknostic tool. More documentation is available in the section.

    • #2911, , #3425: CouchDB now returns the version of SpiderMonkey to administrators in the GET /_node/{node-name}/_versions response.

    • : _session now accepts gzip encoding.

    • #3254: The new $keyMapMatch operator allows Mango to query on the keys of a map. It is similar to the $elemMatch operator, but instead of operating on the elements of array, it operates on the keys of a map.

    • : Developers now have access to a .devcontainer configuration for the 3.x version of CouchDB, right in the source code repository.

    • #3347: The default maximum attachment size has been reduced from infinity to 1 GiB.

    • : Compaction process suspension now appears in the active_tasks output, allowing administrators to verify that the strict_window value is being respected.

    • #3378: The [admins] section and the [replicator] password are now redacted from all logs. In addition, removes user credentials, user documents and design documents from logfiles as much as possible. Further, #3489 no longer logs all of the messages received by a terminated internal Erlang process.

    • , #3500: CouchDB now supports SpiderMonkey 78 and 86.

    • : CouchDB now also supports Erlang/OTP 24.

    • #3571: CouchDB no longer supports Erlang/OTP 19.

    • : Contribute a custom Erlang network protocol to CouchDB, users can specify nodes to use TCP or TLS.

    The SSL/TLS handshake enables the TLS client and server to establish the secret keys with which they communicate.

    • #3472, , #3609: Migrate some config options from [httpd] to [chttpd], migrate some from [couch_httpd_auth] to [chttpd_auth], and comment all out in the default.ini.

      • Config options moved from [httpd] to [chttpd]: allow_jsonp, , config_whitelist, enable_cors, secure_rewrites, x_forwarded_host, x_forwarded_proto, x_forwarded_ssl, enable_xframe_options, max_http_request_size.

      • Config options moved from [couch_httpd_auth] to [chttpd_auth]: authentication_redirect, require_valid_user, timeout, auth_cache_size, allow_persistent_cookies, iterations, min_iterations, max_iterations, password_scheme, proxy_use_secret, public_fields, secret, users_db_public, x_auth_roles, x_auth_token, x_auth_username, cookie_domain, same_site

    • : We added a new way of specifying basic auth credentials which can include various characters previously not allowed to be included in the url info part of endpoint urls.

    • #3483: We added a way of specifying requirements for new user passwords using a list of regular expressions.

    • , #3416, : CouchDB now provides a Prometheus compatible endpoint at GET /_node/{node-name}/_prometheus. A configuration option allows for scraping via a different port (17986) that does not require authentication, if desired. More information is available at the Prometheus API endpoint summary.

    • , COUCHDB-883 (JIRA): As an opt-in policy, CouchDB can now stop encoding the plus sign + in non-query parts of URLs, in compliance with the original CouchDB standards. The opt-in is via the [chttpd] decode_plus_to_space = true setting. In CouchDB 4.x, this is going to be an opt-out policy.

    • : CouchDB now has new CSP settings for attachments and show/list functions. This deprecates the old [csp] enable and [csp] header_value settings, replacing them with the new [csp] utils_enable and [csp] utils_header_value settings respectively. In addition, new settings for attachments_enable, attachments_header_value, showlist_enable and showlist_header_value now are available. Documentation is in the default.ini file.

    • #3734, : Users with databases that have low q and n values would often receive the No DB shards could be opened error when the cluster is overloaded, due to a hard-coded 100ms timeout. CouchDB now calculates a more reasonable timeout, based on the number of shards and the overall maximum fabric request timeout limit, using a geometric series.

    • #3337: Developer nodes now start faster when using the dev/run script.

    • : The monolithic couch_server process has been sharded for performance. Previously, as a single gen_server, the process would have a finite throughput that, in busy clusters, is easily breached – causing a sizeable backlog in the message queue, ultimately leading to failure and errors. No more! The aggregate message queue info is still available in the _system output. ( #3370 )

    • : CouchDB now uses the latest ibrowse 4.4.2 client for the replicator.

    • #3600, , #3019: The default channel for smoosh auto-compaction has been increased to a more reasonable value, reducing load on systems that would have normally been idle in CouchDB 2.x (where no auto-compaction daemon exists).

    • : Changes feeds may no longer rewind after shard moves, assuming the node and range specified by the changes feed nonce can still match an existing node’s shard.

    1.1.3.3. Bugfixes

    • Complete retirement of the JavaScript test suite - replaced by Elixir. Hooray!

    • : Allow configurability of JWT claims that require a value. Also fixes #3232. Further, no longer validates claims provided that CouchDB does not require.

    • #3160, : The run_queue statistic now returns valid information even when using Erlang BEAM dirty CPU and IO queues.

    • #3162: Makefiles updated to include local configs & clean configs when running make devclean.

    • : The max_document_size parameter now has a clearer explanation in default.ini.

    • #3207, : Improve the INSTALL.Unix.md file.

    • #3212: Base and extra headers are properly combined when making replicator requests that contain duplicate headers.

    • : Attachment operations PUT /db/doc and POST /db now perform consistent attachment name validation.

    • #3249: Documents with lots of conflicts no longer blow up couchjs if the user calls _changes with a JS filter and with style=all_docs.

    • : Respawning compaction jobs to catch up with intervening changes are now handled correctly by the smoosh monitor.

    • #3255, : View files that have incorrect db_headers now reset the index forcing a rebuild.

    • #3271: Attachments that are stored uncompressed but later replicated to nodes that compress the attachment no longer fail an internal md5 check that would break eventual consistency between nodes.

    • : req_body requests that have req_body set already now properly return the field without parsing.

    • #3279: Some default headers were missing from some responses in replication, including X-CouchDB-Body-Time and X-Couch-Request-ID.

    • , #2962: CouchDB no longer returns broken couchjs processes to the internal viewserver process pool.

    • , #1943: PUTs of multipart/related attachments now support a Transfer-Encoding value of chunked. Hooray!

    • , #3359: The cluster setup wizard no longer fails when a request to / is not made before a request to finish_cluster.

    • : Changing the max_dbs_open configuration setting correctly ensures that each new couch_server_X property receives 1/num_servers() of it.

    • #3373: Requests to {db}/_changes with a custom filter no longer result in a fabric request timeout if the request body is not available to additional cluster nodes, resulting in a more descriptive exit message and proper JSON object validation in the payload.

    • : The internal chttpd_external:json_req_obj/2 function now reads the cached peer before falling back to a socket read operation.

    • #3335, , #3708: The COUCHDB_FAUXTON_DOCROOT environment variable is now introduced to allow its explicit overriding at startup.

    • : http clients should no longer receive stacktraces unexpectedly.

    • #3491: libicu tests no longer fail on older OS releases such as CentOS 6 and 7.

    • : Usernames and passwords can now contain @ and not break the CouchDB replicator.

    • #3545: The dreyfus_index_manager process now supports offheap message queues.

    • : The replication worker pool now properly cleans up worker processes as they are done via the worker_trap_exits = false setting.

    • #3633, : All code paths for creating databases now fully respect db creation options, including partitioning options.

    • #3424, : When using latest=true and an old revision with conflicting children as rev is specified, CouchDB no longer returns an "error": "case_clause" response.

    • #3673: Non-existent attachments now return a 404 when the attachment is missing.

    • : The dev/run development script now allows clusters where n > 5.

    • #3700: The maybe_close message is now sent to the correct internal process.

    • : The smoosh operator guide now recommends to use the rpc:multicall function.

    • #3712: Including a payload within a DELETE operation no longer hangs the next request made to the same mochiweb acceptor.

    • : For clusters with databases where n > [cluster] n, attachments chunks are longer dropped on quorum writes.

    • #3507: If a file is truncated underneath CouchDB, CouchDB will now log the filename if it finds this situation with a file_truncate_error.

    • : Shards with large purge sequences no longer fail to split in a shard splitting job.

    • #3754: Always return views meta info when limit=0 and sorted=true.

    • : Properly sort view results with a keys list.

    • Donuts for everyone! Er, not really - thank you for reading the 3.2 release notes.