
Release Notes -- Apache Jackrabbit Oak -- Version 1.0.13

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.0.13 is a patch release that contains fixes and
improvements over Oak 1.0. Jackrabbit Oak 1.0.x releases are considered
stable and targeted for production use.

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.0.13
---------------------

Sub-task

    [OAK-2395] - RDB: MS SQL Server support
    [OAK-2404] - Provide more information in SegmentNotFoundException
    [OAK-2628] - RDB: convenience tool for dumping table creation
    statements
    [OAK-2637] - update Postgres JDBC version to 9.4
    [OAK-2673] - Resolve add-add, delete-delete merge conflict for
    empty hidden docs
    [OAK-2781] - log node type changes and the time needed to traverse
    the repository

Bug

    [OAK-1589] - MongoDocumentStore fails to report error for keys
    that are too long
    [OAK-1985] - TokenLoginModule can't handle case insensitive
    userids
    [OAK-2036] - getPlan() output for NodeTypeIndex doesn't indicate
    the index type used
    [OAK-2224] - Increase the threshold for warning in PathIterator
    [OAK-2295] - Using "order by jcr:score" slows down queries by a
    few orders of magnitude
    [OAK-2375] - Sporadic test failure of HeavyWriteIT.heavyWrite on
    Travis
    [OAK-2420] - DocumentNodeStore revision GC may lead to NPE
    [OAK-2549] - Persistent Cache: support append-only mode
    [OAK-2557] - VersionGC uses way too much memory if there is a
    large pile of garbage
    [OAK-2562] - DiffCache is inefficient
    [OAK-2565] - Duplicate conditions should be removed (where x=1
    or/and x=1)
    [OAK-2566] - PropertyRestriction.isNotNullRestriction does not
    take "list" into account
    [OAK-2576] - ServiceEvent on each session login/logout
    [OAK-2577] - LuceneSupportTest fails
    [OAK-2582] - RDB: improve memory cache handling
    [OAK-2584] - Row estimator should have a threshold
    [OAK-2600] - DocumentNodeStoreMBean not being registered with the
    JMX in branch
    [OAK-2603] - Failure in one of the batch in VersionGC might lead
    to orphaned nodes
    [OAK-2607] - OakSolrConfigurationProviderService wrongly uses
    ignoredProperties for usedProperties
    [OAK-2616] - GCMonitorMBean#getRepositorySize reports incorrect
    values
    [OAK-2639] - Incorrect check for log level in PerfLogger
    [OAK-2642] - DocumentNodeStore.dispose() may leave repository in
    an inconsistent state
    [OAK-2648] - ObservationTest.observationDispose() restarts
    repository after test finished
    [OAK-2649] - IndexCopier might create empty files in case of error
    occuring while copying
    [OAK-2662] - SegmentOverflowException in HeavyWriteIT on Jenkins
    [OAK-2666] - LMSEstimator update resetting weights
    [OAK-2670] - Online Backup of segment store fails on Windows
    because the journal file is locked exclusively.
    [OAK-2695] - DocumentNodeStore.dispatch() may pass null to
    NodeStateDiff
    [OAK-2709] - Misleading log message from IndexCopier
    [OAK-2716] - Background operation lock not released when
    DocumentNodeStore is closed
    [OAK-2720] - Misleading traversal warning message while performing
    query
    [OAK-2732] - NPE in lucene search
    [OAK-2740] - TreeTypeProvider treates optimized node type
    definition info as Ac-Content
    [OAK-2751] - Test failures with EnableConcurrentAddRemove feature
    enabled on 1.0 branch
    [OAK-2752] - SegmentIdTable can sometimes hang when calling
    getSegmentId(msb, lsb)
    [OAK-2759] - Empty commit causes deserialization issue in
    LocalDiffCache leading to cache corruption
    [OAK-2780] - DocumentMK.commit() does not check if node exists on
    property patch
    [OAK-2782] - Tika not able to load class in case of custom config

Improvement

    [OAK-2228] - Changing the query traversal limit should affect
    already started queries
    [OAK-2230] - Execution Stats for async indexing
    [OAK-2448] - Do not create nodeChildren cache entry for leaf
    [OAK-2464] - Optimize read of known non-existing children
    [OAK-2499] - Expose mongo and db versions for reporting purposes
    [OAK-2570] - Open indexes in IndexTracker non blocking way
    [OAK-2571] - Protect the persistent cache against Thread.interrupt
    [OAK-2572] - Include cache invalidation stats in logs related to
    background operations
    [OAK-2579] - RepositoryManager must not register
    WhiteboardExecutor with Oak
    [OAK-2587] - observation processing too eager/unfair under load
    [OAK-2589] - Provide progress indication when reindexing is being
    peformed
    [OAK-2590] - IndexCopier Error occurred while removing deleted
    files from Local
    [OAK-2591] - Invoke indexUpdate only when new Document are added
    in LuceneIndexEditor
    [OAK-2594] - Backport spellcheck support to 1.0
    [OAK-2595] - High memory consumption of CompactionGainEstimate
    [OAK-2601] - PerfLogger for NodeObserver.contentChanged()
    [OAK-2602] - [Solr] Cost calculation takes time with solr pings
    even when not fulfilling query
    [OAK-2604] - Backport LMSEstimator and sorting capabilities to
    branch 1.0
    [OAK-2608] - Avoid indexing user/group/uuid props by default
    [OAK-2614] - Timeout for MongoDB query
    [OAK-2624] - Move out non essential task processing from
    DocumentNodeStore background thread
    [OAK-2654] - SegmentIdTable too eager to refresh
    [OAK-2668] - Ability to disable index hints for MongoDB
    [OAK-2669] - Use Consolidated diff for local changes with
    persistent cache to avoid calculating diff again
    [OAK-2671] - Persistent cache: use different files in tests
    [OAK-2708] - Enable CopyOnRead feature for Lucene indexes by
    default
    [OAK-2737] - RepositoryUpgrade.copy() should allow custom commit
    hooks
    [OAK-2738] - Possible StackOverflowException with many "or"
    conditions
    [OAK-2743] - Log time taken in couple of places in indexing
    [OAK-2753] - Use increasing batch size for sorted queries in
    LucenePropertyIndex
    [OAK-2755] - Consolidated JMX view of all EventListener related
    statistics
    [OAK-2769] - Add progress log to VersionGC in DocumentNodeStore

New Feature

    [OAK-2371] - Helper class for CI configurations

Task

    [OAK-2168] - Make SolrIndex implement AdvanceQueryIndex
    [OAK-2578] - Add Sling OSGi Mocks to parent pom
    [OAK-2583] - Use PerfLogger in DocumentNodeStoreBranch

Test

    [OAK-2696] - Maven build on travis too verbose

Wish

    [OAK-1859] - Migration from TarMK to MongoMK
   
In addition to the above-mentioned changes, this release contains
all changes included in previous Apache Jackrabbit Oak 1.0.x releases.

Please note, the backported RDB support for the DocumentNodeStore is considered
experimental at this point and is not yet ready for production use. Feel free 
to try it out and report any issues you may see to the Oak developers.

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/
