13.12. 0.8.x Branch
Build and System Integration
- The couchdb script no longer uses awk for configuration checks as this
was causing portability problems.
- Updated sudo example in README to use the -i option, this fixes
problems when invoking from a directory the couchdb user cannot access.
Database Core
- Fix for replication problems where the write queues can get backed up if the
writes aren’t happening fast enough to keep up with the reads. For a large
replication, this can exhaust memory and crash, or slow down the machine
dramatically. The fix keeps only one document in the write queue at a time.
- Fix for databases sometimes incorrectly reporting that they contain 0
documents after compaction.
- CouchDB now uses ibrowse instead of inets for its internal HTTP client
implementation. This means better replication stability.
Futon
- The view selector dropdown should now work in Opera and Internet Explorer
even when it includes optgroups for design documents. (COUCHDB-81)
JavaScript View Server
- Sealing of documents has been disabled due to an incompatibility with
SpiderMonkey 1.9.
- Improve error handling for undefined values emitted by map functions.
(COUCHDB-83)
HTTP Interface
- Fix for chunked responses where chunks were always being split into multiple
TCP packets, which caused problems with the test suite under Safari, and in
some other cases.
- Fix for an invalid JSON response body being returned for some kinds of
views. (COUCHDB-84)
- Fix for connections not getting closed after rejecting a chunked request.
(COUCHDB-55)
- CouchDB can now be bound to IPv6 addresses.
- The HTTP Server header now contains the versions of CouchDB and Erlang.
Build and System Integration
- CouchDB can automatically respawn following a server crash.
- Database server no longer refuses to start with a stale PID file.
- System logrotate configuration provided.
- Improved handling of ICU shared libraries.
- The couchdb script now automatically enables SMP support in Erlang.
- The couchdb and couchjs scripts have been improved for portability.
- The build and system integration have been improved for portability.
Database Core
- The view engine has been completely decoupled from the storage engine. Index
data is now stored in separate files, and the format of the main database
file has changed.
- Databases can now be compacted to reclaim space used for deleted documents
and old document revisions.
- Support for incremental map/reduce views has been added.
- To support map/reduce, the structure of design documents has changed. View
values are now JSON objects containing at least a map member, and
optionally a reduce member.
- View servers are now identified by name (for example javascript) instead of
by media type.
- Automatically generated document IDs are now based on proper UUID generation
using the crypto module.
- The field content-type in the JSON representation of attachments has been
renamed to content_type (underscore).
Futon
- When adding a field to a document, Futon now just adds a field with an
autogenerated name instead of prompting for the name with a dialog. The name
is automatically put into edit mode so that it can be changed immediately.
- Fields are now sorted alphabetically by name when a document is displayed.
- Futon can be used to create and update permanent views.
- The maximum number of rows to display per page on the database page can now
be adjusted.
- Futon now uses the XMLHTTPRequest API asynchronously to communicate with the
CouchDB HTTP server, so that most operations no longer block the browser.
- View results sorting can now be switched between ascending and descending by
clicking on the Key column header.
- Fixed a bug where documents that contained a @ character could not be
viewed. (COUCHDB-12)
- The database page now provides a Compact button to trigger database
compaction. (COUCHDB-38)
- Fixed portential double encoding of document IDs and other URI segments in
many instances. (COUCHDB-39)
- Improved display of attachments.
- The JavaScript Shell has been removed due to unresolved licensing issues.
JavaScript View Server
- SpiderMonkey is no longer included with CouchDB, but rather treated as a
normal external dependency. A simple C program (_couchjs) is provided that
links against an existing SpiderMonkey installation and uses the interpreter
embedding API.
- View functions using the default JavaScript view server can now do logging
using the global log(message) function. Log messages are directed into the
CouchDB log at INFO level. (COUCHDB-59)
- The global map(key, value) function made available to view code has been
renamed to emit(key, value).
- Fixed handling of exceptions raised by view functions.
HTTP Interface
- CouchDB now uses MochiWeb instead of inets for the HTTP server
implementation. Among other things, this means that the extra configuration
files needed for inets (such as couch_httpd.conf) are no longer used.
- The HTTP interface now completely supports the HEAD method. (COUCHDB-3)
- Improved compliance of Etag handling with the HTTP specification.
(COUCHDB-13)
- Etags are no longer included in responses to document GET requests that
include query string parameters causing the JSON response to change without
the revision or the URI having changed.
- The bulk document update API has changed slightly on both the request and the
response side. In addition, bulk updates are now atomic.
- CouchDB now uses TCP_NODELAY to fix performance problems with persistent
connections on some platforms due to nagling.
- Including a ?descending=false query string parameter in requests to views
no longer raises an error.
- Requests to unknown top-level reserved URLs (anything with a leading
underscore) now return a unknown_private_path error instead of the
confusing illegal_database_name.
- The Temporary view handling now expects a JSON request body, where the JSON
is an object with at least a map member, and optional reduce and
language members.
- Temporary views no longer determine the view server based on the Content-Type
header of the POST request, but rather by looking for a language member
in the JSON body of the request.
- The status code of responses to DELETE requests is now 200 to reflect that
that the deletion is performed synchronously.