.. Licensed under the Apache License, Version 2.0 (the "License"); you may not
.. use this file except in compliance with the License. You may obtain a copy of
.. the License at
..
..   http://www.apache.org/licenses/LICENSE-2.0
..
.. Unless required by applicable law or agreed to in writing, software
.. distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
.. WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
.. License for the specific language governing permissions and limitations under
.. the License.

.. _release/3.0.x:

============
3.0.x Branch
============

.. contents::
    :depth: 1
    :local:

.. _release/3.0.x/upgrade:

Upgrade Notes
=============

* :ghissue:`2228`: The default maximum document size has been reduced to 8MB. This means
  that databases with larger documents will not be able to replicate into CouchDB 3.0
  correctly without modification. This change has been made in preparation for
  anticipated hard upper limits on document size imposed by CouchDB 4.0. For 3.x,
  the max document size setting can be relaxed via the ``[couchdb] max_document_size``
  config setting.

* :ghissue:`2228`: The default database sharding factor ``q`` has been reduced to 2 by
  default. This, combined with automated database resharding (see below), is a better
  starting place for new CouchDB databases. As in CouchDB 2.x, specify ``?q=#`` to
  change the value upon database creation if desired. The default can be changed
  via the config ``[cluster] q`` setting.

* :ghissue:`1523`, :ghissue:`2092`, :ghissue:`2336`, :ghissue:`2475`: The "node-local"
  HTTP interface, by default exposed on port 5986, has been removed. All functionality
  previously available at that port is now available on the main, clustered interface (by
  default, port 5984). Examples:

  .. code-block:: javascript

    GET /_node/{nodename}/_stats
    GET /_node/{nodename}/_system
    GET /_node/{nodename}/_all_dbs
    GET /_node/{nodename}/_uuids
    GET /_node/{nodename}/_config
    GET /_node/{nodename}/_config/couchdb/uuid
    POST /_node/{nodename}_config/_reload
    GET /_node/{nodename}/_nodes/_changes?include_docs=true
    PUT /_node/{nodename}/_dbs/{dbname}
    POST /_node/{nodename}/_restart
    GET /_node/{nodename}/{db-shard}
    GET /_node/{nodename}/{db-shard}/{doc}
    GET /_node/{nodename}/{db-shard}/{ddoc}/_info

  ...and so on. Documentation has been updated to reflect this change.

* :ghissue:`2389`: CouchDB 3.0 now requires a server admin user to be defined at
  startup, or will print an error message and exit. (The Admin Party is now over.)

.. figure:: ../../images/23379351593_0c480537de_q.jpg
  :align: center
  :alt: Dizzy the cat with a Santa hat.

  CC-BY-NC 2.0: `hehaden @ Flickr <https://www.flickr.com/photos/hellie55/23379351593/>`_

* :ghissue:`2576`: CouchDB 3.0 now requires admin-level access for the ``/_all_dbs``
  endpoint.

* :ghissue:`2339`: All databases are now created by default as admin-only. That is, the
  default new database ``_security`` object is now:

  .. code-block:: javascript

    {
      "members" : { "roles" : [ "_admin" ] },
       "admins" : { "roles" : [ "_admin" ] }
    }

  This can be changed after database creation.

* Due to code changes in :ghissue:`2324`, it is not possible to upgrade transparently from
  CouchDB 1.x to 3.x. In addition, the ``couchup`` utility has been removed from CouchDB
  3.0 by :ghissue:`2399`. If you are upgrading from CouchDB 1.x, you must first upgrade
  to CouchDB 2.3.1 to convert your database and indexes, using ``couchup`` if desired.
  You can then upgrade to CouchDB 3.0. Or, you can start a new CouchDB 3.0 installation
  and replicate directly from 1.x to 3.0.

* :ghissue:`1833`, :ghissue:`2358`, :ghissue:`1871`, :ghissue:`1857`: CouchDB 3.0 supports
  running only under the following Erlang/OTP versions:

  * 19.x - "soft" support only. No longer tested, but should work.
  * 20.x - must be newer than 20.3.8.11 (20.0, 20.1, 20.2 versions all invalid)
  * 21.x - for 21.2, must be newer than 21.2.3
  * 22.x - for 22.0, must be newer than 22.0.5

* :ghissue:`1804`: By default, views are limited to return a maximum of 2**28 (268435456)
  results. This limit can be configured separately for views and partitioned views via
  the ``query_limit`` and ``partition_query_limit`` values in the ini file
  ``[query_server_config]`` section.

