Skip to content
This repository was archived by the owner on Oct 17, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
language: python
python:
- 2.7
- 3.6

install:
Expand Down
2 changes: 1 addition & 1 deletion src/cluster/purging.rst
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ consistency within the main database.

Config Settings
====================================
These settings ca be updated in the default.ini or local.ini:
These settings can be updated in the default.ini or local.ini:

.. code-block:: text

Expand Down
4 changes: 2 additions & 2 deletions src/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@
nitpicky = True

# should be over-written using rebar-inherited settings
version = '2.2'
release = '2.2.0'
version = '2.3'
release = '2.3.0'

project = 'Apache CouchDB'

Expand Down
14 changes: 8 additions & 6 deletions src/config/auth.rst
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,12 @@ Server Administrators
users. This configuration is known as `Admin Party`, and is not recommended
for in-production usage. You can crash the party simply by creating the
first admin account. CouchDB server administrators and passwords are not
stored in the ``_users`` database, but in the ``local.ini`` file, which
should be appropriately secured and readable only by system
administrators::
stored in the ``_users`` database, but in the last ``[admins]`` section
that CouchDB finds when loading its ini files. See :config:intro for
details on config file order and behaviour. This file (which could be
something like ``etc/local.ini`` or ``etc/local.d/10-admins.ini`` on a
Debian/Ubuntu system installed from packages) should be appropriately
secured and readable only by system administrators::

[admins]
;admin = mysecretpassword
Expand Down Expand Up @@ -69,9 +72,8 @@ Server Administrators
}

If you already have a salted, encrypted password string (for example, from
an old ``local.ini`` file, or from a different CouchDB server), then you
can store the "raw" encrypted string, without having CouchDB doubly encrypt
it.
an old ini file, or from a different CouchDB server), then you can store
the "raw" encrypted string, without having CouchDB doubly encrypt it.

.. code-block:: http

Expand Down
21 changes: 0 additions & 21 deletions src/ddocs/ddocs.rst
Original file line number Diff line number Diff line change
Expand Up @@ -429,10 +429,6 @@ the `xml` provider in our function needs more care to handle nested objects
correctly, and keys with invalid characters, but you've got the idea!

.. seealso::
CouchDB Wiki:
- `Showing Documents
<http://wiki.apache.org/couchdb/Formatting_with_Show_and_List#Showing_Documents>`_

CouchDB Guide:
- `Show Functions <http://guide.couchdb.org/editions/1/en/show.html>`_

Expand Down Expand Up @@ -486,10 +482,6 @@ be a string when used inside a list function, so you'll need to use
returning it.

.. seealso::
CouchDB Wiki:
- `Listing Views with CouchDB 0.10 and later
<http://wiki.apache.org/couchdb/Formatting_with_Show_and_List#Listing_Views_with_CouchDB_0.10_and_later>`_

CouchDB Guide:
- `Transforming Views with List Functions
<http://guide.couchdb.org/draft/transforming.html>`_
Expand Down Expand Up @@ -541,11 +533,6 @@ A basic example that demonstrates all use-cases of update handlers:
return [doc, 'Edited World!']
}

.. seealso::
CouchDB Wiki:
- `Document Update Handlers
<http://wiki.apache.org/couchdb/Document_Update_Handlers>`_

.. _filterfun:

Filter Functions
Expand Down Expand Up @@ -684,10 +671,6 @@ parameters to the :ref:`changes feed<changes>`::
- `Guide to filter change notification
<http://guide.couchdb.org/draft/notifications.html#filters>`_

CouchDB Wiki:
- `Filtered replication
<http://wiki.apache.org/couchdb/Replication#Filtered_Replication>`_

.. _vdufun:

Validate Document Update Functions
Expand Down Expand Up @@ -871,7 +854,3 @@ modified by a user with the ``_admin`` role:
CouchDB Guide:
- `Validation Functions
<http://guide.couchdb.org/editions/1/en/validation.html>`_

