blob: 8437b5c1d86ee42768ddb1cdb2bdd51dcd8505f3 [file] [log] [blame]
.. 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/2.0.x:
============
2.0.x Branch
============
.. contents::
:depth: 1
:local:
.. _release/2.0.0:
Version 2.0.0
=============
* Native clustering is now supported. Rather than use CouchDB replication
between multiple, distinct CouchDB servers, configure a cluster of CouchDB
nodes. These nodes will use an optimized Erlang-driven 'internal replication'
to ensure data durability and accessibility. Combine a clustered CouchDB with
a load balancer (such as ``haproxy``) to scale CouchDB out horizontally. More
details of the clustering feature are available in the :ref:`cluster`.
* `Futon` replaced by brand-new, completely re-engineered `Fauxton` interface.
URL remains the same.
* The new Mango Query Server provides a simple JSON-based way to perform CouchDB
queries without JavaScript or MapReduce. Mango Queries have a similar indexing
speed advantage over JavaScript Queries than the Erlang Queries have (2x-10x
faster indexing depending on doc size and system configuration). We recommend
all new apps start using Mango as a default. Further details are available
in the :ref:`_find, _index and _explain API <api/db/_find>`.
* Mango :ref:`selectors <changes/filter/selector>` can be used in _changes
feeds instead of JavaScript MapReduce filters. Mango has been tested to be
up to an order of magnitude (10x) faster than JavaScript in this application.
* :ref:`Rewrite rules <api/ddoc/rewrite>` for URLs can be performed using
JavaScript functions.
* :ref:`Multiple queries <api/ddoc/view/multiple_queries>` can be made of a
view with a single HTTP request.
* Views can be queried with sorting turned off ( ``sorted=false``) for a
performance boost.
* The global changes feed has been enhanced. It is now resumable and persistent.
* New endpoints added (documentation forthcoming):
* :ref:`api/server/membership` shows all nodes in a cluster
* ``/_bulk_get`` speeds up the replication protocol over low-latency
connections
* ``/_node/`` api to access individual nodes' configuration and compaction
features
* ``/_cluster_setup`` api to set up a cluster from scratch.
* ``/_up`` api to signal health of a node to a load-balancer
* ``/db/_local_docs`` and ``/db/_design_docs`` (similar to ``/db/_all_docs``)
* The ``/_log`` endpoint was removed.
* "Backend" interface on port 5986 used for specific cluster admin tasks. Of
interest are the ``_nodes`` and ``_dbs`` databases visible only through this
interface.
* Support added for Erlang/OTP 17.x, 18.x and 19
* New streamlined build system written for Unix-like systems and Microsoft
Windows
* :ref:`Configuration <api/config>` has moved from ``/_config`` to
``/_node/{node-name}/_config``
* ``instance_start_time`` now always reports ``"0"``.
.. _release/2.0.x/upgrade:
Upgrade Notes
=============
* The update sequences returned by the :ref:`api/db/changes` feed are no longer
integers. They can be any JSON value. Applications should treat them as opaque
values and return them to CouchDB as-is.
* Temporary views are no longer supported.
* It is possible to have multiple replicator databases.
``replicator/db`` config option has been removed.
Instead ``_replicator`` and any database names ending
with the ``/_replicator`` suffix will be recognized as
replicator databases by the system.
* Note that the semantics of some API calls have changed due to the introduction
of the clustering feature. Specifically, make note of the difference between
receiving a ``201`` and a ``202`` when storing a document.
* ``all_or_nothing`` is no longer supported by the :ref:`bulk_docs
<api/db/bulk_docs>` API
* After updating a design document containing a ``show``, an immediate GET to
that same ``show`` function may still return results from the previous
definition. This is due to design document caching, which may take a few
seconds to fully evict, or longer (up to ~30s) for a clustered installation.
.. _release/2.0.x/knownissues:
Known Issues
============
All `known issues`_ filed against the 2.0 release are contained within the
official `CouchDB JIRA instance` or `CouchDB GitHub Issues`.
The following are some highlights of known issues for which fixes did not land
in time for the 2.0.0 release:
* :issue:`2980`: The replicator (whether invoked via ``_replicate`` or a
document stored in the ``_replicator`` database) understands two kinds of
source and target:
#. A URL (e.g., ``https://foo:bar@foo.com/db1``), called a "remote" source or
target
#. A database name (e.g., ``db1``), called a "local" source or target.
Whenever the latter type is used, this refers to a local unclustered
database, not a clustered one.
In a future release we hope to support "local" source or target specs to
clustered databases. For now, we recommend always using the URL format for
both source and target specifications.
* :issue:`3034`: CouchDB will occasionally return 500 errors when multiple
clients attempt to PUT or DELETE the same database concurrently.
* :issue:`3119`: Adding nodes to a cluster fails if the Erlang node name
is not ``couchdb`` (of the form ``couchdb@hostname``.)
* :issue:`3050`: Occasionally the ``dev/run`` script used for development
purposes to start a local 3-node cluster will fail to start one or more
nodes.
* :issue:`2817`: The compaction daemon will only compact views for shards
that contain the design document.
* :issue:`2804`: The fast_view optimization is not enabled on the clustered
interface.
* :ghissue:`656`: The OAuth 1.0 support is broken and deprecated. It will be
removed in a future version of CouchDB.
.. _known issues: https://s.apache.org/couchdb-2.0-known-issues
.. _CouchDB JIRA instance: https://issues.apache.org/jira/browse/COUCHDB
.. _CouchDB GitHub Issues: https://github.com/apache/couchdb/issues
.. _release/2.0.x/breakingchanges:
Breaking Changes
================
The following changes in 2.0 represent a significant deviation from
CouchDB 1.x and may alter behaviour of systems designed to work with
older versions of CouchDB:
* :ghissue:`620`: ``POST /dbname`` no longer returns an ETag response header,
in compliance with RFC 7231, Section 7.2.