* After upgrading all nodes in a cluster to 3.0, add ``[rexi] use_kill_all = true`` to
  ``local.ini`` to save some intra-cluster network bandwidth.

Deprecated feature removal
--------------------------

The following features, deprecated in CouchDB 2.x, have been removed or replaced in
CouchDB 3.0:

* :ghissue:`2089`, :ghissue:`2128`, :ghissue:`2251`: Local endpoints for replication
  targets, which never functioned as expected in CouchDB 2.x, have been completely
  removed. When replicating databases, always specify a full URL for the source and
  target. In addition, the node local ``_replicator`` database is no longer automatically
  created.

* :ghissue:`2163`: The ``disk_size`` and ``data_size`` fields have been retired from the
  database info object returned by ``GET /{db}/``. These were deprecated in CouchDB 2.x
  and replaced by the ``sizes`` object, which contains the improved ``file``,
  ``active`` and ``external`` size metrics. Fauxton has been updated to match.

* :ghissue:`2173`: The ability to submit multiple queries against a view using
  the :method:`POST` to ``/{db}/_design/{ddoc}/_view/{view}`` with the
  ``?queries=`` option has been replaced by the new :ref:`queries
  <api/ddoc/view/multiple_queries>` endpoint. The same is true of the
  :ref:`_all_docs, _design_docs, and _local_docs <api/db/all_docs>` endpoints.
  Specify a ``keys`` object when :method:`POST`-ing to these endpoints.

* :ghissue:`2248`: CouchDB externals (``_external/``) have been removed entirely.

* :ghissue:`2208`: CouchDB no longer supports the ``delayed_commits`` option in the
  configuration file. All writes are now full commits. The ``/_ensure_full_commit``
  API endpoint has been retained (as a no-op) for backwards compatibility with old
  CouchDB replicators.

* :ghissue:`2395`: The security object in the ``_users`` database cannot be edited by
  default. A setting exists in the configuration file to revert this behaviour. The
  ability to override the disable setting is expected to be removed in CouchDB 4.0.

Deprecated feature warnings
---------------------------

The following features are deprecated in CouchDB 3.0 and will be removed in CouchDB 4.0:

* Show functions (``/{db}/{ddoc}/_show``)

* List functions (``/{db}/{ddoc}/_list``)

* Virtual hosts and ini-file rewrites

* Rewrite functions (``/{db}/{ddoc}/_rewrite``)

.. _release/3.0.1:

Version 3.0.1
=============

Features and Enhancements
-------------------------

* Fauxton was updated to version `v1.2.3`.

Bugfixes
--------

* :ghissue:`2441`: A memory leak when encoding large binary content was patched.
  This should resolve a long-standing gradual memory increase bug in CouchDB.

* :ghissue:`2613`: Simultaneous attempts to create the same new database should
  no longer result in a :code 500: error.

* :ghissue:`2678`: Defaults for the ``smoosh`` compaction daemon are now consistent
  with the shipped ``default.ini`` file.

* :ghissue:`2680`: The Windows CouchDB startup batch file will no longer fail to
  start CouchDB if incompatible versions of OpenSSL are on the ``PATH``.

* :ghissue:`2741`: A small performance improvement in the ``couch_server`` process
  was made.

* :ghissue:`2745`: The ``require_valid_user`` exception logic was corrected.

* :ghissue:`2643`: The ``users_db_security_editable`` setting is now in the correct
  section of the ``default.ini`` file.

* :ghissue:`2654`: Filtered changes feeds that need to rewind partially should no
  longer rewind all the way to the beginning of the feed.

* :ghissue:`2655`: When deleting a session cookie, CouchDB should now respect the
  operator-specified cookie domain, if set.

* :ghissue:`2690`: Nodes that re-enter a cluster after a database was created (while
  the node was offline or in maintenance mode) should more correctly handle
  creating local replicas of that database.

* :ghissue:`2805`: Mango operators more correctly handle being passed empty arrays.

* :ghissue:`2716`, :ghissue:`2738`: The ``remsh`` utility will now try and guess the
  node name and Erlang cookie of the local installation. It will also respect the
  ``COUCHDB_ARGS_FILE`` environment variable.

* :ghissue:`2797`: The cluster setup workflow now uses the correct logging module.

