Apache CouchDB CHANGES ====================== Version 1.0.2 ------------- Note: This version has not been released yet. Futon: * Make test suite work with Safari and Chrome. Storage System: * Fix leaking file handles after compacting databases views. * Fix databases forgetting their validation function after compaction. * Fix occasional timeout errors after compacting large databases. * Fix occasional timeout errors on systems with slow or heavily loaded IO. Log System: * Reduce lengthy stack traces. * Allow logging of native types. HTTP Interface: * Allow reduce=false parameter in map-only views. * Support "Q values" in HTTP headers. Replicator: * Updated ibrowse library to 2.1.0 fixing numerous replication issues. * Fix authenticated replication of design documents with attachments. * Various fixes to make replicated more resilient for edge-cases. View Server: * Don't trigger a view update when requesting `_design/doc/_info`. * Fix for circular references in CommonJS requires. Version 1.0.1 ------------- Storage System: * Fix data corruption bug COUCHDB-844. Please see http://couchdb.apache.org/notice/1.0.1.html for details. Replicator: * Added support for replication via an HTTP/HTTPS proxy. * Fix pull replication of attachments from 0.11 to 1.0.x. * Make the _changes feed work with non-integer seqnums. HTTP Interface: * Expose `committed_update_seq` for monitoring purposes. * Show fields saved along with _deleted=true. Allows for auditing of deletes. * More robust Accept-header detection. Authentication: * Enable basic-auth popup when required to access the server, to prevent people from getting locked out. Futon: * User interface element for querying stale (cached) views. Build and System Integration: * Included additional source files for distribution. Version 1.0.0 ------------- Security: * Added authentication caching, to avoid repeated opening and closing of the users database for each request requiring authentication. Storage System: * Small optimization for reordering result lists. * More efficient header commits. * Use O_APPEND to save lseeks. * Faster implementation of pread_iolist(). Further improves performance on concurrent reads. View Server: * Faster default view collation. * Added option to include update_seq in view responses. Version 0.11.2 -------------- Replicator: * Fix bug when pushing design docs by non-admins, which was hanging the replicator for no good reason. * Fix bug when pulling design documents from a source that requires basic-auth. HTTP Interface: * Better error messages on invalid URL requests. Authentication: * User documents can now be deleted by admins or the user. Security: * Avoid potential DOS attack by guarding all creation of atoms. Futon: * Add some Futon files that were missing from the Makefile. Version 0.11.1 -------------- HTTP Interface: * Mask passwords in active tasks and logging. * Update mochijson2 to allow output of BigNums not in float form. * Added support for X-HTTP-METHOD-OVERRIDE. * Better error message for database names. * Disable jsonp by default. * Accept gzip encoded standalone attachments. * Made max_concurrent_connections configurable. * Made changes API more robust. * Send newly generated document rev to callers of an update function. Futon: * Use "expando links" for over-long document values in Futon. * Added continuous replication option. * Added option to replicating test results anonymously to a community CouchDB instance. * Allow creation and deletion of config entries. * Fixed display issues with doc ids that have escaped characters. * Fixed various UI issues. Build and System Integration: * Output of `couchdb --help` has been improved. * Fixed compatibility with the Erlang R14 series. * Fixed warnings on Linux builds. * Fixed build error when aclocal needs to be called during the build. * Require ICU 4.3.1. * Fixed compatibility with Solaris. Security: * Added authentication redirect URL to log in clients. * Fixed query parameter encoding issue in oauth.js. * Made authentication timeout configurable. * Temporary views are now admin-only resources. Storage System: * Don't require a revpos for attachment stubs. * Added checking to ensure when a revpos is sent with an attachment stub, it's correct. * Make file deletions async to avoid pauses during compaction and db deletion. * Fixed for wrong offset when writing headers and converting them to blocks, only triggered when header is larger than 4k. * Preserve _revs_limit and instance_start_time after compaction. Configuration System: * Fixed timeout with large .ini files. JavaScript Clients: * Added tests for couch.js and jquery.couch.js * Added changes handler to jquery.couch.js. * Added cache busting to jquery.couch.js if the user agent is msie. * Added support for multi-document-fetch (via _all_docs) to jquery.couch.js. * Added attachment versioning to jquery.couch.js. * Added option to control ensure_full_commit to jquery.couch.js. * Added list functionality to jquery.couch.js. * Fixed issues where bulkSave() wasn't sending a POST body. View Server: * Provide a UUID to update functions (and all other functions) that they can use to create new docs. * Upgrade CommonJS modules support to 1.1.1. * Fixed erlang filter funs and normalize filter fun API. * Fixed hang in view shutdown. Log System: * Log HEAD requests as HEAD, not GET. * Keep massive JSON blobs out of the error log. * Fixed a timeout issue. Replication System: * Refactored various internal APIs related to attachment streaming. * Fixed hanging replication. * Fixed keepalive issue. URL Rewriter & Vhosts: * Allow more complex keys in rewriter. * Allow global rewrites so system defaults are available in vhosts. * Allow isolation of databases with vhosts. * Fix issue with passing variables to query parameters. Test Suite: * Made the test suite overall more reliable. Version 0.11.0 -------------- Security: * Fixed CVE-2010-0009: Apache CouchDB Timing Attack Vulnerability. * Added default cookie-authentication and users database. * Added Futon user interface for user signup and login. * Added per-database reader access control lists. * Added per-database security object for configuration data in validation functions. * Added proxy authentication handler HTTP Interface: * Provide Content-MD5 header support for attachments. * Added URL Rewriter handler. * Added virtual host handling. View Server: * Added optional 'raw' binary collation for faster view builds where Unicode collation is not important. * Improved view index build time by reducing ICU collation callouts. * Improved view information objects. * Bug fix for partial updates during view builds. * Move query server to a design-doc based protocol. * Use json2.js for JSON serialization for compatiblity with native JSON. * Major refactoring of couchjs to lay the groundwork for disabling cURL support. The new HTTP interaction acts like a synchronous XHR. Example usage of the new system is in the JavaScript CLI test runner. Replication: * Added option to implicitly create replication target databases. * Avoid leaking file descriptors on automatic replication restarts. * Added option to replicate a list of documents by id. * Allow continuous replication to be cancelled. Storage System: * Adds batching of multiple updating requests, to improve throughput with many writers. Removed the now redundant couch_batch_save module. * Adds configurable compression of attachments. Runtime Statistics: * Statistics are now calculated for a moving window instead of non-overlapping timeframes. * Fixed a problem with statistics timers and system sleep. * Moved statistic names to a term file in the priv directory. Futon: * Added a button for view compaction. * JSON strings are now displayed as-is in the document view, without the escaping of new-lines and quotes. That dramatically improves readability of multi-line strings. * Same goes for editing of JSON string values. When a change to a field value is submitted, and the value is not valid JSON it is assumed to be a string. This improves editing of multi-line strings a lot. * Hitting tab in textareas no longer moves focus to the next form field, but simply inserts a tab character at the current caret position. * Fixed some font declarations. Build and System Integration: * Updated and improved source documentation. * Fixed distribution preparation for building on Mac OS X. * Added support for building a Windows installer as part of 'make dist'. * Bug fix for building couch.app's module list. * ETap tests are now run during make distcheck. This included a number of updates to the build system to properly support VPATH builds. * Gavin McDonald setup a build-bot instance. More info can be found at http://ci.apache.org/buildbot.html Version 0.10.1 -------------- Replicator: * Stability enhancements regarding redirects, timeouts, OAuth. Query Server: * Avoid process leaks * Allow list and view to span languages Stats: * Eliminate new process flood on system wake Build and System Integration: * Test suite now works with the distcheck target. Version 0.10.0 -------------- Storage Format: * Add move headers with checksums to the end of database files for extra robust storage and faster storage. View Server: * Added native Erlang views for high-performance applications. HTTP Interface: * Added optional cookie-based authentication handler. * Added optional two-legged OAuth authentication handler. Build and System Integration: * Changed `couchdb` script configuration options. * Added default.d and local.d configuration directories to load sequence. Version 0.9.2 ------------- Replication: * Fix replication with 0.10 servers initiated by an 0.9 server (COUCHDB-559). Build and System Integration: * Remove branch callbacks to allow building couchjs against newer versions of Spidermonkey. Version 0.9.1 ------------- Build and System Integration: * PID file directory is now created by the SysV/BSD daemon scripts. * Fixed the environment variables shown by the configure script. * Fixed the build instructions shown by the configure script. * Updated ownership and permission advice in `README` for better security. Configuration and stats system: * Corrected missing configuration file error message. * Fixed incorrect recording of request time. Database Core: * Document validation for underscore prefixed variables. * Made attachment storage less sparse. * Fixed problems when a database with delayed commits pending is considered idle, and subject to losing changes when shutdown. (COUCHDB-334) External Handlers: * Fix POST requests. Futon: * Redirect when loading a deleted view URI from the cookie. HTTP Interface: * Attachment requests respect the "rev" query-string parameter. JavaScript View Server: * Useful JavaScript Error messages. Replication: * Added support for Unicode characters transmitted as UTF-16 surrogate pairs. * URL-encode attachment names when necessary. * Pull specific revisions of an attachment, instead of just the latest one. * Work around a rare chunk-merging problem in ibrowse. * Work with documents containing Unicode characters outside the Basic Multilingual Plane. Version 0.9.0 ------------- Futon Utility Client: * Added pagination to the database listing page. * Implemented attachment uploading from the document page. * Added page that shows the current configuration, and allows modification of option values. * Added a JSON "source view" for document display. * JSON data in view rows is now syntax highlighted. * Removed the use of an iframe for better integration with browser history and bookmarking. * Full database listing in the sidebar has been replaced by a short list of recent databases. * The view editor now allows selection of the view language if there is more than one configured. * Added links to go to the raw view or document URI. * Added status page to display currently running tasks in CouchDB. * JavaScript test suite split into multiple files. * Pagination for reduce views. Design Document Resource Paths: * Added httpd_design_handlers config section. * Moved _view to httpd_design_handlers. * Added ability to render documents as non-JSON content-types with _show and _list functions, which are also httpd_design_handlers. HTTP Interface: * Added client side UUIDs for idempotent document creation * HTTP COPY for documents * Streaming of chunked attachment PUTs to disk * Remove negative count feature * Add include_docs option for view queries * Add multi-key view post for views * Query parameter validation * Use stale=ok to request potentially cached view index * External query handler module for full-text or other indexers. * Etags for attachments, views, shows and lists * Show and list functions for rendering documents and views as developer controlled content-types. * Attachment names may use slashes to allow uploading of nested directories (useful for static web hosting). * Option for a view to run over design documents. * Added newline to JSON responses. Closes bike-shed. Replication: * Using ibrowse. * Checkpoint replications so failures are less expensive. * Automatically retry of failed replications. * Stream attachments in pull-replication. Database Core: * Faster B-tree implementation. * Changed internal JSON term format. * Improvements to Erlang VM interactions under heavy load. * User context and administrator role. * Update validations with design document validation functions. * Document purge functionality. * Ref-counting for database file handles. Build and System Integration: * The `couchdb` script now supports system chainable configuration files. * The Mac OS X daemon script now redirects STDOUT and STDERR like SysV/BSD. * The build and system integration have been improved for portability. * Added COUCHDB_OPTIONS to etc/default/couchdb file. * Remove COUCHDB_INI_FILE and COUCHDB_PID_FILE from etc/default/couchdb file. * Updated `configure.ac` to manually link `libm` for portability. * Updated `configure.ac` to extended default library paths. * Removed inets configuration files. * Added command line test runner. * Created dev target for make. Configuration and stats system: * Separate default and local configuration files. * HTTP interface for configuration changes. * Statistics framework with HTTP query API. Version 0.8.1-incubating ------------------------ 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. 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. 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) 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. Futon: * The view selector dropdown should now work in Opera and Internet Explorer even when it includes optgroups for design documents. (COUCHDB-81) Version 0.8.0-incubating ------------------------ 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). 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. 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. 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. 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.