Release Notes -- Apache Jackrabbit Oak -- Version 1.36.0

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.36.0 is an incremental feature release based
on and compatible with earlier stable Jackrabbit Oak 1.x
releases. This release is 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.36.0
---------------------

Bug

    [OAK-9176] - sweep upgrade of pre 1.8 branch commits not always sets "_bc" for parents/root
    [OAK-9200] - Oak BlobAccessProvider reference in UserConfigurationImpl fails and leads to performance issue
    [OAK-9201] - PersistentRedisCache: failure to write segment is not an error
    [OAK-9216] - Duplicate writes to Redis in the persistent cache if segment is loaded from Azure
    [OAK-9218] - Fix OSGi wiring after netty update to 4.1.52.Final
    [OAK-9219] - oak-search-elastic: suggestion can return wrong results
    [OAK-9225] - Elastic index cleaner removes remote elastic index for disabled indexes
    [OAK-9229] - CountingDocumentStore returns documents with incorrect store reference
    [OAK-9235] - GlobPattern: fix sonar findings
    [OAK-9236] - AccessControlManagerImpl, AccessControlImporter: fix sonar findings
    [OAK-9241] - Build failure: unapproved licenses
    [OAK-9245] - UserValidator.propertyChanged may miss plaintext password
    [OAK-9248] - TopLevelPaths.contains: missing 'else'
    [OAK-9251] - Error when generating javadoc for classes AzureSegmentStoreExplorerBackend and NonDefaultMountWriteReportingObserver
    [OAK-9256] - Missing segment not detected in AzureSegmentArchiveReader
    [OAK-9259] - RepositoryCallback: nullable annotation with void return value on setLoginModuleMonitor


New Feature

    [OAK-9213] - Support feature vector similarity / image similarity in Oak ES


Improvement

    [OAK-9183] - verify 'Mapping API Calls to Privileges' wrt to move operations
    [OAK-9185] - AbstractAccessControlManager: improve refresh strategy of PermissionProvider
    [OAK-9203] - PermissionProvider.refresh: create dedicated benchmarks and evaluate potential improvements
    [OAK-9208] - Log unexpected writes to the paths designated as part of a non-default mount
    [OAK-9214] - oak-search-elastic: remove duplications in :suggest
    [OAK-9223] - oak-search-elastic: remove duplications in :fulltext
    [OAK-9230] - CachingCommitValueResolver with negative cache
    [OAK-9231] - Enable negative cache of commit value resolver for oak-run index command
    [OAK-9232] - Improvements to tests in o.a.j.oak.security.authorization.permission
    [OAK-9233] - Simplify ChildOrderDiff
    [OAK-9234] - CompiledPermissionImpl: minor improvements
    [OAK-9237] - Improve tests in o.a.j.oak.security.authorization.accesscontrol
    [OAK-9238] - oak-run explore should support Azure Segment Store
    [OAK-9242] - Improvements to tests in o.a.j.oak.security.user
    [OAK-9243] - avoid potential NPE with Condition.Property
    [OAK-9247] - Sonar findings and minor improvements in o.a.j.oak.security.user
    [OAK-9249] - Improve tests in o.a.j.oak.spi.security.authorization.cug
    [OAK-9250] - 3rd level segment cache: perform direct memory allocation based on the value of the system property
    [OAK-9252] - Query: multi-valued property condition can fail with "Type must be an array type"
    [OAK-9266] - FilterProvider: typo in javadoc

Test

    [OAK-9161] - Reenable PredefinedNodeTypeTest#testFrozenNode once jackrabbit is updated


Task

    [OAK-9199] - Upgrade to Elasticsearch 7.9.1
    [OAK-9205] - Bump htmlunit from 2.35.0 to 2.43.0
    [OAK-9209] - Index lane elastic-async traverses repository
    [OAK-9210] - Bump netty dependency from 4.1.17.Final to 4.1.52.Final
    [OAK-9211] - oak-search-elastic: implement dynamic boost
    [OAK-9227] - Improvements to token authentication tests
    [OAK-9255] - update junit to 4.13.1
    [OAK-9258] - Upgrade to Elasticsearch 7.9.2
    [OAK-9264] - oak-search-elastic: add support for similarityTags
    [OAK-9268] - change default back to traversal of nodes even if no index with indexing lane is present
    [OAK-9270] - Update Oak trunk and 1.22 to Jackrabbit 2.20.2
    [OAK-9271] - Upgrade to Elasticsearch 7.9.3


Technical task

    [OAK-6758] - Convert oak-authorization-cug to OSGi R6 annotations
    [OAK-6764] - Convert oak-exercise to OSGi R6 annotations
    [OAK-9190] - Benchmark Results - Improvement(s)
    [OAK-9191] - Investigate Improvement(s)
    [OAK-9220] - create benchmarks
    [OAK-9221] - results status quo
    [OAK-9222] - results potential improvements
    [OAK-9263] - Remove (Guava) com.google.common.base.Objects.ToStringHelper
    [OAK-9269] - RDB*Store: update postgresql jdbc driver reference to 42.2.18


Story

    [OAK-9224] - Create a protected property importer for handling user tokens


Documentation

    [OAK-5214] - Create FAQ for External Authentication
    [OAK-9051] - Enhance oak-exercise for Principal base authorization
    [OAK-9239] - Update oak-benchmarks readme to include azure fixture

In addition to the above-mentioned changes, this release contains all
changes up to the previous 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 SHA512 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
https://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/
