Akiban Persistit 3.2.2

Milestone information

Akiban Persistit
Nathan Williams
Release registered:
No. Drivers cannot target bugs and blueprints to this milestone.  

Download RDF metadata


Assigned to you:
No blueprints or bugs assigned to you.
4 Peter Beaman
No blueprints are targeted to this milestone.
4 Fix Released

Download files for this release

After you've downloaded a file, you can verify its authenticity using its MD5 sum or signature. (How do I verify a download?)

File Description Downloads
download icon akiban-persistit-3.2.2-source.tar.gz (md5, sig) Akiban PersistIT 3.2.2 Source (tar.gz) 378
last downloaded 15 weeks ago
download icon akiban-persistit-3.2.2-source.zip (md5, sig) Akiban PersistIT 3.2.2 Source (zip) 377
last downloaded 15 weeks ago
download icon akiban-persistit-3.2.2.tar.gz (md5, sig) Akiban PersistIT 3.2.2 Binary (tar.gz) 381
last downloaded 15 weeks ago
download icon akiban-persistit-3.2.2.zip (md5, sig) Akiban PersistIT 3.2.2 Binary (zip) 395
last downloaded 15 weeks ago
Total downloads: 1,531

Release notes 

Akiban Persistit Version 3.2.2

Release Date
November 30, 2012

Better support for Spring Framework. Fix rare rare but serious bugs found in
stress tests. Fix issue related to locale and make sure Persistit builds

See http://www.akiban.com/akiban-persistit for a summary of features and
benefits, licensing information and how to get support.

Users Guide: http://www.akiban.com/ak-docs/admin/persistit

JavaDoc: http://www.akiban.com/sites/all/libraries/persistit-api/index.html

Building Akiban-Persistit
Use Maven (maven.apache.org) to build Persistit.

To build:

 mvn install

The resulting jar files are in the target directory. To build the Javadoc:

 mvn javadoc:javadoc

The resulting Javadoc HTML files are in target/site/apidocs.

Building and Running the Examples
Small examples are located in the examples directory. Each has a short
README file describing the example, and an Ant build script
(http://ant.apache.org). After building the main akiban-persisit jar file using
Maven, you may run:

 ant run

in each of the examples subdirectories to build and run the examples.

Buffer Pool Configuration
For optimal performance, proper configuration of the Persistit buffer pool is
required. See section "Configuring the Buffer Pool" in the configuration
document http://www.akiban.com/ak-docs/admin/persistit/Configuration.html

NOTE: Especially when used with multi-gigabyte heaps, the default Hotspot
JVM server heuristics are be suboptimal for Persistit applications. Persistit
is usually configured to allocate a large fraction of the heap to Buffer
instances that are allocated at startup and held for the duration of the
Persistit instance. For efficient operation, all of the Buffer instances must
fit in the tenured (old) generation of the heap to avoid very significant
garbage collector overhead. Use either -XX:NewSize or -Xmn to adjust the
relative sizes of the new and old generations.

Resolved Issues

InUseExceptions in stress tests
Stress tests occasionallyexperienced InUseExceptions, usually signifying a
deadlock. Two mechanismswere discovered and fixed. Note that an InUseException
occurs when an attempt to lock a resource such as a Tree or a Buffer is
unsatisfied for 60 seconds (the current default timeout).This exception can
occur for reasons other than deadlock such as an extraordinarily slow I/O
operation or as a result of a debug breakpoint in sensitive code.

Persistit build success is sensitive to locale
One Persistit unit test depended on locale-specific text formatting, and
therefore failed when built in a locale which does not conform to en_US
formatting rules.

Design flaw makes Persistit needlessly difficult to use in Spring Framework
Persistit initialization API was modified to make it easy to create and use a
Persistit instance within Spring Framework.

isNull(true) leaves Value in unsafe state for stream mode get
The implementation of isNull(boolean) added in Version 3.2.1 contained a bug
that made stream-mode get operations fail.

Stress tests induce RebalanceException
Code was added to handle a rare situation in which removing a key at the
boundary between two pages requires one of the pages to split. Formerly this
condition was not handled properly and instead caused the application thread to
receive a RebalanceException.

Changes and New Features

Persistit 3.2.2 - Spring Framework
Prior to this release Persistit was needlessly difficult to configure and
initialize within Spring Framework. This version provides new setter methods
and constructors on the com.persistit.Persistit object to allow easy injection
of configuration properties and make it possible to inject a fully instantiated
Persistit instance within a Spring project. In addition, new methods were added
to the com.persistit.Configuration class to simplify supplying buffer pool and
initial volume specifications. Three of the initialize() methods were

This release also adds a new sample application that shows how a configured
Persistit instance can be created. For Maven users, note that the pom.xml file
now includes a dependency on Spring Framework in test scope only; Persistit can
still be deployed without any external dependencies.

Persistit 3.2.2 - Bug Fixes
Version 3.2.2 corrects two issues that were identified through stress tests.
For this release we added hundreds of hours of stress-testing experience and
will continue to invest in ongoing testing.

This version also fixes a unit test with string literals containing numbers
formatted according to en_US conventions. The test has been corrected and the
Persistit build has been tested in several locales.

Known Issues

Transactional Tree Management
All operations within Trees such as store, fetch, remove and traverse are
correctly supported within transactions. However, the operations to create and
delete Tree instances currently do not respect transaction boundaries. For
example, if a transaction creates a new Tree, it is immediately visible within
other Transactions and will continue to exist even if the original transaction
aborts. (However, records inserted or modified by the original transaction will
not be visible until the transaction commits.) Prior to creating/removing
trees, transaction processing should be quiesced and allowed to complete.

Out of Memory Error, Direct Memory Buffer

Out of Memory Error, Direct Memory Buffer. Can cause failed transactions under
extreme load conditions as a result of threads getting backed up writing to
the journal file. However, this error is transient and recoverable by by
retrying the failed transaction.

* Workaround: Ensure your application has the ability to retry failed

Tree#getChangeCount may return inaccurate result

The getChangeCount method may return inaccurate results as its not currently
transactional. The primary consumer is the PersistitMap. As a result of this
bug Persistit may not generate java.util.ConcurrentModificationException when
it is supposed to.

Multi-Version-Values sometimes not fully pruned

Multi-version values are not always pruned properly causing volume growth. The
number of MVV records and their overhead size can be obtaining by running the
IntegrityCheck task.

* Workaround 1: Run the IntegrityCheck task (CLI command icheck) with the -P
option which will prune the MVVs. This will remove obsolete MVV instances and
in many cases free up pages in which new data can be stored. However, it will
not reduce the actual size of the volume file.

* Workaround 2: To reduce the size of the volume you can use the CLI commands
save and load to reload the data into a newly created volume file. See
http://www.akiban.com/ak-docs/admin/persistit/Management.html#management for
more information about these operations.

Note: although the methods described here may be helpful in reducing MVV
clutter, Persistit Version 3.2.0 significantly improves the algorithms used to
prune obsolete versions and the techniques described here are unlikely to be


This release does not have a changelog.

0 blueprints and 4 bugs targeted

Bug report Importance Assignee Status
1076517 #1076517 InUseExceptions in stress tests 3 High Peter Beaman  10 Fix Released
1079288 #1079288 Persistit build success is sensitive to locale 3 High Peter Beaman  10 Fix Released
1079406 #1079406 Design flaw makes Persistit difficult to use in Spring Framework 3 High Peter Beaman  10 Fix Released
1081659 #1081659 isNull(true) leaves Value in unsafe state for stream mode get 3 High Peter Beaman  10 Fix Released
This milestone contains Public information
Everyone can see this information.