Release Notes -- Apache Jackrabbit Oak -- Version 1.5.2

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

Technical task

    [OAK-3840] - Clean up the FileStore constructor
    [OAK-4184] - DocumentNodeStore and DocumentMK.Builder should allow
    read-only mode
    [OAK-4190] - DocumentMK: refactor RDB-specific code
    [OAK-4193] - RDBBlobStore: logging for garbage collection has
    parameters reversed
    [OAK-4199] - RDBBlobStore: garbage collection fails to delete DATA
    records when there was subsequent blobstore activity
    [OAK-4203] - ExternalSortTest doesn't cleanup temp files
    [OAK-4204] - GarbageCollectorFileState.copy() leaks
    FileOutputStream
    [OAK-4205] - SegmentGraphTest doesn't correctly delete the
    temporary directory on cleanup
    [OAK-4206] - JournalReaderTest creates multiple temporary files
    and doesn't delete them
    [OAK-4207] - TarWriterTest creates a temporary TAR file that is
    never deleted
    [OAK-4208] - Unit and integration tests in oak-segments don't
    clean up after test data
    [OAK-4209] - FileStoreStatsTest doesn't close the temporary
    FileStore instances
    [OAK-4210] - JournalEntryTest doesn't close a JournalReader at the
    end of the test
    [OAK-4213] - IndexCopierTest#basicTestWithFS leaves temp files
    [OAK-4214] - Many tests of LucenePropertyIndexTest leave temp
    files undleted
    [OAK-4217] - UpgradeTest does not clean up temp file
    [OAK-4225] - AbstractOak2OakTest never calls
    getSoureContainer().clean()
    [OAK-4227] - OakDirectoryTest#dirNameInException_Writes leaves
    temp files
    [OAK-4228] - Some tests in LuceneIndexTest leave out CoR/CoW-ed
    directories
    [OAK-4232] - Bump segment version to 12
    [OAK-4236] - SegmentNodeStoreConfigTest#testDeadlock in oak-pojosr
    leaves out tmp file
    [OAK-4237] - NodeStoreBinaryResourceProviderTest#csvGenerator
    leaks temporary folder
    [OAK-4241] - JdbcNodeStoreContainer does not correctly clean up H2
    temp files
    [OAK-4250] - DocumentStore: add test coverage for find() with
    ultra-long keys
    [OAK-4257] - Findbug issues in security modules

Bug

    [OAK-3488] - LastRevRecovery for self async?
    [OAK-4107] - NPE in
    MongoDocumentStore.determineServerTimeDifferenceMillis
    [OAK-4148] - RAT plugin complains about derby files
    [OAK-4166] - Simple versionable nodes are invalid after migration
    [OAK-4195] - Use clock when waiting in ClusterNodeInfo
    [OAK-4211] - FileAccess.Mapped leaks file channels
    [OAK-4219] - ExternalLoginModuleTestBase doesn't remove synced
    User/Group accounts
    [OAK-4224] - DefaultSyncContext.sync(ExternalIdentity) should
    verify IDP
    [OAK-4231] - DefaultSyncContext creates Value of type String for
    Binary|Inputstream Object
    [OAK-4251] - Guard against NPE in
    DefaultSyncConfig.Authorizable.setAutoMembership
    [OAK-4258] - Don't release oak-segment-next when the reactor
    project is released
    [OAK-4263] - LIRS cache: excessive use of notifyAll
    [OAK-4267] - SyncedIdentity for foreign authorizable always has
    isGroup set to false
    [OAK-4269] - Firebug warning: possible null-pointer dereference in
    S3Backend
    [OAK-4296] - Oak-run console's lucene command is broken
    [OAK-4300] - Cost per entry for Lucene index of type v1 should be
    higher than that of v2
    [OAK-4302] - DefaultSyncContextTest contains duplicate test
    [OAK-4307] - SegmentWriter saves references to external blobs
    [OAK-4310] - Avoid instanceof checks in
    SegmentDiscoveryLiteService
    [OAK-4311] - SegmentNodeStoreService should unregister the
    registered cluster ID descriptors
    [OAK-4313] - QueryImpl should avoid traversal with queries
    containing native constraints
    [OAK-4316] - The Jcr builder should accept a fully initialized Oak
    instance
    [OAK-4325] - Autocreation of properties fails if user id is null
    [OAK-4345] - Bulk update constructs malformed query
    [OAK-4346] - SyncMBeanImpl.syncExternalUsers doesn't check for
    foreign IDP
    [OAK-4351] - Non-root lucene index throws exception if query
    constraints match root of sub-tree
    [OAK-4357] - javadoc plugin should be java 7
    [OAK-4359] - Lucene index / compatVersion 2: search for 'a=b=c'
    does not work
    [OAK-4360] - SyncMBeanImpl.syncUsers swallows errors
    [OAK-4362] - SyncMBeanImpl.purgeOrphanedUsers swallows sync-error
    [OAK-4363] - SyncMBeanImpl: result lacks 'uid' if error messages
    has been created from ExternalIdentityRef

