Release Notes -- Apache Jackrabbit Oak -- Version 1.58.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.58.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.

While Oak 1.58.0 compiles and tests successfully on Java 17, Javadocs
generation fails on Java 17 (but works as expected on Java 11).

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

Technical task

    [OAK-6759] - Convert oak-blob-cloud-azure to OSGi R6 annotations

Bug

    [OAK-10293] - AzureTarRevisionsTest fails occasionally
    [OAK-10334] - Node.addMixin() may overwrite existing mixins
    [OAK-10343] - AzureTarFilesTest.testCollectBlobReferencesWithGenerationFilter unreliable
    [OAK-10359] - Unreliable test: TarFileTest.binaryReferencesIndexShouldBeTrimmedDownOnSweep
    [OAK-10360] - unreliable test AzureTarFileTest.testWriteAndReadBinaryReferences
    [OAK-10377] - Checked-out state of non-versionable nodes is not handled correctly
    [OAK-10384] - Fix stripping of large indexed ordered properties
    [OAK-10413] - DocumentStoreIndexerIT hanging
    [OAK-10448] - org.apache.jackrabbit.api.security.user.Query must be a Consumer type
    [OAK-10453] - Pipelined strategy: enforce size limit on memory taken by objects in the queue between download and transform thread
    [OAK-10465] - Embed netty-transport-native-unix-common dependency in oak-segment-tar

Improvement

    [OAK-9922] - segment-tar: parallel compaction
    [OAK-10358] - Indexing job: push filtering of paths to MongoDB
    [OAK-10399] - Automatically pick a merged index over multiple levels
    [OAK-10423] - Improve logging of metrics in indexing job
    [OAK-10427] - Clear cache on NodeDocumentCache close
    [OAK-10429] - Implementation for IncrementalFFS
    [OAK-10450] - Bump testcontainers dependency to v1.19.0
    [OAK-10452] - Indexing job/regex filtering: getting ancestors nodes of filtered path incorrectly does a full col scan on Mongo
    [OAK-10456] - oak-search-elastic: log index name when bulk update fails
    [OAK-10458] - Indexing job: Make LZ4 the default compression algorithm in OAK
    [OAK-10463] - Retrieve flatFileStore for indexing from baseFlatFileStore
    [OAK-10475] - Expose the mongo connection in MongoDocumentNodeStoreBuilderBase

Task

    [OAK-7182] - Make it possible to update Guava
    [OAK-9491] - Address vulnerabilities found by dependency checker plugin
    [OAK-10371] - oak-segment-azure/oak-blob-cloud-azure require provided Guava, embed it instead
    [OAK-10374] - test coverage for modification of non-versioned node with jcr:isCheckedOut==false property
    [OAK-10426] - oak-segment-azure: enable baseline check
    [OAK-10430] - oak-*-azure: add to OSGi tests
    [OAK-10433] - Throttle excessive warning log messages when reindexing environments with non-fatal issues in index definition
    [OAK-10434] - oak-segment-azure/oak-blob-cloud-azure: update SDK dependencies
    [OAK-10439] - Update Oak trunk and Oak 1.22 to Jackrabbit 2.20.12
    [OAK-10441] - oak-search-elastic embeds vulnerable SnakeYAML
    [OAK-10442] - Lucene Index - node type inheritance is not properly working for aggregation
    [OAK-10443] - refactor AbstractDataStoreService so that it doesn't need the statisticsProvider OSGi reference
    [OAK-10445] - Cleanup logging (AbstractSharedCachingDataStore)
    [OAK-10446] - Upgrade jackson-databind dependency to 2.15.2
    [OAK-10447] - update Tomcat JDBC dependency to 9.0.80
    [OAK-10449] - oak-solr-osgi embeds vulnerable Zookeeper
    [OAK-10461] - oak-search-elastic does not build under Java 17


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/