CouchDB Wiki:
- `Document Update Validation
<http://wiki.apache.org/couchdb/Document_Update_Validation>`_
4 changes: 0 additions & 4 deletions src/install/unix.rst
Original file line number Diff line number Diff line change
Expand Up @@ -151,10 +151,6 @@ Python and Sphinx are only required for building the online documentation.
Documentation build can be disabled by adding the ``--disable-docs`` flag to
the ``configure`` script.

.. seealso::

* `Installing CouchDB <https://cwiki.apache.org/confluence/display/COUCHDB/Installing+CouchDB>`_

Debian-based Systems
--------------------

Expand Down
1 change: 0 additions & 1 deletion src/replication/protocol.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1891,7 +1891,6 @@ Reference

* `Refuge RCouch wiki <https://github.com/refuge/rcouch/wiki/Replication-Algorithm>`_
* `CouchBase Lite IOS wiki <https://github.com/couchbase/couchbase-lite-ios/wiki/Replication-Algorithm>`_
* `CouchDB documentation <http://wiki.apache.org/couchdb/Replication>`_

.. _ECMA-262: http://www.ecma-international.org/publications/files/ecma-st/ECMA-262.pdf
.. _MVCC: http://en.wikipedia.org/wiki/Multiversion_concurrency_control
Expand Down
262 changes: 262 additions & 0 deletions src/whatsnew/2.3.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,262 @@
.. 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.3.x:

============
2.3.x Branch
============

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

.. _release/2.3.x/upgrade:

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

.. rst-class:: open

* :ghissue:`1602`: To improve security, there have been major changes in the
configuration of query servers, SSL support, and HTTP global handlers:

1. Query servers

Query servers are NO LONGER DEFINED in the .ini files, and can
no longer be altered at run-time.

The JavaScript and CoffeeScript query servers continue to be enabled
by default. Setup differences have been moved from default.ini to
the ``couchdb`` and ``couchdb.cmd`` start scripts respectively.

Additional query servers can now be configured using environment
variables:

.. code-block:: bash

export COUCHDB_QUERY_SERVER_PYTHON="/path/to/python/query/server.py with args"
couchdb

where the last segment in the environment variable (``_PYTHON``) matches
the usual lowercase(!) query language in the design doc
``language`` field (here, ``python``.)

Multiple query servers can be configured by using more environment
variables.

You can also override the default servers if you need to set command-
line options (such as ``couchjs`` stack size):

.. code-block:: bash

export COUCHDB_QUERY_SERVER_JAVASCRIPT="/path/to/couchjs /path/to/main.js -S <STACKSIZE>"
couchdb

2. Native Query Servers

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.

3. SSL Support

Enabling SSL support in the ini file is now easier:

.. code-block:: bash

