Berkeley
DB 4.2.52 Change Log
Last Updated: $Date: 2003/12/12 9:00:00 $
Database or Log File On-Disk Format Changes:
- Queue databases that use
encryption or data checksum features with extent files will need to be
dumped and re-loaded prior to using with release 4.2. For more details
please see the "Upgrading Berkeley DB Applications, Queue Access
Method" in the Berkeley DB Reference Guide included in your download
package. [#8671]
- The on-disk log format
changed.
New Features:
- Add support for a reduced
memory footprint build of the Berkeley DB library. [#1967]
- Add the DB_MPOOLFILE->set_flags
interface which disallows the creation of backing filesystem files for
in-memory databases. [#4224]
- Add cache interfaces to
limit the number of buffers written sequentially to allow applications to
bound the time they will monopolize the disk. [#4935]
- Support auto-deletion of log
files. [#0040] [#6252]
- The new Java DBX API for
Berkeley DB allows Java programmers to use a familiar Java Collections
style API, including Map, while interacting with the transactional
Berkeley DB core engine. [#6260]
- Support auto-commit with the
DB->get method's consume operations. [#6954]
- Add "get" methods
to retrieve most settings. [#7061]
- Add Javadoc documentation to
the Berkeley DB release. [#7110]
- Add support to Concurrent
Data Store to allow duplication of write cursors. [#7167]
- Add C++ utility classes for
iterating over multiple key and data items returned from a cursor when
using the DB_MULTIPLE or DB_MULTIPLE_KEY flags. [#7351]
- Add CamelCased methods to
the Java API. [#7396]
- Add the DB_MPOOLFILE->set_maxsize
interface to enforce a maximum database size. [#7582]
- Add a toString() method for
all Java *Stat classes (DbBtreeStat, DbHashStat, DbMpoolStat, etc.). This
method creates a listing of values of all of the class member variables.
[#7712]
Database Environment Changes:
- Add cache interfaces to
limit the number of buffers written sequentially to allow applications to
bound the time they will monopolize the disk. [#4935]
- Fix a bug which could cause database
environment open to hang, in database environments supporting
cryptography. [#6621]
- Fix a bug where a database
environment panic might result from an out-of-disk-space error while
rolling back a page allocation. [#6694]
- Fix a bug where a database
page write failure, in a database environment configured for encryption or
byte-swapping, could cause page corruption. [#6791]
- Fix a bug where
DB->truncate could drop core if there were active cursors in the
database. [#6846]
- Fix a bug where for databases
sharing a physical file required a file descriptor per database. [#6981]
- Fix a bug where the panic
callback routine was only being called in the first thread of control to
detect the error when returning DB_RUNRECOVERY. [#7019]
- Fix a bug where a transaction
which contained a remove of a subdatabase and an allocation to another
subdatabase in the same file might not properly be aborted. [#7356]
- Fix a bug to now disallow
DB_TRUNCATE on opens in locking environments, since we cannot prevent race
conditions. In the absence of locking and transactions, DB_TRUNCATE will
truncate ANY file for which the user has appropriate permissions. [#7345]
- Fix several bugs around
concurrent creation of databases. [#7363]
- Change methods in DbEnv that
provide access to statistics information so that they now return instances
of the proper classes. [#7395]
- Replace the
DB->set_cache_priority API with the DB_MPOOLFILE->set_priority API.
[#7545]
- Fix a bug where a failure
during a creation of a subdatabase could then fail in the dbremove
cleanup, causing a crash. [#7579]
- Allow creating into a file
that was renamed within the same transaction. [#7581]
- Fix a bug where
DB_ENV->txn_stat could drop core if there are more-than-expected active
transactions. [#7638]
- Change Berkeley DB to ignore
user-specified byte orders when creating a database in an already existing
physical file. [#7640]
- Fix a bug where a database
rename that is aborted would leak some memory. [#7789]
- Fix a bug where files could
not be renamed or removed if they were not writable. [#7819]
- Fix a bug where an error
during a database open may leak memory in the mpool region. [#7834]
- Fix a bug where the
DB_ENV->trickle_sync method could flush all of the dirty buffers in the
cache rather than a subset. [#7863]
- Fix a bug where an attempt
to rename or remove an open file in the same transaction could succeed,
even though this is not allowed and will not work on Windows. [#7917]
- Fix a bug where if a
recovery interval in the log contained only database opens then a recovery
might report "Improper file close". [#7886]
- Add a flag, DB_INIT_REP to
DB_ENV->open to initialize Replication subsystem. [#8299]
- Fix a bug where file remove
and rename operations would not block each other if they were in different
transactions. [#8340]
- Change Berkeley DB to not
propagate error returns from the application's rep_send function out of
the Berkeley DB API. [#8496][#8522]
- Remove restriction that
DB_TRUNCATE is not allowed on files with subdatabases. This restriction
was introduced in 4.1.25. [#8852]
Concurrent Data Store Changes:
- Fix a bug where opens with
other threads/processes actively acquiring locks on database handles could
deadlock. [#6286]
- Add support to Concurrent
Data Store to allow duplication of write cursors. [#7167]
General Access Method Changes:
- Fix a bug where the
truncate of a database with associated secondary databases did not
truncate the secondaries. [#6585]
- Fix a bug in which an
out-of-disk condition during a transactional database create, remove, or
rename could cause a crash. [#6695]
- Fix a bug where system
errors unknown to the C library could cause Berkeley DB utilities to drop
core on Solaris. [#6728]
- Fix a bug where Berkeley DB
could overwrite incorrectly formatted files rather than returning an error
to the application during open. [#6769]
- Fix a bug DB handle
reference counts were incorrect, leading to spurious warning about open DB
handles. [#6818]
- Fix a bug where cursor
adjustments across multiple DB handles could fail. [#6820]
- Fix a bug where a failure
during open could result in a hang. [#6902]
- Fix a bug where repeated
failures during certain stages of opens could cause error messages to
appear during recovery. [#7008]
- Fix a bug in secondary
indices with multiple threads calling DBC->put that resulted in
DB_NOTFOUND being returned. [#7124]
- Fix a bug where database
verification might reference memory which was previously freed after
reporting an error. [#7137]
- Rename the DB_CHKSUM_SHA1
to DB_CHKSUM as Berkeley DB only uses SHA1 for encrypted pages, not for
clear text pages. [#7095]
- Fix a bug where
DB->rename could fail silently if the underlying system rename call
failed. [#7322]
- Fix a bug where Berkeley DB
failed to open a file with FCNTL locking and 0-length files. [#7345]
- Prohibit the use of the
DB_RMW flag on get operations for DB handles opened in transactional mode.
[#7407]
- Standardize when Berkeley
DB will return DB_LOCK_NOTGRANTED, or throw DbLockNotGrantedException,
versus returning DB_LOCK_DEADLOCK or throwing DbDeadlockException. Fix
bugs in the C++ and Java APIs where DbException was thrown, encapsulating
DB_LOCK_NOTGRANTED, rather than throwing DbLockNotGrantedException.
[#7549]
- Fix a bug where Berkeley DB
could hang on a race condition if a checkpoint was running at the same time
another thread was closing a database for the last time. [#7604]
- Fix several bugs that made
multiple file system level operations inside a single transaction break.
[#7728]
- Fix a memory leak in the
abort path of a sub-database create. [#7790]
- Fix a race condition with
file close that could cause NULL pointer deference under load. [#8235]
- Fix a bug to correct the
calculation of the amount of space needed to return off page duplicates
using the DB_MULTIPLE interface. [#8437]
- Fix a bug where the
duplicate data item count could be incorrect if a cursor was used to first
overwrite and then delete a duplicate which was part of a set of
duplicates large enough to have been stored outside the standard access method
pages. [#8445]
- Fix a bug where The DB_MULTIPLE
interface might fail to return the proper duplicates in some edge cases.
[#8485]
- Fix a bug where DB->get(...DB_MULTIPLE) would not return a reasonable estimate
of the buffer size required to return a set of duplicates. [#8513]
- Fix a bug where the
DbCursor.count method could return the wrong count in the case of small
(on-page) duplicate sets, where a still-open cursor has been used to
delete one of the duplicate data items. [#8851]
- Fix a bug where a
non-transactional cursor using DB_MULTIPLE_KEY could briefly be left
pointing at an unlocked page. This could lead to a race condition with
another thread deleting records resulting in the wrong record being
deleted. [#8926]
- Fix a bug where a key/data
item could be lost if a cursor is used to do a delete, and then
immediately used to do an insert which causes a set of duplicates to be
shifted to an off-page Btree. [#9085]
Btree Access Method Changes:
- Fix a bug where a deleted
item could be left on a database page causing database verification to
fail. [#6059]
- Fix a bug where a page may
be left pinned in the cache if a deadlock occurs during a DB->put
operation. [#6875]
- Fix a bug where a deleted
record may not be removed from a Btree page if the page is split while
another cursor is trying to delete a record on the page. [#6059]
- Fix a bug where records
marked for deletion were incorrectly counted when retrieving in a Btree by
record number. [#7133]
- Fix a bug where a page and
lock were left pinned if an application requested a record number past the
end of the file when retrieving in a Btree by record number. [#7133]
- Fix a bug where deleted
keys were included in the key count for the DB->stat call. [#7133]
- Fix a bug where specifying
MULTIPLE_KEY and NEXT_DUP to the bulk get interfaces might return the
wrong data if all the duplicates could not fit in a single buffer. [#7192]
- Remove assertions that
triggered failures that were correct executions. [#8032]
- Fix a bug where duplicate
data items were moved onto overflow pages before it was necessary. [#8082]
- Fix a bug where the
DB->verify method might incorrectly complain about a tree's overflow
page reference count. [#8061]
- Fix a bug that could cause
DB_MULTIPLE on a Btree database to return an incorrect data field at the
end of buffer. [#8442]
- Fix a bug where
DBC->c_count was returning an incorrect count if the cursor was
positioned on an item that had just been deleted. [#8851]
- Remove the test for
bt_maxkey in the Btree put code. If it is set to 1 it can cause an
infinite loop. [#8904]
Hash Access Method Changes:
- Fix a bug where Hash
databases could be corrupted on filesystems that do not zero-fill
implicitly created blocks. [#6588]
- Fix a bug where creating a
Hash database with an initial size larger than 4GB would fail. [#6805]
- Fix a bug where a page in
an unused hash bucket might not be empty if there was a disk error while
writing the log record for the bucket split. [#7035]
- Fix a bug where two threads
opening a hash database at the same time might deadlock. [#7159]
- Fix a bug where a hash
cursor was not updated properly when doing a put with DB_NODUPDATA
specified. [#7361]
- Fix a bug that could cause
DB_MULTIPLE_KEY on Hash databases to return improper results when moving
from a key with duplicates to a key without duplicates. [#8442]
Queue Access Method Changes:
- Fix a bug where opening an
in-memory Queue database with extent size specified will dump core.
[#6795]
- Support auto-commit with
the DB->get method's consume operations. [#6954]
- Fix a bug where calling the
sync method on a queue database with extents may hang if there are active
consumers. [#7022]
- Fix a bug where a get(...MULTIPLE...)
might lead to an infinite loop or return the wrong record number(s) if
there was a deleted record at the beginning of a page or the buffer was
filled exactly at the end of a page. [#7064]
- Fix a bug where a database
environment checkpoint might hang if a thread was blocked waiting for a
record while doing a DB_CONSUME_WAIT on a Queue database. [#7086]
- Fix a bug where queue
extent files would not be removed if a queue with extents was removed and
its record numbers wrapped around the maximum record number. [#7191]
- Fix a bug where a
DB->remove of an extent based Queue with a small number of pages per
extent would generate a segmentation fault. [#7249]
- Fix a bug where verify and
salvage on queues with extent files did not consider the extent files.
[#7294]
- Fix a bug when transaction
timeouts are set in the environment they would get applied to some
non-transactional operations and could cause a failure during the abort of
a queue operation. [#7641]
- Fix a bug when the record
numbers in a queue database wrap around at 232, a cursor
positioned on a record near the head of the queue that is then deleted,
may return DB_NOTFOUND when get is specified with DB_NEXT rather than the
next non-deleted record. [#7979]
- Fix a bug where a record
lock will not be removed when the first record in the queue is deleted
without a transaction (not using DB_CONSUME). [#8434]
- Fix a bug where byte
swapping was not handled properly in queue extent files. [#8358]
- Fix a bug where Queue
extent file pages were not properly typed, causing the extent files not to
use encryption or checksums, even if those options had been specified.
This fix requires a database upgrade for any affected Queue databases.
[#8671]
- Fix a bug where truncating
a queue with extents may fail to remove the last extent file. [#8716]
- Fix a bug where a rename or
remove of a QUEUE database with extents might leave empty extent files
behind. [#8729]
- Fix a bug where on Windows
operating systems a "Permission denied" error may be raised if a
Queue extent is reopened while it is in the process of being unlinked.
[#8710]
Recno Access Method Changes:
- Fix a bug where the
DB->truncate method may return the wrong record count if there are
deleted records in the database. [#6788]
- Fix a bug where internal
nodes of Recno trees could get wrong record count if a log write failed
and the log was later applied during recovery. [#6841]
- Fix a bug where a cursor
next operation could infinitely loop after deleting a record, when the
deleted record was immediately followed by implicitly created records.
[#8133]
C++-specific API Changes:
- Document the DB->del
method can return DB_KEYEMPTY for Queue or Recno databases. The C++ and
Java APIs now return this value rather than throwing an exception. [#7030]
- Add "get" methods
to retrieve most settings. [#7061]
- Fix a bug where applications
calling DB->verify from the C++ or Java APIs could drop core. Change
the DB->verify method API to act as a DB handle destructor. [#7418]
- Add utility classes for
iterating over multiple key and data items returned from a cursor when
using the DB_MULTIPLE or DB_MULTIPLE_KEY flags. These classes,
DbMultipleDataIterator, DbMultipleKeyDataIterator, and
DbMultipleRecnoDataIterator, mirror the DB Java API and are provided as
replacements for the C macros, DB_MULTIPLE_INIT, DB_MULTIPLE_NEXT,
DB_MULTIPLE_KEY_NEXT, and DB_MULTIPLE. [#7351]
- Fix a bug DbException was
thrown, encapsulating DB_LOCK_NOTGRANTED, rather than throwing
DbLockNotGrantedException. [#7549]
- Add the DbEnv handle to
exceptions thrown by the C++ and Java APIs, where possible. [#7303]
- Fix a bug in the C++ DbEnv::set_rep_transport
signature so that the envid parameter is signed. [#8303]
- Make the fields of DB_LSN
public in the DbLsn class. [#8422]
Java-specific API Changes:
- New Java API
(com.sleepycat.dbx.*) for the transactional storage of data using the Java
Collections design pattern. [#6569]
- Fix a bug in the Java
Dbt.get_recno_key_data() method when used inside callbacks. [#6668]
- Fix Java DbMpoolStat class
to match the DB_MPOOL_STAT struct. [#6821]
- Fix a bug where Dbc.put
expected key data even if the key was unused. [#6932]
- Fix a bug in the Java API
secondary_key_create callback where memory was freed incorrectly, causing
JVM crashes. [#6970]
- Re-implement the Java API
to improve performance and maintenance. Fix several inconsistencies in the
Java API: a) Db.put(), Dbc.get() and Dbc.put() preserve key size; b)
Dbc.get() returns DB_KEYEMPTY rather than throwing an exception; c) The
return type of Db.close() is now void. [#7002]
- Document the DB->del
method can return DB_KEYEMPTY for Queue or Recno databases. The C++ and
Java APIs now return this value rather than throwing an exception. [#7030]
- Add "get" methods
to retrieve most settings. [#7061]
- Add Javadoc documentation
to the Berkeley DB release. [#7110]
- Fix a bug that caused
potential memory corruption when using the Java API and specifying the
DB_DBT_REALLOC flag. [#7215]
- Add the DbEnv
handle to exceptions thrown by the C++ and Java APIs, where possible.
[#7303]
- Map existing c-style API to
a more Java camel case API with Java style naming. Retained deprecated
older API for the 4.2 release for backwards support in all cases except
callback interfaces. Also overloaded methods such as get/pget() into
multiple different get() calls to clean up call structure. [#7378]
- Add CamelCased methods to
the Java API. [#7396]
- Fix a bug where
applications calling DB->verify from the C++ or Java APIs could drop
core. Change the DB->verify method API to act as a DB handle
destructor. [#7418]
- Fix a bug DbException was
thrown, encapsulating DB_LOCK_NOTGRANTED, rather than throwing
DbLockNotGrantedException. [#7549]
- Add a toString() method for
all Java *Stat classes (DbBtreeStat, DbHashStat, DbMpoolStat, etc.). This
method creates a listing of values of all of the class member variables.
[#7712]
- Remove Db.fd() method from
Java API as it has no value to a Java programmer. [#7716]
- Add an accessible timeout field
in the DbLockRequest class, needed for the DB_LOCK_GET_TIMEOUT operation
of DbEnv.lockVector. [#8043]
- Fix replication method calls
from Java API. [#8467]
- Fix a bug where exception
returns were inconsistent. [#8622]
- Change the Java API so that
it throws an IllegalArgumentException rather than a DbException with the
platform-specific EINVAL. [#8978]
Tcl-specific API Changes:
- Add "get" methods
to retrieve most settings. [#7061]
- Brought Tcl's $env set_flags
command up to date with available flags. [#7385]
- Update Berkeley DB to
compile cleanly against the Tcl/Tk 8.4 release. [#7612]
- Made txn_checkpoint publicly
available. [#8594]
RPC-specific Client/Server Changes:
- Fix two bugs in the RPC
server where incorrect handling of illegal environment home directories
caused server crashes. [#7075]
- Fix a bug where the
DB_ENV->close method would fail in RPC clients if the DB_ENV->open
method was never called. [#8200]
Replication Changes:
- Write prepare records
synchronously on replication clients so that prepare operations are always
honored in the case of failure. [#6416]
- Change replication
elections so that the client with the biggest LSN wins, and priority is a
secondary factor. [#6568]
- Fix a bug where replicas could
not remove log files because the checkpoint lsn was not being updated
properly. [#6620]
- Force prepare records out
to disk regardless of the setting of the DB_TXN_NOSYNC flag. [#6614]
- Add a new flag,
DB_REP_NOBUFFER, which gets passed to the rep_send function specified in
DBENV->rep_set_transport, to indicate that the message should not be
buffered on the master, but should be immediately transmitted to the
client(s). [#6680]
- Fix a replication election
bug where Berkeley DB could fail to elect a master even if a master
already existed. [#6702]
- Allow environment wide
setting of DB_AUTO_COMMIT on replication clients. [#6732]
- Fix a replication bug where
a client coming up in the midst of an election might not participate in
the election. [#6826]
- Add log_flushes when sites
become replication masters. If log_flush fails, panic the environment
since the clients already have the commits. [#6873]
- Fix a replication bug where
a brand new client syncing up could generate an error on the master.
[#6927]
- Fix a bug where clients
synchronize with the master when they come up with the same master after a
client-side disconnect or failures. [#6986]
- Fix several bugs in
replication elections turned up by test rep005. [#6990]
- Fix a bug where aborted
hash group allocations were not properly applied on replicas. [#7039]
- Fix race conditions between
running client recovery and other threads calling replication and other
Berkeley DB functions. [#7402] [#8035]
- Use shared memory region
for all replication flags. [#7573]
- Fix a bug where log archive
on clients could prematurely remove log files. [#7659]
- Return an error if a
non-replication dbenv handle attempts to write log records to a
replication environment. [#7752]
- Fix a race condition when
clients applied log records, where we would store a log record locally and
then never notice we have it, and need to re-request it from the master,
causing the client to get far behind the master. [#7765]
- Fix inconsistencies between
the documentation and actual code regarding when replication methods can
be called. [#7775]
- Fix a bug where Berkeley DB
would wait forever if a NEWMASTER message got dropped. [#7897]
- Fix a bug where the master
environment ID did not get set when you called DBENV->rep_start as a
master. [#7899]
- Fix a bug where operations
on a queue database will not get replicated if the transactions that
include the operations are committed out of order with the operations.
[#7904]
- Fix bugs in log_c_get where
an invalid LSN could access invalid addresses. Fix bug in elections where
a client upgrading to master didn't write a txn_recycle record. [#7964]
- Fix a bug where
REP_VERIFY_FAIL during client recovery wasn't being handled. [#8040]
- Return an error if the
application calls rep_process_message before calling rep_start when
starting. [#8057]
- Fix a bug to ensure that
replication generation numbers always increase and are never reset to 1.
[#8136]
- Modify log message
retransmission protocol to efficiently handle the case where a large
number of contiguous messages were dropped at once. [#8182] [#8169]
[#8188]
- Fix a bug where using the
wrong mutex in replication which under certain conditions could cause
replication to hang. Also fix a bug where incorrectly setting the
checkpoint LSN could cause recovery to take a very long time. [#8183]
- Fix bug where a message
could get sent to an invalid master. [#8184]
- Fix a bug where a local
variable in log_archive was not initialized. [#8230]
- Fix a bug where elections
could hang. [#8254]
- Fix a bug to ensure that we
can always remove/recreate the temporary replication database after a
failure. [#8266]
- Add a flag, DB_INIT_REP to
DB_ENV->open to initialize Replication subsystem. [#8299]
- Add new ret_lsnp argument
to rep_process_message so that LSNs can be returned to clients on
permanent records. Add new lsnp arg to the send callback function so that
the master can know the LSNs of records as well. [#8308]
- Narrow the window where we
block due to client recovery. [#8316]
- Fix a bug in log_c_incursor
where we would not detect that a record was already in the buffer. [#8330]
- Fix a bug that would allow
elections to be managed incorrectly. [#8360]
- Fix a bug where replicas
were not maintaining meta->last_pgno correctly. [#8378]
- Fix a bug in truncating log
after recovery to a timestamp or replication-based recovery. [#8387]
- Fix a bug where a
checkpoint record written as the first record in a log could cause
recovery to fail. [#8391]
- Fix a bug where a client
would return DB_NOTFOUND instead of DB_REP_OUTDATED when it was unable to
synchronize with the master because it ran out of log records. [#8399]
- Fix a bug where log file
changes were not handled properly in replication. [#8400] [#8420]
- Fix a bug where checking
for invalid log header data could fail incorrectly. [#8460]
- Fix a bug where DB_REP_PERMANENT
was not being set when log records were re-transmitted. [#8473]
- Modify elections so that
all participants elect in the same election generation. [#8590]
- Fix bug where rep_apply was
masking an error return. Also return DB_RUNRECOVERY if the replication
client cannot commit or checkpoint. [#8636]
- Fix a bug to update the
last_pgno on the meta page on free as well as alloc. [#8637]
- Fix a bug to roll back the
LSN on a queue database metapage if we're going to truncate the log. Fix a
bug in MASTER_CHECK so we don't apply log messages from an unknown master.
Fix a bug to perform a sync on rep_close. [#8601]
- Fix a bug so that we reset
the LSN when putting pages on the free list. [#8685]
- Fix a bug where replication
was not properly calling db_shalloc. [#8811]
- Fix a bug where replication
flags were getting set in multiple steps which could cause an Assertion Failure
in log_compare. [#8889]
- Fix a bug where open
database handles could cause problems on clients. [#8936]
- Fix a bug where in dbreg
code where an fnp with an invalid fileid could be found on the lp->fq
list. [#8963]
- Fix a bug where a reader on
a replication client could see partial updates when replicating databases
with off page duplicates or overflow records. [#9041]
- Fix a bug that could result
in a self deadlock in dbreg under replication. [#9138]
- Fix a memory leak in
replication. [#9255]
XA Resource Manager Changes:
- Fix a bug where a failed
write during XA transaction prepare could result in a checksum error in
the log. [#6760]
- Fix a bug where we were not
properly handling DB_AUTO_COMMIT in XA transactions and where we were not
honoring the XA transaction during an XA-protected open. [#6851]
- Add infrastructure support
for multi-threaded XA. [#6865]
- Display XA status and ID as
part of db_stat -t output. [#6413]
Locking Subsystem Changes:
- Fix a bug where locks were
not cleared in an off-page duplicate cursor. [#6950]
- Fix a bug where a deadlock
may not be detected if dirty reads are enabled and the deadlock involves
an aborting transaction. [#7143]
- Fix a bug where a
transaction doing updates while using dirty read locking might fail while
aborting the transaction with a deadlock. Several other locking issues
were also fixed: a) failure to remove dirty read locks prior to aborting a
transaction, b) calling upgrade on other than WWRITE locks, c) failure to
remove expired locks from the locker queue, d) clearing the lock timeout
before looking at it. [#7267]
- Fix a bug when dirty reads
are enabled a writer might be blocked on a lock that it had previously
obtained. Dirty readers would also wait behind regular readers when they
could have safely read a page. [#7502]
- Fix a bug where a
DB->put using CDB gets a lock timeout then the error "Closing
already closed cursor". [#7597]
- Modify the maximum
test-and-set mutex sleep for logical page locks at 10ms, everything else
at 25ms. [#7675]
- Fix a bug where the
DB_LOCK_TIMEOUT mode of env->lock_vec could hang. [#7682]
- Fix a bug where running
with only transaction timeouts for deadlock detection might deadlock
without being detected if more than one transaction times out while trying
to avoid searching a Btree on repeated inserts. [#7787]
- Fix a bug that could cause
detection to not run when there was a lock that should be timed out.
[#8588]
- Fix a bug with using dirty
reads with subtransactions. If a writing subtransaction aborts and then is
blocked, the deadlock may not be detected. [#9193]
- Fix a bug where handle
locks were not being correctly updated when releasing read locks during
transaction prepare. [#9275]
Logging Subsystem Changes:
- Fix a bug where if a write error
occurred while committing a transaction with DB_WRITE_NOSYNC enabled the
transaction may appear to be committed in the log while it was really
aborted. [#7034]
- Fix a bug where
multi-process applications could violate write-ahead logging requirements
if one process wrote a log record but didn't flush it, the current log
file then changed, and another process wrote a database page before the
log record was written to disk. [#6999]
- Fix a bug where fatal
recovery could fail with a "Transaction already committed" error
if recovery had been run and there are no active transactions in the part
of the log following the last checkpoint. [#7234]
- Fix a bug where recovery
would fail to put freed pages onto the free list, when both committed and
aborted subtransactions that allocated new pages were present. This only
affected prepared transactions. [#7403]
- Fix a bug where open errors
during recovery get propagated unless they are reporting missing files,
which might correctly have been removed. [#7578]
- Fix a bug so that we now
validate a log file before writing to it. [#7580]
- Fix a bug where Berkeley DB
could display the unnecessary error message "DB_LOGC->get: short
read" during recovery. [#7700]
- Fix a bug where recovery
may fail if it tries to reallocate a page to a file that is out of space.
[#7780]
- Change Berkeley DB so that
operations on databases opened in a non-transactional mode do not write
records into the database logs. [#7843]
- Fix a bug where Berkeley DB
could timeout waiting for locks (on Queue databases) during recovery.
[#7927]
- Fix a bug in truncating log
after recovery to a timestamp or replication-based recovery. [#8387]
- Fix a bug where recovery
can be slow if the log contains many opens of files which contain multiple
databases. [#8423]
- Fix a bug where a file id
could be used before its open was logged. [#8496]
- Fix a bug where recovery
would partially undo a database create if the transaction which created it
spanned log files and not all of the log files were present during
recovery. [#9039]
Memory Pool Subsystem Changes:
- Fix a bug where checksummed
files could not be read on different endian systems. [#6429]
- Fix a bug where read-only
databases were not mapped into memory but were instead read through the
Berkeley DB buffer cache. [#6671]
- Fix a bug where Berkeley DB
could loop infinitely if the cache was sized so small that all of its
pages were simultaneously pinned by the application. [#6681]
- Fix a bug where DbEnv.sync
could fail to write a page if another thread unpinned the page at the same
time and there were no other pages in that hash bucket. [#6793]
- Fix a bug where threads of
control may hang if multiple threads of control are opening and closing a
database at the same time. [#6953]
- Fix a bug where a database
created without checksums but later opened with checksums would result in
a checksum error. [#6959]
- Fix a bug where a
multi-process application suite could see incorrect data if one process
opened a non-checksummed database correctly and another process
subsequently opened the same database, specifying checksums. [#6959]
- Change to avoid database
open and flush when handles are discarded, if the handle was never used to
write anything. [#7232]
- Fix a bug where
applications dirtying the entire cache in a single database operation
would see large performance degradation. [#7273]
- Fix a bug where contention
in the buffer pool could cause the buffer allocation algorithm to
unnecessarily sleep waiting for buffers to be freed. [#7572]
Transaction Subsystem Changes:
- Fix a bug where disk write
errors in encrypted database environments, causing transaction abort,
could corrupt the log. [#6768]
- Fix a bug where
catastrophic recovery may fail on a log which has a prepared transaction
which aborted the allocation of a new page and was rolled forward
previously by another recovery session. [#6790]
- Fix a bug where a
transaction that contains a database truncate followed by page
allocations, may not properly undo the truncate if aborted. [#6862]
- Fix a bug which causes
Berkeley DB to checkpoint quiescent database environments. [#6933]
- Fix a bug where if a
transaction prepare fails while writing the prepare log record, and it
contains a subtransaction which did an allocation later, recovery of the
database may fail with a log sequence error. [#6874]
- Do not abort prepared but
not yet completed transactions when closing an environment. [#6993]
- Fix a bug where operations
on the source of a rename in the same transaction would fail. [#7537]
- Fix a bug where a parent
transaction which aborts when it tries to write its commit record could
fail with a log sequence error, if the parent transaction has an aborted
child transaction which allocated a new page from the operating system.
[#7251]
- Fix a bug where Berkeley DB
could try to abort a partial transaction because it contained a partial
subtransaction. [#7922]
- Fix a bug where Berkeley DB
could drop core when transactions were configured without locking support.
[#9255]
Utility Changes:
- Fix a bug where db_load
could core dump or corrupt record numbers by walking off the end of a
string. [#6985]
- Fix a bug where db_load
could run out of locks when loading large numbers of records. [#7173]
- Fix a bug where db_dump
could drop core when salvaging unaligned entries on a Btree page. [#7247]
- Fix a bug where hash
statistics did not include overflow items in the count of database data
elements. [#7473]
- Fix a bug where an
corruption in an overflow page list could cause DB->verify to
infinitely loop. [#7663]
- Fix a bug where verify
could display extraneous error messages when verifying a Btree with
corrupt or missing pages. [#7750]
- Fix a bug that could cause
the db_stat utility to display values larger than 100 for various
percentages. [#7779]
- Fix a memory overflow bug
in db_load. [#8124]
- Fix a minor leak when
verifying queue databases. [#8620]
Configuration, Documentation, Portability and Build Changes:
- Add support for a reduced
memory footprint build of the Berkeley DB library. [#1967]
- Change DB_SYSTEM_MEM on Windows
to fail immediately when opening an environment whose regions were deleted
on last close. [#4882]
- Update queue.h to current
FreeBSD version. [#5494]
- Support for and
certification under Tornado 2.2/VxWorks 5.5. [#5522]
- Add support for IBM OS/390 using
the IBM C compiler. [#6486]
- Specify -pthread as a
compile flag for Tru64 systems, not just as a linker flag. [#6637]
- Remove automatic aggregate
initialization for non-ANSI compilers. [#6664]
- Fix a link error
("GetLongPathNameA could not be located in the dynamic link library
KERNEL32.dll") that prevented Berkeley DB from loading on Windows NT.
[#6665]
- Remove use of U suffix in
crypto build to denote unsigned integers for non-ANSI compilers. [#6663]
- Fix Java API documentation
problems where API return values were int and should have been void, or
vice-versa. [#6675]
- Add an include of
<sys/fcntl.h> for old Solaris systems with the directio call.
[#6707]
- Fix Java API documentation
problem where the Db.associate call was missing a DbTxn handle. [#6714]
- Clean up source based on
gcc's -Wmissing-prototypes option. [#6759]
- Ignore pread/pwrite
interfaces on NCR's System V R 4.3 system. [#6766]
- Fix an interface
compatibility with Sendmail and Postfix releases. [#6769]
- Fix warnings when the Tcl
API was built without TEST_CONFIG defined. [#6789]
- Change Win32 mutexes to use
the shared code for all mutexes to fix handle leak. [#6822] [#6853]
- Fix the Windows/Tcl API
export list for Berkeley DB XML. [#6931]
- Add the --enable-mingw
configuration option to build Berkeley DB for MinGW. [#6973]
- Add a CPU pause to the
mutex spinlock code to improve performance on newer Pentium CPUs. [#6975]
- Upgrade read-only file
descriptors to read-write during checkpoint, it's an error to call
FlushFileBuffers on a read-only Windows file handle. [#7051]
- Fix configure so that Java
applications on HP/UX can access RPC environments. [#7066]
- Update Berkeley DB to use
libtool 1.5 to allow building of shared libraries on various platforms.
This should not be visible except for changes to the Makefile and internal
build procedures. [#7080]
- Fix a bug where the
configure script displayed incorrect default installation directory
information. [#7081]
- Fix a signed/unsigned
warning with some Windows compilers. [#7100]
- Fix macro redefinition
conflicts between queue.h and Vc7\PlatformSDK\Include\WinNT.h when
building with Visual Studio.NET 7.0. [#7103]
- Add a loop to retry system
calls that return EBUSY. Also limit retries on EINTR to 100 times. [#7118]
- Fix a bug in our use of
GetDiskFreeSpace that caused access violations on some versions of Windows
with DB_DIRECT_DB. [#7122]
- Fix a bug where regions in
system memory on Windows were incorrectly reinitialized because the magic
number was overwritten. [#7127]
- Change version provided to Tcl's
package system to reflect Berkeley DB's major and minor number. [#7174]
- Support for the Berkeley DB
Embedix port has been removed. [#7209]
- Merge all public C++
headers into db_cxx.h, which fixes name clashes between Berkeley DB
headers and system headers (specifically mutex.h). [#7221]
- Fix a bug where the
configured Makefile could try and build objects for which there were no
existing rules. [#7227]
- Port the ex_repquote
example to Windows. [#7328]
- Fix a race in the ARM/gcc
mutex code which could cause almost anything bad you can imagine. [#7468]
- Fix a bug where shared
region removal could hang. [#7613]
- Fix a bug so that when
using Java in Debug mode on Windows, automatically pick the Debug DLL.
[#7722]
- Fix configure
--disable-shared so that it now creates a Makefile that installs static
libraries that look the same as a regular shared build. This flag will
create a libdb<major>.<minor>.a and make a libdb.a that is a
symlink to it. [#7755]
- Add support for OS/390 2.10
and all versions of z/OS. [#7972]
- Support Java builds on
Windows with spaces in the project path. [#8141]
- Fix a bug where Berkeley DB
mutex locking code for OS X was not multi-processor safe. [#8255]
- Add an error to
DB_ENV->set_flags if the OS does not support Direct I/O. [#8596]
- Enable verbose error
logging from the test suite on Windows. [#8634]
- Fix a bug with DLL linking
on Cygwin under Windows. [#8628]
- Add support for JDK on
HP/UX. [#8813]
- Fix a bug where path names
longer than 2KB could cause processes to core dump. [#8886]
- Fix a bug in VxWorks when
yielding the CPU, so that we delay at least one tick. [#9061]