The GitHub Actions job "Build" on jackrabbit-oak.git/oak-12089-lucene9-core has failed. Run started by GitHub user bhabegger (triggered by bhabegger).
Head commit for run: a82839a9d6e5aa627a03b550f4d0e61e5c978309 / Benjamin Habegger <[email protected]> OAK-12089: rebuild LuceneNgIndexNode/LuceneNgIndexTracker on IndexNodeManager/FulltextIndexTracker Replaces the hand-rolled LuceneNgIndexNode/LuceneNgIndexTracker lifecycle/locking with the shared oak-search IndexNode/IndexNodeManager/FulltextIndexTracker framework, mirroring ElasticIndexNode/ElasticIndexNodeManager/ElasticIndexTracker. Fixes the documented IndexSearcherHolder.getFacetReaderState() vs close() race: releaseResources() (where the searcher is actually closed) now cannot run until every acquire()-held read lock has been released, because IndexNodeManager.close() holds its write lock across the whole closed=true flip. LuceneNgIndexNode now implements IndexNode directly (no more AcquiredNode inner class). LuceneNgIndexTracker.acquireIndexNode(String) returns LuceneNgIndexNode directly. New LuceneNgIndexNodeManager (luceneNg.internal) wraps one generation of a node per the Elastic pattern. Two deviations from a naive port, needed for correctness: - LuceneNgIndexTracker overrides isUpdateNeeded() to diff the whole subtree instead of relying on FulltextIndexTracker's default (:status/:index-definition), since this module's editor never writes either of those nodes -- Lucene segment files live directly under the index definition node itself. - LuceneNgIndexNode.release() cannot call the inherited protected IndexNodeManager.release() directly (it isn't an IndexNodeManager subclass); added a package-private LuceneNgIndexNodeManager.releaseNode() wrapper. Also updates callers to compile/behave correctly against the new API: - LuceneNgIndex.java, internal/LuceneNgCursor.java: AcquiredNode -> LuceneNgIndexNode. - LuceneNgIndexProviderService.java: FulltextIndexTracker.close() is package-private to oak-search and unreachable from here; deactivate() now drives tracker.update(EMPTY_NODE) instead, which closes every tracked IndexNodeManager through the same public API. - LuceneNgQueryIndexProvider.java (not in the original file list, but required to compile and to avoid a real regression): getQueryIndexes() now enumerates lucene9 indexes directly off the given NodeState rather than tracker.getIndexNodePaths(), since the shared tracker only caches paths already opened at least once and does not itself do full-repository discovery on update(). Adapts LuceneNgIndexTrackerTest/LuceneNgIndexNodeTest per the task brief, plus mechanical fixes (type renames, tracker.close() -> tracker.update(EMPTY_NODE)) in IntegrationTest, LuceneNgCursorBatchingTest and LuceneNgIndexTest so the module keeps compiling. Co-Authored-By: Claude Sonnet 5 <[email protected]> Report URL: https://github.com/apache/jackrabbit-oak/actions/runs/32941787808 With regards, GitHub Actions via GitBox
