Berkeley DB 3.3.11 Change Log

Major New Features:

Berkeley DB now continues to run when no disk space is available. [#637]

Add Berkeley DB API support for bulk-data returns. [#2934]

Add Berkeley DB API support for secondary indexes. [#3329]

Add support for degree 1 isolation (dirty reads). [#3395]

Add support for native Berkeley DB two-phase commit. This requires an additional parameter to txn_prepare (a global transaction id), a new interface that returns the list of prepared but not yet committed transactions, and a new interface that supports transaction discard. [#3563]

Add support for the Embedix OS. [#3666]

Interface Additions and Changes:

The new Db handle method DB->truncate supports discard of all records in a database. [#1984]

Add support for deadlock resolution based on the transaction holding the fewest, most, and most write locks. [#3020]

Replace the DB->set_malloc and DB->set_realloc functions, and the malloc arguments to DB->stat, lock_stat, log_archive, log_stat, memp_stat and txn_stat, with the new DB_ENV->set_alloc and DB->set_alloc interfaces. [#3329]

General Environment Changes:

Fix a bug where threads of control were not properly informed that the database environment had failed with DB_RUNRECOVERY. [#3280]

Fix a bug where it was impossible to remove or run recovery on a database environment that had failed with DB_RUNRECOVERY. [#3280]

Fix a bug where error messages could be lost when performing recovery on a database environment as part of a DB->open call. [#3340]

Detect attempts to use DB handles inside transactions that were not originally created in an environment that supports transactions. [#3406]

Fix a bug where recovery could drop core when a subdatabase metadata page was being recovered. [#3454]

Fix bug where system mutex resources could be leaked when DB_THREAD was specified, on OSE, VxWorks and QNX. [#3474]

Fix a bug where the DBENV->set_feedback method could cause a core dump if the database environment had no existing log files. [#3894]

General Access Method Changes:

Add the DB_FAST_STAT option to the DB->stat method to return only those database statistics that can be acquired without database traversal. Deprecate the DB_CACHED_COUNTS and DB_RECORDCOUNT flags to the DB->stat method. [#2090]

Fix bugs in the salvager where various error cases failed to unpin pages. [#2869]

Fix a bug where join memory could be allocated using the wrong allocation routines. [#3403]

Fix a bug where a transaction handle could be used after it was closed. [#3480]

Fix a bug in which a join cursor get could unexpectedly fail, or memory returned by a join cursor get could be freed or corrupted by an unrelated call using the primary database handle. [#3749]

Fix a bug in which DB-managed memory returned by a DB->get or DB->put call may be corrupted by a later cursor call. [#3576]

Fix a bug where file descriptors could be leaked when attempting to open database files where the metadata page could not be read. [#3786]

Fix a bug where the Db.open method could throw a DB_INCOMPLETE exception. [#3885]

Fix a bug in which partial gets that specify an offset and length beyond the end of the record could return garbage data. [#4117]

Btree Access Method Changes:

Fix a bug where overwriting a previously deleted data item in a sorted, off-page, duplicate set could fail. [#3617]

Fix a bug where the Btree/Recno DB->stat method could leave a page pinned. [#3761]

Fix a bug where aborting a child transaction could cause an application crash if cursors were open in the parent transaction. [#4002]

Hash Access Method Changes:

Fix a bug where memory could be freed and then returned to the application. [#3506]

Fix a bug where truncating a hash database with off-page duplicate records could drop core.

Fix a bug where certain record partial put operations could be unrecoverable. [#3944]

Fix a bug where abort when converting from on-page to off-page duplicate sets could cause a core dump. [#3975]

Fix a bug where an error in converting from on-page to off-page duplicate sets could leave a page pinned. [#3975]

Fix a bug where aborting a child transaction could cause open cursors belonging to a parent transaction to return corrupt or incomplete data. [#4002]

Fix a class of bugs in which aborting a child transaction could cause a hash cursor that pointed at a deleted item to start pointing at a different, incorrect item. [#4052] [#4142]

Queue Access Method Changes:

Preserve Queue database extent size across dump/load cycles. [#3323]

Fix a bug where calling the DB->stat method on an empty Queue database opened in read-only mode dropped core. [#3333]

Fix a bug in which attempts to get nonexistent records in a Queue database could incorrectly return EIO. [#3670]

Fix a bug where the delete of an extent file could be unrecoverable. [#3927]

Improve concurrency in the Queue access method by removing a log write made while holding a metapage lock during record append. [#3939]

Fix a bug where the metapage lock was not released on error. [#3998]

Fix a bug where log_archive with the DB_ARCH_DATA flag specified did not return the names of the extent files for Queue databases. [#3968]

Improve concurrency in the Queue access method by removing a log write made while holding a metapage lock during record append. [#3939]

Recno Access Method Changes:

Fix a bug in which a DB->get(DB_GET_BOTH) or DBC->c_get(DB_GET_BOTH) operation on a Recno database could erroneously return an item with a matching datum but a different record number from that specified. [#3878]

Fix a bug in which implicitly-created data items could incorrectly appear non-empty in a fixed-length Recno database with an re_len greater than the threshold for moving items off-page. [#2934]

C++ API Changes:

Java API Changes:

Fix a bug where calling the env.log_put method caused a core dump. [#3401]

Fix a bug where the Java lock statistics structure was out-of-date with the C version and the documentation. [#3489]

Tcl API Changes:

Fix a bug where memory guard bytes were incorrectly checked by the Tcl txn_stat call. [#3431]

Fix a bug in which values too large for a signed 32-bit integer, but which would fit in the unsigned 32-bit integer called for by many DB interfaces, would be incorrectly rejected by the Tcl interface on some platforms. [#4184]

RPC Client/Server Changes:

Fix a bug in RPC reply for the DB->join method. [#3425]

Change RPC to use Berkeley DB major/minor release numbers as the RPC version numbers. [#3425]

Fix a bug where lock detection wasn't being run.

Fix a bug where we were not returning the correct value for get_byteswapped when running over RPC. [#3771]

Change the method interface from set_server to set_rpc_server and add an argument to allow users to send in a CLIENT structure for us to use for RPC. [#3772]

XA Resource Manager Changes:

None.

Locking Subsystem Changes:

Speed up deadlock detector check by linking lockers together so we don't traverse a large and sparse locker table. [#2983]

Fix a bug where deadlock detection could be incorrect. [#3479]

Fix a bug where deadlock resolution of youngest/oldest transactions incorrectly selected the transaction to abort. [#3149]

Logging Subsystem Changes:

Fix a bug where running recovery on a database environment containing only logs from a previous release of Berkeley DB, in which log.0000000001 doesn't exist, could fail. [#3380]

Fix a bug where opening too many files could cause a core dump. [#3399]

Fix a bug where resetting the log buffer size could cause a core dump. [#3855]

Fix a bug where files in the database environment similarly named to Berkeley DB log files could cause applications to fail. [#4234]

Buffer Pool Subsystem Changes:

Fix a bug where incorrect values for the total size of the cache were being returned by the memp_stat interface. [#3638]

Fix a bug where the clean-page count for the Berkeley DB buffer cache could become incorrect. [#3679]

Fix a bug where checkpoints could not succeed if there was a temporary backing file for which the process did not have an open file descriptor. [#3826]

Fix a bug where installing or uninstalling the documentation could remove files other than Berkeley DB's. [#3960]

Fix a bug where ssize_t was typed as "int" on Win64. [#3948]

Fix a bug where recovery could fail and/or databases be corrupted for applications running on filesystems that do not zero out implicitly created blocks (for example, VxWorks and Windows 95/95). [#4025]