* :ghissue:`2818`: Mango now uses a safer method of bookmark creation that prevents
  unexpectedly creating new Erlang atoms.

* :ghissue:`2756`: SpiderMonkey 60+ will no longer corrupt UTF-8 strings when
  various JS functions are applied to them.

* Multiple test case improvements, including more ports of JS tests to Elixir.

.. _release/3.0.0:

Version 3.0.0
=============

Features and Enhancements
-------------------------

.. rst-class:: open

* :ghissue:`1789`: :ref:`User-defined partitioned databases <partitioned-dbs>`.

  These special databases support user-driven placement of documents into the same
  shard range. :ref:`JavaScript views <api/partitioned/views>` and :ref:`Mango
  indexes <api/partitioned/find>` have specific optimizations for partitioned databases
  as well.

  Two tweakable configuration parameters exist:

  * :ghissue:`1842`: Partition size limits. By default, each partition is limited
    to 10 GiB.
  * :ghissue:`1684`: Partitioned database support can be disabled via feature
    flag in ``default.ini``.

* :ghissue:`1972`, :ghissue:`2012`: :ref:`Automated shard splitting
  <cluster/sharding/splitting_shards>`.  Databases can now be re-sharded *while online*
  to increase the ``q`` factor to a larger number. This can be configured to
  require specific node and range parameters upon execution.

* :ghissue:`1910`: :ref:`Automatic background indexing <config/index_builds>`,
  internally known as ``ken``. This subsystem ensures secondary indexes (such
  as JavaScript, Mango, and text search) are kept up to date, without requiring
  an external query to trigger building them. Many configuration parameters are
  available.

* :ghissue:`1904`: Completely rewritten :ref:`automatic compaction daemon
  <compact/auto>`, internally known as ``smoosh``. This subsystem automatically
  triggers background compaction jobs for both databases and views, based on
  :ref:`configurable thresholds <config/database_compaction>`.

* :ghissue:`1889`, :ghissue:`2408`: New IO Queue subsystem implementation.
  This is :ref:`highly configurable and well-documented <config/ioq>`.

* :ghissue:`2436`, :ghissue:`2455`: CouchDB now regression tests against, and officially
  supports, running on the ``arm64v8`` (``aarch64``) and ``ppc64le`` (``ppc64el``)
  machine architectures. Convenience binaries are generated on these architectures for
  Debian 10.x ("buster") packages, and for the Docker containers.

* :ghissue:`1875`, :ghissue:`2437`, :ghissue:`2423`: CouchDB now supports linking against
  SpiderMonkey 60 or SpiderMonkey 1.8.5. SpiderMonkey 60 provides enhanced support for
  ES5, ES6, and ES2016+. Full compatibility information is available at the `ECMAScript
  compatibility table`_: click on "Show obsolete platforms," then look for "FF 60 ESR"
  in the list of engine types.

  However, it was discovered that on some ARM 64-bit distributions, SM 60 segfaults
  frequently, including the SM 60 packages on CentOS 8 and Debian 10.

  As a result, CouchDB's convenience binaries **only link against SM 60 on the
  ``x86_64`` and ``ppc64le`` architectures**. This includes the Docker image for these
  architectures.

  At present, CouchDB ships with SM 60 linked in on the following binary distributions:

  * Debian buster (10.x)
  * CentOS / RedHat 8.x
  * macOS (10.10+)
  * Windows (7+)
  * Docker (3.0.0)
  * FreeBSD (CURRENT)

  We expect to add SM 60 support to Ubuntu with Focal Fossa (20.04 LTS) when it ships in
  April 2020.

  It is unlikely we will backport SM 60 packages to older versions of Debian, CentOS,
  RedHat, or Ubuntu.

* The Windows installer has many improvements, including:

  * Prompts for an admin user/password as CouchDB 3.0 requires
    * Will not overwrite existing credentials if in place
  * No longer remove user-modified config files, closing :ghissue:`1989`
    * Also will not overwrite them on install.
  * Checkbox to disable installation of the Windows service
  * :ref:`Silent install support <install/windows/silent>`.
  * Friendly link to these online release notes in the exit dialog
  * Higher resolution icon for HiDPI (500x500)

.. warning::
    Windows 8, 8.1, and 10 require the `.NET Framework v3.5`_ to be installed.

