[Berkeley DB Announce] Patch Release: Berkeley DB Java Edition 4.0.103

Announcements related to the Berkeley DB product family. bdb at oss.oracle.com
Sat May 1 15:32:45 PDT 2010


Berkeley DB Java Edition 4.0.103
    http://www.oracle.com/database/berkeley-db/
    http://www.oracle.com/technology/products/berkeley-db/
    http://www.oracle.com/technology/products/berkeley-db/je/

Berkeley DB Java Edition 4.0.103 is a patch release consisting of fixes for a number of issues. We strongly recommend that users of the 4.0.x version upgrade to this release.

These fixes include:

[#18430] - Added the LocalCBVLSN field for replication group members to the information displayed by com.sleepycat.je.rep.util.DbGroupAdmin -dumpGroup or through the JMX MBean dumpReplicationState() operation. The LocalCBVLSN field is an indicator of the progress a replicated node has made in executing replicated operations.
Users can monitor the LocalCBVLSN values for group members as a way of gauging if the group is executing at an even pace. The values need not be identical, because they are only update periodically, but a large or growing discrepancy indicates that some group members are lagging.


[#18410] - Several new com.sleepycat.je.CacheMode enumeration values have been added which can help to improve cache memory usage and reduce Java GC costs for some applications:
MAKE_COLD
EVICT_LN
EVICT_BIN
The CacheMode is configurable using new database and environment properties:

DatabaseConfig.setCacheMode, getCacheMode
EnvironmentConfig.setCacheMode, getCacheMode
Note that the MAKE_COLD mode has been enhanced since its introduction in JE 3.3. In JE 4.0, this mode will perform explicit eviction when the JE cache is full, and blocking between threads may be reduced.

See the CacheMode Javadoc for more information.


[#18512] - Several new statistics have been added com.sleepycat.je.EnvironmentStats to support the new CacheMode functionality and to make it easier to understand caching behavior.
nCachedBINs and nCachedUpperINs show the proportion types of btree nodes in cache.
nBINsFetch, nBINsFetchMiss, nUpperINsFetch, nUpperINsFetchMiss provide a more detailed look at cache hit/miss ratio
nBINsEvictedCACHEMODE, nBINsEvictedCRITICAL, nBINsEvictedMANUAL, nBINsEvictedEVICTORTHREAD, nUpperINsEvictedCACHEMODE, nUpperINsEvictedCRITICAL, nUpperINsEvictedMANUAL, nUpperINsEvictedEVICTORTHREAD provide some guidance about the effectiveness of different CacheModes.

Two new properties: com.sleepycat.je.rep.ReplicationConfig.REPLICA_TIMEOUT and com.sleepycat.je.rep.ReplicationConfig.FEEDER_TIMEOUT have been defined to permit application level control of connection timeouts. (4.0.100)

[#18180] - Fixed a bug which can cause Database.count() to return incorrect values when an environment is opened read-only.

[#18277] - JE applications run on the Resin application server could experience a NullPointerException at startup. The problem occurs because Resin's implementation of java.util.logging.Loggers.getHandlers() can return null instead of an empty array. A check for a null return was added. The problem was originally reported on the OTN forum.

[#18334] - Opening a read-only environment with a non default value for the com.sleepycat.je.util.FileHandler.level property resulted in a NullPointerException. In addition, output to the je.info file was disabled for read only environments. This has been fixed.

[#18396] - Fixed a bug in Database.preload() which would cause a latch on a database root node to be held in the face of the cache filling or preload taking too much time.

[#18462] - Fixed a bug where the cache usage was not correctly calculated when using the -XX:+UseCompressedOops JVM option.

[#18475] - Replicated applications running with the property je.cleaner.threads set to a value greater than 1, where the application does not fit in cache, can experience a deadlock which shows the following stacktraces. This has been fixed.
"Cleaner-1":
at com.sleepycat.je.cleaner.UtilizationProfile.putFileSummary(UtilizationProfile.java:846)
- waiting to lock <0xf00db530> (a com.sleepycat.je.cleaner.UtilizationProfile)
at com.sleepycat.je.cleaner.UtilizationProfile.flushFileSummary(UtilizationProfile.java:835)
at com.sleepycat.je.cleaner.UtilizationTracker.evictMemory(UtilizationTracker.java:95)
at com.sleepycat.je.dbi.EnvironmentImpl.specialEviction(EnvironmentImpl.java:2379)
at com.sleepycat.je.evictor.PrivateEvictor.startBatch(PrivateEvictor.java:96)
at com.sleepycat.je.evictor.Evictor.evictBatch(Evictor.java:306)
at com.sleepycat.je.evictor.Evictor.doEvict(Evictor.java:245)
- locked <0xf0222028> (a com.sleepycat.je.evictor.PrivateEvictor)
at com.sleepycat.je.evictor.Evictor.doCriticalEviction(Evictor.java:273)
at com.sleepycat.je.dbi.EnvironmentImpl.criticalEviction(EnvironmentImpl.java:2360)
at com.sleepycat.je.cleaner.FileProcessor.processFile(FileProcessor.java:502)

  ...

Cleaner-4:
at com.sleepycat.je.evictor.Evictor.doEvict(Evictor.java:229)
- waiting to lock <0xf0222028> (a com.sleepycat.je.evictor.PrivateEvictor)
at com.sleepycat.je.evictor.Evictor.doCriticalEviction(Evictor.java:273)
at com.sleepycat.je.dbi.EnvironmentImpl.criticalEviction(EnvironmentImpl.java:2360)
at com.sleepycat.je.dbi.CursorImpl.criticalEviction(CursorImpl.java:295)
at com.sleepycat.je.Cursor.beginMoveCursor(Cursor.java:2704)
  ...
at com.sleepycat.je.rep.vlsn.VLSNIndex.getLTEFileNumber(VLSNIndex.java:675)
at com.sleepycat.je.rep.impl.node.GlobalCBVLSN.getCleanerBarrierFile(GlobalCBVLSN.java:100)
at com.sleepycat.je.rep.impl.node.RepNode.getCleanerBarrierFile(RepNode.java:1287)
at com.sleepycat.je.rep.impl.RepImpl.getCleanerBarrierStartFile(RepImpl.java:1156)
at com.sleepycat.je.cleaner.UtilizationProfile.getBestFileForCleaning(UtilizationProfile.java:289)
- locked <0xf00db530> (a com.sleepycat.je.cleaner.UtilizationProfile)
at com.sleepycat.je.cleaner.FileSelector.selectFileForCleaning(FileSelector.java:225)
at com.sleepycat.je.cleaner.FileProcessor.doClean(FileProcessor.java:202)
- locked <0xf0035cd0> (a com.sleepycat.je.cleaner.FileProcessor)
at
	    com.sleepycat.je.cleaner.FileProcessor.onWakeup(FileProcessor.java:140)

[#18475] - Replicated applications with a high level of cache eviction can experience a deadlock where the checkpointer thread displays the following type of stacktrace. This has been fixed.
"Checkpointer" daemon prio=3 tid=0x08518000 nid=0x1d waiting on condition [0xedca8000]
- parking to wait for  <0xf0211680> (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync)
at com.sleepycat.je.tree.IN.latch(IN.java:332)
          ...
at com.sleepycat.je.evictor.Evictor.doEvict(Evictor.java:245)
- locked <0xf01809c0> (a com.sleepycat.je.evictor.PrivateEvictor)
          ...
at com.sleepycat.je.rep.vlsn.VLSNTracker.flushToDatabase(VLSNTracker.java:366)
- locked <0xf018e510> (a com.sleepycat.je.rep.vlsn.VLSNTracker)
          ...
at com.sleepycat.je.rep.impl.RepImpl.preCheckpointEndFlush(RepImpl.java:656)
at com.sleepycat.je.recovery.Checkpointer.doCheckpoint(Checkpointer.java:490)

[#18504] - Fixed a bug which caused an IllegalArgumentException to be thrown when parsing various JE parameters if the default language was not English (e.g.if it was set to Turkish). Thanks to "Mike" on OTN for reporting this.

[#18520] - Fixed a bug in DbCacheSize that caused a slight overestimation of memory used by the Btree. This utility now prints out detailed memory usage for each level in the Btree.

[#18524] - A replicated environment could very rarely experience this exception, which was due to an incorrect assertion check. The assertion has been fixed.
com.sleepycat.je.EnvironmentFailureException: (JE 4.0.97) Locker:
com.sleepycat.je.txn.BasicLocker UNEXPECTED_STATE: Unexpected internal
state, may have side effects.

at com.sleepycat.je.EnvironmentFailureException.unexpectedState(EnvironmentFailureException.java:376)
at com.sleepycat.je.txn.LockManager.lock(LockManager.java:262)
at com.sleepycat.je.txn.BasicLocker.lockInternal(BasicLocker.java:134)
at com.sleepycat.je.txn.Locker.nonBlockingLock(Locker.java:487)
at com.sleepycat.je.tree.MapLN.isEvictable(MapLN.java:174)
at com.sleepycat.je.tree.BIN.evictInternal(BIN.java:1004)
at com.sleepycat.je.tree.BIN.evictLNs(BIN.java:965)
at com.sleepycat.je.evictor.Evictor.evictIN(Evictor.java:820)
   ...

[#18554] - Fixed a bug where a Replica could fail to detect that it had lost its connection to the Master when its network cable was unplugged. As a result, an election would not be initiated by the Replica.

[#18558] - The directions in com.sleepycat.je.rep.RollbackProhibitedException and com.sleepycat.je.util.DbTruncateLog were not clear enough about how to handle a RollbackProhibitedException, and have been improved. DbTruncateLog itself had a bug which made it quietly skip the log truncation.

[#18594] - Fixed a bug that causes an internal RefreshException to be thrown when calling com.sleepycat.persist.EntityStore.getPrimaryIndex. This occurs only under these conditions:
on a Replica node in a replicated environment, and
if the primary index is created on the Master after the entity store has been opened on the Replica. (4.0.101)

[#18594] - Fixed a bug that causes an NullPointerException to be thrown when calling com.sleepycat.persist.EntityStore.getPrimaryIndex. This occurs only under these conditions:
on a Replica node in a replicated environment, and
if the primary key uses a sequence, and
if the primary index has not been created on the Master, and
if another primary index with a sequence has been previously created on the Master. (4.0.102)

[#18567] - Fix a bug that causes the following exception under rare conditions when calling Database.sync for a deferred write database.
 java.lang.IndexOutOfBoundsException
 at com.sleepycat.bind.tuple.TupleInput.readBoolean(TupleInput.java:186)
 at com.sleepycat.je.cleaner.PackedObsoleteInfo.countObsoleteInfo(PackedObsoleteInfo.java:60)
 at com.sleepycat.je.log.LogManager.serialLogInternal(LogManager.java:671)
 at com.sleepycat.je.log.SyncedLogManager.serialLog(SyncedLogManager.java:40)
 at com.sleepycat.je.log.LogManager.multiLog(LogManager.java:388)
 at com.sleepycat.je.recovery.Checkpointer.logSiblings(Checkpointer.java:1285)
(4.0.102)


Find the complete list of changes in the change log.
    http://www.oracle.com/technology/documentation/berkeley-db/je/changeLog.html

Read the detailed product documentation included in the download package or on the web.
    http://www.oracle.com/technology/documentation/berkeley-db/je/
    http://download.oracle.com/docs/cd/E17277_01/html/toc.htm

Download the source code.
    http://download.oracle.com/berkeley-db/je-4.0.103.zip
    http://download.oracle.com/berkeley-db/je-4.0.103.tar.gz
    http://download.oracle.com/maven/com/sleepycat/je/4.0.103/je-4.0.103.pom

Review the frequently asked questions (FAQs):
    http://www.oracle.com/technology/products/berkeley-db/faq/je_faq.html

Then join OTN and participate in the Berkeley DB JE Support Forum discussions. Our engineering and support staff are highly active on these forums, if you have questions please ask them there first.
    http://forums.oracle.com/forums/forum.jspa?forumID=273

For further information, or questions about licensing and sales of JE, please contact us at:
    mailto:berkeleydb-info_us at oracle.com


Thank you for your support of Berkeley DB Java Edition.

-greg

Greg Burd | Product Manager | Oracle Berkeley DB



More information about the BDB mailing list