1.1. 3.2.x Branch¶
1.1.2. Version 3.2.1¶
1.1.2.1. Features and Enhancements¶
- #3746:
couch_icu_drivercollation driver has been removed. ICU collation functionality is consolidated in the singlecouch_ejson_comparemodule. View performance might slighty 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=0now 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. - #3798: ICU driver and collator algorithm versions are
returned in the
_node/$node/_versionsresult. - #3801: Users with the
_metricsrole can now read_prometheusmetrics.
1.1.2.2. Bugfixes¶
- #3780: Avoid changes feed rewinds after shard moves.
- #3779, #3785: Prevent deleted view file cleanup from crashing when database is deleted while the cleanup process is running.
- #3789: Fix
badarith500 errors when[fabric] request_timeoutis set toinfinity. - #3786: Fix off-by-one
limiterror for_all_dbs. Also, the auto-injected shard_dbsdesign doc is removed and replaced with an Erlang module. - #3788: Minimize changes feeds rewinds when a node is down.
- #3807: Enable
custodianapplication reporting. Previously,custodianwas 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. - #3810: Local development
dev/runscript now uses the[chttpd_auth]section inlocal.iniinstead of[couch_httpd_auth]. - #3773: Fix reduce view collation results for unicode equivalent keys.
1.1.3. Version 3.2.0¶
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
_replicatordatabases. More information is available in the _replicator DB docs.
- #3166: Allow custom JWT claims for roles, via the
[jwt_auth] roles_claim_nameconfig setting. - #3296, #3312: CouchDB now includes
weatherreportand its dependencycustodian, a diagnostic app forked from Basho’sriaknostictool. More documentation is available in the Cluster Troubleshooting section. - #2911, #3298, #3425: CouchDB now returns the version of
SpiderMonkey to administrators in the
GET /_node/{node-name}/_versionsresponse. - #3303: CouchDB now treats a
408response received by the replicator similar to any5xxerror (by retrying, as opposed to a permanent error). CouchDB will never return a408, but some reverse proxies in front of CouchDB may return this code. - #3322:
_sessionnow accepts gzip encoding. - #3254: The new
$keyMapMatchoperator allows Mango to query on the keys of a map. It is similar to the$elemMatchoperator, but instead of operating on the elements of array, it operates on the keys of a map. - #3336: Developers now have access to a
.devcontainerconfiguration for the 3.x version of CouchDB, right in the source code repository. - #3347: The default maximum attachment size has been reduced from
infinityto 1 GiB. - #3361: Compaction process suspension now appears in the
active_tasksoutput, allowing administrators to verify that thestrict_windowvalue is being respected. - #3378: The
[admins]section and the[replicator] passwordare now redacted from all logs. In addition, #3380 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. - #3421, #3500: CouchDB now supports SpiderMonkey 78 and 86.
- #3422: CouchDB now supports Erlang/OTP 23 and
error_loggerreports for Erlang/OTP >= 21. - #3566: CouchDB now also supports Erlang/OTP 24.
- #3571: CouchDB no longer supports Erlang/OTP 19.
- #3643: Contribute a custom Erlang network protocol to CouchDB, users can specify nodes to use TCP or TLS.
- #3472, #3473, #3609: Migrate some config options from
[httpd]to[chttpd], migrate some from[couch_httpd_auth]to[chttpd_auth], and comment all out in thedefault.ini.- Config options moved from
[httpd]to[chttpd]:allow_jsonp,changes_timeout,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
- Config options moved from
- #3586: 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.
- #3506, #3416, #3377: 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. - #3697, 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 = truesetting. In CouchDB 4.x, this is going to be an opt-out policy. - #3724: CouchDB now has new CSP settings for attachments and show/list
functions. This deprecates the old
[csp] enableand[csp] header_valuesettings, replacing them with the new[csp] utils_enableand[csp] utils_header_valuesettings respectively. In addition, new settings forattachments_enable,attachments_header_value,showlist_enableandshowlist_header_valuenow are available. Documentation is in thedefault.inifile. - #3734, #3733: Users with databases that have low
qandnvalues would often receive theNo DB shards could be openederror 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.
1.1.3.2. Performance¶
- #3337: Developer nodes now start faster when using the
dev/runscript. - #3366: The monolithic
couch_serverprocess has been sharded for performance. Previously, as a singlegen_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_systemoutput. ( #3370 ) - #3208: CouchDB now uses the latest ibrowse 4.4.2 client for the replicator.
- #3600, #3047, #3019: The default
slackchannel 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). - #3711: 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!
- #3165: Allow configurability of JWT claims that require a value. Also fixes #3232. Further, #3392 no longer validates claims provided that CouchDB does not require.
- #3160, #3161: The
run_queuestatistic 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. - #3195: The
max_document_sizeparameter now has a clearer explanation indefault.ini. - #3207, #2536: Improve the
INSTALL.Unix.mdfile. - #3212: Base and extra headers are properly combined when making replicator requests that contain duplicate headers.
- #3201: When using a POST with request body to pass parameters to a view-like
request, the boolean parameters are accepting only JSON strings, but not booleans.
Now, CouchDB accepts
trueandfalsefor thestableparameter, in addition to"true"and"false". comment in - #1988: Attachment operations
PUT /db/docandPOST /dbnow perform consistent attachment name validation. - #3249: Documents with lots of conflicts no longer blow up couchjs if the
user calls
_changeswith a JS filter and withstyle=all_docs. - #3144: Respawning compaction jobs to catch up with intervening changes are now handled correctly by the smoosh monitor.
- #3252: CouchDB now exports the
couch_util:json_decode/2function to support maps instead of the default data structure. - #3255, #2558: View files that have incorrect
db_headersnow 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.
- #3277:
req_bodyrequests that havereq_bodyset already now properly return the field without parsing. - #3279: Some default headers were missing from some responses in replication,
including
X-CouchDB-Body-TimeandX-Couch-Request-ID. - #3329, #2962: CouchDB no longer returns broken couchjs processes to the internal viewserver process pool.
- #3340, #1943:
PUTsofmultipart/relatedattachments now support aTransfer-Encodingvalue ofchunked. Hooray! - #2858, #3359: The cluster setup wizard no longer fails when a
request to
/is not made before a request tofinish_cluster. - #3368: Changing the
max_dbs_openconfiguration setting correctly ensures that each newcouch_server_Xproperty receives1/num_servers()of it. - #3373: Requests to
{db}/_changeswith 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. - #3409: The internal
chttpd_external:json_req_obj/2function now reads the cachedpeerbefore falling back to a socket read operation. - #3335, #3617, #3708: The
COUCHDB_FAUXTON_DOCROOTenvironment variable is now introduced to allow its explicit overriding at startup. - #3471: http clients should no longer receive stacktraces unexpectedly.
- #3491: libicu tests no longer fail on older OS releases such as CentOS 6 and 7.
- #3541: Usernames and passwords can now contain @ and not break the CouchDB replicator.
- #3545: The
dreyfus_index_managerprocess now supports offheap message queues. - #3551: The replication worker pool now properly cleans up worker processes
as they are done via the
worker_trap_exits = falsesetting. - #3633, #3631: All code paths for creating databases now fully respect db creation options, including partitioning options.
- #3424, #3362: When using
latest=trueand 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
404when the attachment is missing. - #3698: The
dev/rundevelopment script now allows clusters wheren > 5. - #3700: The
maybe_closemessage is now sent to the correct internal process. - #3183: The smoosh operator guide now recommends to use the
rpc:multicallfunction. - #3712: Including a payload within a
DELETEoperation no longer hangs the next request made to the same mochiweb acceptor. - #3715: 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. - #3739: Shards with large purge sequences no longer fail to split in a shard splitting job.
- #3754: Always return views meta info when
limit=0andsorted=true. - #3757: Properly sort
descending=trueview results with akeyslist. - #3763: Stabilize view row sorting order when they are merged by the coordinator.
1.1.3.4. Other¶
- Donuts for everyone! Er, not really - thank you for reading the 3.2 release notes.