[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.

4. 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.

* :ghissue:`1602`: Also to improve security, the deprecated ``os_daemons`` and
``couch_http_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.
* :ghissue:`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.
* All python scripts shipped with CouchDB now specify and require Python 3.x.
* :ghissue:`1396`: CouchDB is now compatible with Erlang 21.x.
* :ghissue:`1680`: The embedded version of ``rebar`` used to build CouchDB has been
updated to the last version of ``rebar2`` available. This assists in building on
non-x86 platforms.

.. _release/2.3.0:

Version 2.3.0
=============

Features
--------

.. rst-class:: open

* (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
:ref:`cluster/purging` documentation.
* :ghissue:`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.
* Replication supports ipv6-only peers after updating ibrowse dependency.
* :ghissue:`1708`: The UUID of the server/cluster is once again exposed in the
``GET /`` response. This was a regression from CouchDB 1.x.
* :ghissue:`1722`: Stats counts between job runs of the replicator are no longer reset
on job restart.
* :ghissue:`1195`, :ghissue:`1742`: CouchDB's ``_bulk_get`` implementation now supports
the ``multipart/mixed`` and ``multipart/related`` content types if requested,
extending compatibility with third-party replication clients.

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

.. rst-class:: open

* :ghissue:`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.
* :ghissue:`1423`: Mango selector matching now occurs at the shard level, reducing the
network traffic within a cluster for a mango query.
* :ghissue:`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
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is a "fabric timeout error"? Perhaps some internal library/daemon/something? Is a less technical term possible, for those not intimately familiar with the internals of CouchDB?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's an internal library, there's no easier way to explain this. I left "fabric timeout" in there because that exact phrase shows up in the couch logfile if it happens.

task. Nodes can now ping to stop that from happening.
* :ghissue:`1560`: An optimization to how external data sizes of attachments were
recorded was made.
* :ghissue:`1586`: When cleaning up outdated secondary index files, the search is limited
to the index directory of a specific database.
* :ghissue:`1593`: The ``couch_server`` ETS table now has the ``read_concurrency``
option set, improving access to the global list of open database handles.
* :ghissue:`1593`: Messages to update the least-recently used (LRU) cache are not
sent when the ``[couchdb] update_lru_on_read`` setting is disabled.
* :ghissue:`1625`: All nodes in a cluster now run their own ``rexi`` server.

Bugfixes
--------

.. rst-class:: open

* :ghissue:`1484`: ``_stats`` now correctly handles the case where a map function emits
an array of integers. This bug was introduced in 2.2.0.
* :ghissue:`1544`: Certain list functions could return a ``render_error`` error
intermittently.
* :ghissue:`1550`: Replicator ``_session`` support was incompatible with CouchDB
installations using the ``require_valid_user = true`` setting.
* :ghissue:`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.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
to issue RPC calls - effectively rendering the cluster useless.
to issue RPC calls, effectively rendering the cluster useless.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer the dash here. It calls out a subclause that stands out, which it should in this case.

* :ghissue:`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.
* :ghissue:`1582`: Database creation parameters now have improved validation, giving a
more readable error on invalid input.
* :ghissue:`1588`: A missing security check has been restored for the noop
``/db/_ensure_full_commit`` call to restore database validation checks.
* :ghissue:`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.
* :ghissue:`1568`: CouchDB now logs a warning if a changes feed is rewound to 0. This
can help diagnose problems in busy or malfunctioning clusters.
* :ghissue:`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.
* :ghissue:`1601`, :ghissue:`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.
* :ghissue:`1613`: Local nodes are now filtered out during read repair operations.
* :ghissue:`1636`: A memory leak when replicating over HTTPS and a problem occurs
has been squashed.
* :ghissue:`1635`: ``/_replicate`` jobs are no longer restarted if parameters haven't
changed.
* :ghissue:`1612`: JavaScript rewrite functions now send the body of the request to
the rewritten endpoint.
* :ghissue:`1631`: The replicator no longer crashes if the user has placed an
invalid VDU function into one of the ``_replicator`` databases.
* :ghissue:`1644`, :ghissue:`1647`: It is no longer possible to create illegally-named
databases within the reserved system space (``_`` prefix.)
* :ghissue:`1650`: ``_bulk_get`` is once again operational for system databases such
as ``_users``.
* :ghissue:`1652`: Access to ``/_active_tasks`` is once again restricted to server
admins only.
* :ghissue:`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.
* :ghissue:`1666`: Mango could return an error that would crash the
``couch_query_servers`` application. This is no longer the case.
* :ghissue:`1655`: Configuration of ``ets_lru`` in ``chttpd`` now performs proper error
checking of the specified config value.
* :ghissue:`1667`: The ``snappy`` dependency has been updated to fix a memory allocation
error.
* :ghissue:`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``.
* :ghissue:`1721`: The ``couchup`` convenience script for upgrading from CouchDB 1.x
now also copies a database's ``_security`` object on migration.
* :ghissue:`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.
* :ghissue:`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.

Mango
-----

.. rst-class:: open

Other
-----

The 2.3.0 release also includes the following minor improvements:

.. rst-class:: open

* Improved test cases:

* 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.
* :ghissue:`1732`, :ghissue:`1733`, :ghissue:`1736`: All of the test suites run and
pass on the Windows platform once again.

* :ghissue:`1597`: Off-heap messages, a new feature in Erlang 19+, can now be disabled
per module if desired.
* :ghissue:`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.
1 change: 1 addition & 0 deletions src/whatsnew/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ Release History
.. toctree::
:glob:

2.3
2.2
2.1
2.0
Expand Down