Release Notes -- Apache Jackrabbit Oak -- Version 1.5.6

Introduction
------------

Jackrabbit Oak is a scalable, high-performance hierarchical content
repository designed for use as the foundation of modern world-class
web sites and other demanding content applications.

Apache Jackrabbit Oak 1.5.6 is an unstable release cut directly from
Jackrabbit Oak trunk, with a focus on new features and other
improvements. For production use we recommend the latest stable 1.4.x
release.

The Oak effort is a part of the Apache Jackrabbit project.
Apache Jackrabbit is a project of the Apache Software Foundation.

Changes in Oak 1.5.6
---------------------

Technical task

    [OAK-4200] - [BlobGC] Improve collection times of blobs available
    [OAK-4477] - RDBDatasourceFactory should use pool config similar
    to sling datasource defaults
    [OAK-4539] - Calculate children cache entry on commit
    [OAK-4554] - RDBBlobStoreTest should use RDBDatasourceWrapper
    [OAK-4557] - RDBPreparedStatementWrapper: do not hide
    implementation bugs
    [OAK-4559] - RDB*Store: failures with Tomcat JDBC pool's
    StatementCache interceptor
    [OAK-4562] - BasicDocumentStore max id test might return
    misleading results

Bug

    [OAK-4518] - ConcurrentAddReferenceTest fails occasionally
    [OAK-4532] - race-condition in commit-rate-limiter
    [OAK-4544] - Fix failing test
    DataStoreCheckTest.testMissingOpParams()
    [OAK-4548] - SegmentDataStoreBlobGCIT failures
    [OAK-4552] - Checkpoints.getOldestRevisionToKeep() returns newest
    valid revision
    [OAK-4565] - S3Backend fails to upload large metadata records
    [OAK-4568] - JournalEntry.applyTo() creates complete change tree
    in memory
    [OAK-4571] - consolidated listener stats confuses
    cluster-external/local flags
    [OAK-4572] - Overflow to disk threshold too high

Improvement

    [OAK-4512] - Detect and log commits to the read-only stores
    [OAK-4528] - diff calculation in DocumentNodeStore should try to
    re-use journal info on diff cache miss
    [OAK-4533] - make DELAY_THRESHOLD & MAX_DELAY of ChangeProcessor
    configurable
    [OAK-4534] - add trace logging to CommitRateLimiter
    [OAK-4540] - Cache update blocks new commits
    [OAK-4542] - PerfLogger should also allow a threshold to log at
    INFO
    [OAK-4545] - Configurable maxBackOffMillis
    [OAK-4553] - Retain journal entries for valid checkpoints
    [OAK-4556] - Track branch on newBranchCommit()
    [OAK-4563] - Specify thread pool name which should be used by
    Async Indexing task
    [OAK-4564] - Use Lucene index to look for long-named nodes in JCR2
    upgrade
    [OAK-4567] - Define oak:Resource nodetype as non referenceable
    alternative to nt:resource
    [OAK-4569] - Clean-up the oak-upgrade dependencies
    [OAK-4573] - S3 fetching record leads to multiple calls and
    background download
    [OAK-4574] - [BlobGC] Remove adding of paths in file maintained
    for blob references
    [OAK-4578] - Clarify weight related methods/parameters/arguments
    of the LIRS cache

Task

    [OAK-3211] - Document External Identity Management
    [OAK-4551] - Update Oak to Jackrabbit 2.13.1

In addition to the above-mentioned changes, this release contains
all changes included up to the Apache Jackrabbit Oak 1.4.x release.

For more detailed information about all the changes in this and other
Oak releases, please see the Oak issue tracker at

  https://issues.apache.org/jira/browse/OAK

Release Contents
----------------

This release consists of a single source archive packaged as a zip file.
The archive can be unpacked with the jar tool from your JDK installation.
See the README.md file for instructions on how to build this release.

The source archive is accompanied by SHA1 and MD5 checksums and a PGP
signature that you can use to verify the authenticity of your download.
The public key used for the PGP signature can be found at
http://www.apache.org/dist/jackrabbit/KEYS.

About Apache Jackrabbit Oak
---------------------------

Jackrabbit Oak is a scalable, high-performance hierarchical content
repository designed for use as the foundation of modern world-class
web sites and other demanding content applications.

The Oak effort is a part of the Apache Jackrabbit project.
Apache Jackrabbit is a project of the Apache Software Foundation.

For more information, visit http://jackrabbit.apache.org/oak

About The Apache Software Foundation
------------------------------------

Established in 1999, The Apache Software Foundation provides organizational,
legal, and financial support for more than 140 freely-available,
collaboratively-developed Open Source projects. The pragmatic Apache License
enables individual and commercial users to easily deploy Apache software;
the Foundation's intellectual property framework limits the legal exposure
of its 3,800+ contributors.

For more information, visit http://www.apache.org/