* :ghissue:`2037`: Dreyfus, the CouchDB side of the Lucene-powered search solution, is now
  shipped with CouchDB. When one or more Clouseau Java nodes are joined to the cluster,
  text-based indexes can be enabled in CouchDB. It is recommended to have as many Clouseau
  nodes as you have CouchDB nodes. Search is advertised in the feature list present at
  ``GET /`` if configured correctly (:ghissue:`2206`).  :ref:`Configuration
  <config/search>` and :ref:`installation documentation is available <install/search>`.

* :ghissue:`2411`: The ``/_up`` endpoint no longer requires authentication, even when
  ``require_valid_user`` is ``true``.

* :ghissue:`2392`: A new ``_metrics`` role can be given to a user. This allows that
  user access only to the ``/_node/{node}/_stats`` and ``/_node/{node}/_system``
  endpoints.

* :ghissue:`1912`: A new alternative ``systemd-journald logging`` backend has been added,
  and can be enabled through the ini file. The new backend does not include CouchDB's
  microsecond-accurate timestamps, and uses the ``sd-daemon(3)`` logging levels.

* :ghissue:`2296`, :ghissue:`1977`: If the configuration file setting ``[couchdb]``
  ``single_node`` is set to ``true``, CouchDB will automatically create the system
  databases on startup if they are not present.

* :ghissue:`2338`, :ghissue:`2343`: :method:`POST` request to CouchDB views and the
  ``/{db}/_all_docs``, ``/{db}/_local_docs`` and ``/{db}/_design_docs`` endpoints now
  support the same functionality as :method:`GET`.  Parameters are passed in the body as a
  JSON object, rather than in the URL when using :method:`POST`.

* :ghissue:`2292`: The ``_scheduler/docs`` and ``_scheduler/info`` endpoints now return
  detailed replication stats for running and pending jobs.

* :ghissue:`2282`, :ghissue:`2272`, :ghissue:`2290`: CouchDB now supports specifying
  separate proxies for both the ``source`` and ``target`` in a replication via
  ``source_proxy`` and ``target_proxy`` keys. The :ref:`API documentation
  <api/server/replicate>` has been updated.

* :ghissue:`2240`: Headers are now returned from the ``/{db}/_changes`` feed
  immediately, even when there are no changes available. This avoids client
  blocking.

* :ghissue:`2005`, :ghissue:`2006`: The name of any node can now be retrieved through
  the :ref:`new API endpoint <api/server/name>` ``GET /_node/{node-name}``.

* :ghissue:`1766`: Timeouts for requests, ``all_docs``, attachments, views, and
  partitioned view requests can all be specified separately in the ini file under
  the ``[fabric]`` section. See ``default.ini`` for more detail.

* :ghissue:`1963`: Metrics are now kept on the number of partition and global view
  queries, along with the number of timeouts that occur.

* :ghissue:`2452`, :ghissue:`2221`: A new configuration field ``[couch_httpd_auth]
  same_site`` has been added to set the value of the CouchDB auth cookie's ``SameSite``
  attribute.  It may be necessary to set this to ``strict`` for compatibility with future
  versions of Google Chrome. If CouchDB CORS support is enabled, set this to ``None``.

Performance
-----------

.. rst-class:: open

* :ghissue:`2277`: The ``couch_server`` process has been highly optimized, supporting
  significantly more load than before.

* :ghissue:`2360`: It is now possible to make the rexi interface's unacked message
  limit configurable. A new, more optimized default (5, lowered from 10) has been set.
  This results in a ~50% improvement on view queries on large clusters with ``q ≥ 8``.

* :ghissue:`2280`: Connection sharing for replication now functions correctly when
  replicating through a forward proxy. Closes :ghissue:`2271`.

* :ghissue:`2195`, :ghissue:`2207`: Metrics aggregation now supports CouchDB systems
  that sleep or hibernate, ensuring that on wakeup does not trigger thousands of
  unnecessary function calls.

* :ghissue:`1795`: Avoid calling ``fabric:update_docs`` with empty doc lists.

* :ghissue:`2497`: The setup wizard no longer automatically creates the
  ``_global_changes`` database, as the majority of users do not need this
  functionality. This reduces overall CouchDB load.

Bugfixes
--------

.. rst-class:: open

* :ghissue:`1752`, :ghissue:`2398`, :ghissue:`1803`: The cluster setup wizard now ensures
  a consistent UUID and http secret across all nodes in a cluster. CouchDB admin passwords
  are also synced when the cluster setup wizard is used. This prevents being logged out
  when using Fauxton as a server admin user through a load balancer.

