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

Reply via email to