Improvement

    [OAK-3348] - Cross gc sessions might introduce references to
    pre-compacted segments
    [OAK-4112] - Replace the query exclusive lock with a cache tracker
    [OAK-4119] - Improvements Take 1
    [OAK-4168] - Replace the massive lock acquire with cache tracker
    in bulk createOrUpdate()
    [OAK-4169] - Make the bulk createOrUpdate retry count configurable
    in Mongo
    [OAK-4173] - Add log message when a custom tika config files is
    used by an index
    [OAK-4175] - Allow to skip the repository initialization in
    oak-upgrade
    [OAK-4182] - oak-run->console should have a read-only mode to
    connect to document stores (mongo, rdb, etc)
    [OAK-4185] - Add DOCUMENT_MEM to FixturesHelper
    [OAK-4198] - oak-run console should have command to export
    relevant documents (same as oak-mongo.js' printMongoExportCommand)
    [OAK-4220] - ExternalLoginModuleFactoryTest should extend from
    ExternalLoginModuleTestBase
    [OAK-4221] - Move duplicate constants to
    ExternalLoginModuleTestBase
    [OAK-4222] - Cleanup ExternalLoginModuleTest
    [OAK-4223] - Minor improvements to ExternalIdentityRefTest
    [OAK-4230] - Remove unused JsopWriter in Commit
    [OAK-4242] - Counter index should be rebuilt after successful
    migration
    [OAK-4249] - Extract abstract test-base without OSGi registrations
    [OAK-4261] - Add PropInfo.asPropertyState
    [OAK-4262] - Provide a way to abort an async indexing run
    [OAK-4266] - NodeDocumentCache#get method should be synchronized
    [OAK-4297] - Oak-run console should allow to setup FDS of
    repository
    [OAK-4298] - oak-run->console should have a read-only mode to
    connect to segment store
    [OAK-4299] - oak-run console should connect to repository in
    read-only mode by default
    [OAK-4306] - Disable cleanup when compaction is paused
    [OAK-4317] - Similar and Native queries should return no results
    if no index can handle them
    [OAK-4321] - Improve conflict exception message to show if
    conflict is unexpected
    [OAK-4347] - Use the indexPath from hidden property instead of
    taking this as input as part of index config
    [OAK-4365] - Redundant Action Class Lookup in
    DefaultAuthorizableActionProvider

Task

    [OAK-4192] - continously testing JR SNAPSHOT on oak trunk
    [OAK-4245] - Decide on a final name for oak-segment-next
    [OAK-4259] - Implement fixtures for running again oak-segment
    and/or oak-segment-next
    [OAK-4273] - Disable testConcurrentWithConflict on Derby
    [OAK-4303] - Use the oak-segment-next in the oak-upgrade tests
    [OAK-4308] - Align the UpgradeTest#upgradeFrom10 to
    oak-segment-next
    [OAK-4355] - [oak-blob-cloud] Update to latest version of
    aws-sdk-java

Test

    [OAK-4181] - Ignore GetInfoTest.testPropertyChanged() and
    testPropertyRemoved()
    [OAK-4186] - DocumentMemoryFixture does not dispose node store
    [OAK-4187] - Add DOCUMENT_MEM to NodeStoreFixtures
    [OAK-4188] - RepositoryStub on MemoryDocumentStore
    [OAK-4191] - Speed up LargeLdapProviderTest
    [OAK-4216] - Improve testing of DefaultSyncHandler
    [OAK-4226] - Improve testing of DefaultSyncContext
    [OAK-4248] - More tests for the exposed 'basic' package
    [OAK-4264] - Improve testing of SyncMBeanImpl

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/