* :ghissue:`2388`: A compatibility change has been made to support replication with
  future databases containing per-document access control fields.

* :ghissue:`2379`: Any replicator error messages will provide an object in the response,
  or null, but never a string.

* :ghissue:`2244`, :ghissue:`2310`: CouchDB will no longer send more data than is
  requested when retrieving partial attachment data blocks.

* :ghissue:`2138`: Manual operator updates to a database's shard map will not
  corrupt additional database properties, such as partitioning values.

* :ghissue:`1877`: The ``_purge`` and ``_purged_infos_limit`` endpoints are now
  correctly restricted to server admin only.

* :ghissue:`1794`: The minimum purge sequence value for a database is now
  gathered without a clustered ``_all_docs`` lookup.

* :ghissue:`2351`: A timeout case clause in ``fabric_db_info`` has been normalised
  to match other case clauses.

* :ghissue:`1897`: The ``/{db}/_bulk_docs`` endpoint now correctly catches invalid
  (*i.e.*, non-hexadecimal) ``_rev_`` values and responds with a :code 400: error.

* :ghissue:`2321`: CouchDB no longer requires Basic auth credentials to reach the
  ``/_session`` endpoint for login, even when ``require_valid_user`` is enabled.

* :ghissue:`2295`: CouchDB no longer marks a job as failed permanently if the
  internal doc processor crashes.

* :ghissue:`2178`: View compaction files are now removed on view cleanup.

* :ghissue:`2179`: The error message logged when CouchDB does not have a ``_users``
  database is now less scary.

* :ghissue:`2153`: CouchDB no longer may return a ``badmatch`` error when querying
  ``all_docs`` with a passed ``keys`` array.

* :ghissue:`2137`: If search is not available, return a :code 400: instead of a
  :code 500: status code.

* :ghissue:`2077`: Any failed ``fsync(2)`` calls are now correctly raised to avoid
  data corruption arising from retry attempts.

* :ghissue:`2027`: Handle epoch mismatch when duplicate UUIDs are created through
  invalid operator intervention.

* :ghissue:`2019`: If a database is deleted and re-created while internal cluster
  replication is still active, CouchDB will no longer retry to delete it continuously.

* :ghissue:`2003`, :ghissue:`2438`: CouchDB will no longer automatically reset an index
  file if any attempt to read its header fails (such as when the couch_file process
  terminates unexpectedly).  CouchDB now also handles the case when a view file lacks a
  proper header.

* :ghissue:`1983`: Improve database "external" size calcuation to be more precise.

* :ghissue:`1971`: Correctly compare ETags using weak comparison methods to support
  `W/` prefix added by some load balancer configurations.

* :ghissue:`1901`: Invalid revision specified for a document update will no longer result
  in a ``badarg`` crash.

* :ghissue:`1845`: The ``end_time`` field in ``/_replicate`` now correctly converts time
  to UTC.

* :ghissue:`1824`: ``rexi`` stream workers are now cleaned up when the coordinator process
  is killed, such as when the ddoc cache is refreshed.

* :ghissue:`1770`: Invalid database ``_security`` objects no longer return a
  ``function_clause`` error and stack trace.

* :ghissue:`2412`: Mango execution stats now correctly count documents read which weren't
  followed by a match within a given shard.

* :ghissue:`2393`, :ghissue:`2143`: It is now possible to override the query server
  environment variables ``COUCHDB_QUERY_SERVER_JAVASCRIPT`` and
  ``COUCHDB_QUERY_SERVER_COFFEESCRIPT`` without overwriting the
  ``couchdb``/``couchdb.cmd`` startup scripts.

* :ghissue:`2426`, :ghissue:`2415`: The replicator now better handles the situation where
  design document writes to the target fail when replicating with non-admin credentials.

* :ghissue:`2444`, :ghissue:`2413`: Replicator error messages are now significantly
  improved, reducing ``function_clause`` responses.

* :ghissue:`2454`: The replication auth session plugin now ignores other cookies it may
  receive without logging an error.

* :ghissue:`2458`: Partitioned queries and dreyfus search functions no longer fail
  if there is a single failed node or rexi worker error.

* :ghissue:`1783`: Mango text indexes no longer error when given an empty selector or
  operators with empty arrays.

* :ghissue:`2466`: Mango text indexes no longer error if the indexed document revision
  no longer exists in the primary index.

