Berkeley DB Java Edition 1.5.1 Change Log

Changes since Alpha Release 1.5.0.

For additional details, please see the documentation and Release Notes included in your download package or on our website.

Log File On-Disk Format Changes:


New Features:


General Environment Changes:

  1. If the host machine has a hard failure, it is possible that the JE log will be incompletely flushed, resulting in a checksum error at the end of the log. JE was throwing in such a case, but now handles the error quietly and truncates the bad portion at the end of the log. [#10409]

  2. Calling Thread.interrupt() on a thread in the midst of NIO I/O activity may cause shutdown of various I/O resources. This SR improved JE's ability to catch and handle IOExceptions provoked by thread interrupts because these exceptions were going on to cause secondary failures. However, often these exceptions have been converted to and the environment may become unusable if i/o is interrupted.
    In general, Thread.interrupt() is not recommended for a active JE thread if the goal is thread coordination. Instead, applications should use other mechanisms like Object notify(), wait() to coordinate threads.[#10463]

  3. The je.log.directNIO boolean environment property was added. This property defaults to false so that ordinary memory buffers instead of direct memory buffers are used when performing NIO operations.
    Although direct memory buffers are supposed to provide better NIO performance, they present administrative problems on some platforms. For example, on Windows the amount of direct memory has to be separately configured when running the JVM. On other platforms (e.g., MacOS) the amount of direct memory cannot be configured. Direct memory buffers do not provide a significant performance improvement for JE on JDK 1.4.2. [#10465]

  4. Fix a memory leak that will cause the application to run out of memory if both these conditions are met: a) a JE environment is opened and closed repeatedly in the same process, and b) the environment is opened read-only or one of the deamon threads is explicitly disabled. [#10504]

  5. Add a workround for a MacOS bug. The MacOS JVM reports Runtime.maxMemory as 64 MB more than it actually is. We calculate our default cache size as a percentage of maxMemory. With the default percentage (60%) we calculate a size slightly higher than the actually memory available, so we run out of memory trying to fill our cache. [#10513]

  6. Fix a bug in the collections API where a deadlock exception could leave a cursor open. The bug manifested when a deadlock occurred during the initialization of a StoredIterator. [#10516]

  7. Fix a bug where cleaning a log with a deleted record could later cause a LogFileNotFoundException when scanning through keys in the same range as the key of the deleted record. This only occurred if the compressor did not run in between the cleaning and scanning operations. [#10553]

  8. Fix a bug where cleaning or recovering a duplicate record could
    cause a ClassCastException. This happened when all duplicates for a key were deleted, the compressor ran, and then a single datum was inserted. [#10597]

  9. Fix a bug in foreign key delete processing where only the first key in a secondary duplicate set was being nullified or deleted. [#10629]

  10. Two cleaner improvements were made: 1- The cleaner more effectively identifies and cleans obsolete internal nodes, and 2- less checkpointing is performed by the cleaner. These changes can cause a dramatic improvement in the cleaning of very large databases, databases where checkpoints occur often, and batch mode cleaning. [#10631], [#10395]

  11. The cleaner will more correctly estimate obsolete log entries, and therefore clean more effectively, when a checkpoint is not performed because the environment is not closed normally before the process ex [#10395]

API Changes:

    Utility Changes:


    Configuration, Documentation, and Build Changes: