The mango query server continues to be enabled by default. The Erlang
query server continues to be disabled by default. This change adds
a [native_query_servers]enable_erlang_query_server=BOOL setting
(defaults to false) to enable the Erlang query server.

If the legacy configuration for enabling the query server is detected,
that is counted as a true setting as well, so existing configurations
continue to work just fine.

SSL Support

Enabling SSL support in the ini file is now easier:

[ssl]enable=true

If the legacy httpsd configuration is found in your ini file, this will
still enable SSL support, so existing configurations do not need to be
changed.

HTTP global handlers

These are no longer defined in the default.ini file, but have been
moved to the couch.app context. If you need to customize your handlers,
you can modify the app context using a couchdb.config file as usual.

#1602: Also to improve security, the deprecated os_daemons and
couch_httpd_proxy functionality has been completely removed ahead of the planned
CouchDB 3.0 release. We recommend the use of OS-level daemons such as runit, sysvinit,
systemd, upstart, etc. to launch and maintain OS daemons instead, and the use of
a reverse proxy server in front of CouchDB (such as haproxy) to proxy access to other
services or domains alongside CouchDB.

#1543: The node-local (default port 5986) /_restart endpoint has been
replaced by the clustered (default port 5984) endpoint /_node/$node/_restart and
/_node/_local/_restart endpoints. The node-local endpoint has been removed.

#1764: All python scripts shipped with CouchDB, including couchup and the
dev/run development cluster script, now specify and require Python 3.x.

(Multiple) Clustered purge is now available. This feature restores the CouchDB 1.x
ability to completely remove any record of a document from a database. Conditions
apply; to use the feature safely, and for full details, read the complete
Clustered Purge documentation.

#1658: A new config setting is available, allowing an administrator to
configure an initial list of nodes that should be contacted when a node boots up.
Nodes in the seedlist that are successfully reached will be added to that node’s
_nodes database automatically, triggering a distributed Erlang connection and
replication of the internal system databases to the new node. This can be used instead
of manual config or the cluster setup wizard to bootstrap a cluster. The progress of
the initial seeding of new nodes is exposed at the GET/_up endpoint.

#1409: CouchDB no longer forces the TCP receive buffer to a fixed size
of 256KB, allowing the operating system to dynamically adjust the buffer size. This
can lead to siginificantly improved network performance when transferring large
attachments.

#1423: Mango selector matching now occurs at the shard level, reducing the
network traffic within a cluster for a mango query.

#1423: Long running operations at the node level could exceed the inter-node
timeout, leading to a fabric timeout error in the logfile and a cancellation of the
task. Nodes can now ping to stop that from happening.

#1560: An optimization to how external data sizes of attachments were
recorded was made.

#1586: When cleaning up outdated secondary index files, the search is limited
to the index directory of a specific database.

#1593: The couch_server ETS table now has the read_concurrency
option set, improving access to the global list of open database handles.

#1593: Messages to update the least-recently used (LRU) cache are not
sent when the [couchdb]update_lru_on_read setting is disabled.

#1550: Replicator _session support was incompatible with CouchDB
installations using the require_valid_user=true setting.

#1571: Under very heavy load, it was possible that rexi_server could
die in such a way that it’s never restarted, leaving a cluster without the ability
to issue RPC calls - effectively rendering the cluster useless.

#1574: The built-in _sum reduce function has been improved to check
if the objects being summed are not overflowing the view storage. Previously, there
was no protection for _sum-introduced overflows.

#1582: Database creation parameters now have improved validation, giving a
more readable error on invalid input.

#1588: A missing security check has been restored for the noop
/db/_ensure_full_commit call to restore database validation checks.

#1591: CouchDB now creates missing shard files when accessing a database
if necessary. This handles the situation when, on database creation, no nodes were
capable of creating any of the shard files required for that database.

#1568: CouchDB now logs a warning if a changes feed is rewound to 0. This
can help diagnose problems in busy or malfunctioning clusters.

#1596: It is no longer possible that a busy couch_server, under a
specific ordering and timing of events, will incorrectly track open_async
messages in its mailbox.

#1601, #1654: CouchDB now logs better when an error causes it to
read past the EOF of a database shard. The check for whether CouchDB is trying to read
too many bytes has been correctly separated out from the error indicating it has
attempted to read past the EOF.

#1613: Local nodes are now filtered out during read repair operations.

#1636: A memory leak when replicating over HTTPS and a problem occurs
has been squashed.

#1612: JavaScript rewrite functions now send the body of the request to
the rewritten endpoint.

#1631: The replicator no longer crashes if the user has placed an
invalid VDU function into one of the _replicator databases.

#1644, #1647: It is no longer possible to create illegally-named
databases within the reserved system space (_ prefix.)

#1650: _bulk_get is once again operational for system databases such
as _users.

#1652: Access to /_active_tasks is once again restricted to server
admins only.

#1662: The couch_log application no longer crashes when new, additional
information is supplied by a crashing application, or when any of its own children are
restarted.

#1666: Mango could return an error that would crash the
couch_query_servers application. This is no longer the case.

#1655: Configuration of ets_lru in chttpd now performs proper error
checking of the specified config value.

#1667: The snappy dependency has been updated to fix a memory allocation
error.

#1683: Attempting to create a local document with an invalid revision no
longer throws a badarg exception. Also, when setting new_edits to false
and performing a bulk write operation, local documents are no longer written into the
wrong btree. Finally, it is no longer possible to create a document with an empty
ID during a bulk operation with new_edits set to false.

#1721: The couchup convenience script for upgrading from CouchDB 1.x
now also copies a database’s _security object on migration.

#1672: When checking the status of a view compaction immediately after
starting it, the total_changes and changes_done fields are now immediately
populated with valid values.

#1717: If the .ini config file is read only, an attempt to update the
config through the HTTP API will now result in a proper eacces error response.

#1603: CouchDB now returns the correct total_rows result when querying
/{db}/_design_docs.

#1746: Server admins defined in the ini file accessing via HTTP API no longer
result in the auth cache logging the access as a miss in the statistics.

#1607: The replicator no longer fails to re-authenticate to open a remote
database when its session cookie times out due to a VDU function forbidding writes
or a non-standard cookie expiration duration.

#1579: The compaction daemon no longer incorrectly only compacts a single
view shard for databases with a q value greater than 1.

#1737: CouchDB 2.x now performs as well as 1.x when using a _doc_ids
or _design_docs filter on a changes feed.

The Elixir test suite has been merged. These test cases are intended to replace the
aging, unmaintainable JavaScript test suite, and help reduce our dependency on
Mozilla Spidermonkey 1.8.5. The test suite does not yet cover all of the tests that
the JS test suite does. Once it achieves full coverage, the JS test suite will be
removed.

Many racy test cases improved for reliable CI runs.

The Makefile targets for list-eunit-* now work correctly on macOS.

#1732, #1733, #1736: All of the test suites run and
pass on the Windows platform once again.

#1597: Off-heap messages, a new feature in Erlang 19+, can now be disabled
per module if desired.

#1682: A new [feature_flags] config section exists for the purpose of
enabling or disabling experimental features by CouchDB developers.

A narwhal! OK, no, not really. If you got this far…thank you for reading.