* :ghissue:`2486`: The ``$lt``, ``$lte``, ``$gt``, and ``$gte`` Mango operators are
  correctly quoted internally when used in conjunction with a text index search.

* :ghissue:`2493`: The ``couch_auth_cache`` no longer has a runaway condition in which
  it creates millions of monitors on the ``_users`` database.

Other
-----

The 3.0.0 release also includes the following minor improvements:

.. rst-class:: open

* :ghissue:`2472`: CouchDB now logs the correct, clustered URI at startup (by default:
  port ``5984``.)

* :ghissue:`2034`, :ghissue:`2416`: The path to the Fauxton installation can now be
  specified via the ``COUCHDB_FAUXTON_DOCROOT`` environment variable.

* :ghissue:`2447`: Replication stats are both persisted when jobs are re-created, as well
  as properly handled when bulk document batches are split.

* :ghissue:`2410`, :ghissue:`2390`, :ghissue:`1913`: Many metrics were added for Mango
  use, including counts of unindexed queries, invalid index queries, docs examined that
  do and don't meet cluster quorum, query time, etc.

* :ghissue:`2152`, :ghissue:`2504`: CouchDB can now be started via a symlink to the
  binary on UNIX-based platforms.

* :ghissue:`1844`: A new internal API has been added to write custom Erlang
  request-level metrics reporting plugins.

* :ghissue:`2293`, :ghissue:`1095`: The ``-args_file``, ``-config`` and ``-couch_ini``
  parameters may now be overridden via the ``COUCHDB_INI_FILES`` environment variable
  on UNIX-based systems.

* :ghissue:`2352`: The ``remsh`` utility now searches for the Erlang cookie in
  ``ERL_FLAGS`` as well as ``vm.args``.

* :ghissue:`2324`: All traces of the (never fully functional) view-based ``_changes``
  feed have been expunged from the code base.

* :ghissue:`2337`: The md5 shim (introduced to support FIPS-compliance) is now
  used consistently throughout the code base.

* :ghissue:`2270`: Negative and non-integer ``heartbeat`` values now return :code 400:
  Bad Request.

* :ghissue:`2268`: When rescheduling jobs, CouchDB now stops sufficient running jobs
  to make room for the pending jobs.

* :ghissue:`2186`: CouchDB plugin writers have a new field in which endpoint
  credentials may be stashed for later use.

* :ghissue:`2183`: ``dev/run`` now supports an ``--extra-args`` flag to modify the
  Erlang runtime environment during development.

* :ghissue:`2105`: ``dev/run`` no longer fails on unexpected remote end connection
  close during cluster setup.

* :ghissue:`2118`: Improve ``couch_epi`` process replacement mechanism using map
  childspecs functionality in modern Erlang.

* :ghissue:`2111`: When more than ``MaxJobs`` replication jobs are defined, CouchDB
  now correctly handles job rotation when some jobs crash.

* :ghissue:`2020`: Fix full ring assertion in fabric stream shard replacements

* :ghissue:`1925`: Support list for docid when using ``couch_db:purge_docs/3``.

* :ghissue:`1642`: ``io_priority`` is now set properly on view update and compaction
  processes.

* :ghissue:`1865`: Purge now supports >100 document IDs in a single request.

* :ghissue:`1861`: The ``vm.args`` file has improved commentary.

* :ghissue:`1808`: Pass document update type for additional checks in
  ``before_doc_update``.

* :ghissue:`1835`: Module lists are no longer hardcoded in ``.app`` files.

* :ghissue:`1798`, :ghissue:`1933`: Multiple compilation warnings were eliminated.

* :ghissue:`1826`: The ``couch_replicator_manager`` shim has been fully removed.

* :ghissue:`1820`: After restarting CouchDB, JS and Elixir tests now wait up to 30s for
  it to be ready before timing out.

* :ghissue:`1800`: ``make elixir`` supports specifying individual tests to run with
  ``tests=``.

* :ghissue:`1805`: ``dev/run`` supports ``--with-haproxy`` again.

* :ghissue:`1774`: ``dev/run`` now supports more than 3 nodes.

* :ghissue:`1779`: Refactor Elixir test suite initialization.

* :ghissue:`1769`: The Elixir test suite uses Credo for static analysis.

* :ghissue:`1776`: All Python code is now formatted using `Python black`_.

* :ghissue:`1786`: ``dev/run``: do not create needless ``dev/data/`` directory.

