Release Notes -- Apache Jackrabbit Oak -- Version 1.1.4

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.1.4 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.0.7 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.1.4
---------------------

Sub-task

    [OAK-2282] - Make current testcases pass with new index
    implementation
    [OAK-2337] - improve connection handling
    [OAK-2353] - Support for "order by jcr:score descending" in lucene
    property index
    [OAK-2377] - Change log level in PropertyHistory

Bug

    [OAK-1782] - DiffCache not populated after cache miss
    [OAK-2056] - Optimize orderings by date fields
    [OAK-2192] - Concurrent commit during compaction results in mixed
    segments
    [OAK-2285] - Builder does not exist error during async index
    update
    [OAK-2312] - NodeStoreTest.moveToDescendant fails on
    MemoryNodeStore
    [OAK-2319] - UserProvider does not install autocreated items
    [OAK-2328] - add logging in OrderedContentMirrorStorateStrategy
    for better investigation
    [OAK-2330] - Field boost not working if the property for indexing
    is picked using aggregate index rules
    [OAK-2332] - LIRS cache: deadlock if a value loader access the
    cache
    [OAK-2335] - IndexPlanner does not return plan for mixin based
    queries
    [OAK-2336] - NodeDocument.getNodeAtRevision() may read too many
    revisions
    [OAK-2343] - Wrong handling of InterruptedException in
    BackgroundThread
    [OAK-2345] - Diff reads too many nodes
    [OAK-2346] -
    InitializerTest.testInitializerMongoWithoutInitialContent() fails
    [OAK-2347] - TarMK Cold Standby FSDS mirroring
    [OAK-2354] - Support comments anywhere in a SQL-2 statement
    [OAK-2355] - TarMK Cold Standby expose standby read timeout value
    [OAK-2356] - Logic for writing properties in
    SegmentWriter.writeNode looks off
    [OAK-2359] - read is inefficient when there are many split
    documents
    [OAK-2363] - NPE in DocumentNodeStore#retrieve for non existing
    checkpoint
    [OAK-2367] - Importing a group with random node name and members
    fails.
    [OAK-2368] - Property index: setting declaringNodeTypes to an
    empty array can break queries
    [OAK-2375] - Sporadic test failure of HeavyWriteIT.heavyWrite on
    Travis
    [OAK-2380] - SegmentReferenceLimitTestIT does not close FileStore

Improvement

    [OAK-1723] - Text content should not be stored as part of Index
    data
    [OAK-2205] - Allow native query to be run against specifc property
    index
    [OAK-2304] - Not log very common queries
    [OAK-2333] - SegmentMK startup slow with large journals
    [OAK-2334] - Inspect any revision with SegmentMK explorer
    [OAK-2342] - Clean up collision markers
    [OAK-2344] - Permission validation with Node.setPrimaryType
    [OAK-2348] - Pass over name and definitions to
    StoreStrategy.update
    [OAK-2350] - Improve performance of user query with scope set
    [OAK-2351] - Property name regex should only be applied on
    property name
    [OAK-2361] - MBean to expose DocumentNodeStore runtime state
    [OAK-2362] - Remove entryCount from NodeType Index
    [OAK-2365] - Refactor node store tests
    [OAK-2373] - Move FixturesHelper into common

New Feature

    [OAK-2278] - Same Lucene index to support both property
    restrictions and fulltext constraints
    [OAK-2323] - SegmentMK consistency check
    [OAK-2371] - Helper class for CI configurations

Task

    [OAK-2168] - Make SolrIndex implement AdvanceQueryIndex
    [OAK-2352] - Release oak-run as part of Oak release

In addition to the above-mentioned changes, this release contains
all changes included in previous Apache Jackrabbit Oak 1.0.x releases.

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/