* :ghissue:`2482`: A redundant ``get_ring_opts`` call has been removed from
  ``dreyfus_fabric_search``.

* :ghissue:`2506`: CouchDB's release candidates no longer propagate the RC tags
  into each Erlang application's version string.

* :ghissue:`2511`: `recon`_, the Erlang diagnostic toolkit, has been added to
  CouchDB's build process and ships in the release + convenience binaries.

* Fauxton updated to v1.2.3, which includes:

  * Support multiple server-generated warnings when running queries

  * Partitioned database support

  * Search index support

  * Remove references to deprecated dbinfo fields

  * Improve accessibility for screen readers

  * Numerous CSS fixes

* Improved test cases:

  * Many, many test race conditions and bugs have been removed (PR list too long to
    include here!)

  * More test cases were ported to Elixir, including:

    * Cluster with and without quorum tests (:ghissue:`1812`)
    * ``delayed_commits`` (:ghissue:`1796`)
    * ``multiple_rows`` (:ghissue:`1958`)
    * ``invalid_docids`` (:ghissue:`1968`)
    * ``replication`` (:ghissue:`2090`)
    * All ``attachment_*`` tests (:ghissue:`1999`)
    * ``copy_doc`` (:ghissue:`2000`)
    * ``attachments`` (:ghissue:`1953`)
    * ``erlang_views`` (:ghissue:`2237`)
    * ``auth_cache``, ``cookie_auth``, ``lorem*``, ``multiple_rows``, ``users_db``,
      ``utf8`` (:ghissue:`2394`)
    * ``etags_head`` (:ghissue:`2464`, :ghissue:`2469`)

  * :ghissue:`2431`: ``chttpd_purge_tests`` have been improved in light of CI failures.

  * :ghissue:`2432`: Address flaky test failure on ``t_invalid_view/1``.

  * :ghissue:`2363`: Elixir tests now run against a single node cluster, in line with
    the original design of the JavaScript test suite. This is a permanent change.

  * :ghissue:`1893`: Add "w:3" for lots of doc tests.

  * :ghissue:`1939`, :ghissue:`1931`: Multiple fixes to improve support in constrained
    CI environments.
  * :ghissue:`2346`: Big-endian support for the ``couch_compress`` tests.

  * :ghissue:`2314`: Do not auto-index when testing ``update=false`` in Mango.

  * :ghissue:`2141`: Fix ``couch_views`` encoding test.

  * :ghissue:`2123`: Timeout added for ``fold_docs-with_different_keys`` test.

  * :ghissue:`2114`: EUnit tests now correctly inherit necessary environment
    variables.

  * :ghissue:`2122`: `:meck.unload()` is now called automatically after every test.

  * :ghissue:`2098`: Fix ``cpse_test_purge_replication`` eunit test.

  * :ghissue:`2085`, :ghissue:`2086`: Fix a flaky ``mem3_sync_event_listener`` test.

  * :ghissue:`2084`: Increase timeouts on two slow btree tests.

  * :ghissue:`1960`, :ghissue:`1961`: Fix for ``chttpd_socket_buffer_size_test``.

  * :ghissue:`1922`: Tests added for shard splitting functionality.

  * :ghissue:`1869`: New test added for doc reads with etag ``If-None-Match`` header.

  * :ghissue:`1831`: Re-introduced `cpse_test_purge_seqs` test.

  * :ghissue:`1790`: Reorganise ``couch_flag_config_tests`` into a proper suite.

  * :ghissue:`1785`: Use ``devclean`` on elixir target for consistency of Makefile.

  * :ghissue:`2476`: For testing, ``Triq`` has been replaced with ``PropEr`` as an
    optional dependency.

* External dependency updates:

  * :ghissue:`1870`: Mochiweb has been updated to 2.19.0.

  * :ghissue:`1938`: Folsom has been updated to 0.8.3.

  * :ghissue:`2001`: ibrowse has been updated to 4.0.1-1.

  * :ghissue:`2400`: jiffy has been updated to 1.0.1.

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

.. _Python black: https://github.com/ambv/black
.. _hehaden: https://www.flickr.com/photos/hellie55/23379351593/
.. _ECMAScript compatibility table: https://kangax.github.io/compat-table/
.. _recon: https://github.com/ferd/recon
.. _.NET Framework v3.5: https://docs.microsoft.com/en-us/dotnet/framework/install/dotnet-35-windows-10
