apache / apache/lucene

TestIndexFileDeleter.testExcInDecRef test failure [LUCENE-9839]

Open
#10,878 11 comments 0 reactions 0 assignees View on GitHub
legacy-jira-priority:Major type:bug
Dominant language
Java
Stars
3.6k
Forks
1.4k
Avg merge
2d 11h
Merged PRs (30d)
88

Description

It isn't reproducible for me (at least trying again a single time). I'm guessing a concurrency issue?

```
> Task :lucene:core:test

org.apache.lucene.index.TestIndexFileDeleter > testExcInDecRef FAILED
org.apache.lucene.store.AlreadyClosedException: ReaderPool is already closed
at __randomizedtesting.SeedInfo.seed([9142DCE874F11926:78DFABDA0238FEDB]:0)
at org.apache.lucene.index.ReaderPool.get(ReaderPool.java:400)
at org.apache.lucene.index.IndexWriter.writeReaderPool(IndexWriter.java:3760)
at org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:590)
at org.apache.lucene.index.RandomIndexWriter.getReader(RandomIndexWriter.java:474)
at org.apache.lucene.index.RandomIndexWriter.getReader(RandomIndexWriter.java:406)
at org.apache.lucene.index.TestIndexFileDeleter.testExcInDecRef(TestIndexFileDeleter.java:484)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at com.carrotsearch.randomizedtesting.RandomizedRunner.invoke(RandomizedRunner.java:1754)
at com.carrotsearch.randomizedtesting.RandomizedRunner$8.evaluate(RandomizedRunner.java:942)
at com.carrotsearch.randomizedtesting.RandomizedRunner$9.evaluate(RandomizedRunner.java:978)
at com.carrotsearch.randomizedtesting.RandomizedRunner$10.evaluate(RandomizedRunner.java:992)
at org.apache.lucene.util.TestRuleSetupTeardownChained$1.evaluate(TestRuleSetupTeardownChained.java:44)
at org.apache.lucene.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:43)
at org.apache.lucene.util.TestRuleThreadAndTestName$1.evaluate(TestRuleThreadAndTestName.java:45)
at org.apache.lucene.util.TestRuleIgnoreAfterMaxFailures$1.evaluate(TestRuleIgnoreAfterMaxFailures.java:60)
at org.apache.lucene.util.TestRuleMarkFailure$1.evaluate(TestRuleMarkFailure.java:44)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
at com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:370)
at com.carrotsearch.randomizedtesting.ThreadLeakControl.forkTimeoutingTask(ThreadLeakControl.java:819)
at com.carrotsearch.randomizedtesting.ThreadLeakControl$3.evaluate(ThreadLeakControl.java:470)
at com.carrotsearch.randomizedtesting.RandomizedRunner.runSingleTest(RandomizedRunner.java:951)
at com.carrotsearch.randomizedtesting.RandomizedRunner$5.evaluate(RandomizedRunner.java:836)
at com.carrotsearch.randomizedtesting.RandomizedRunner$6.evaluate(RandomizedRunner.java:887)
at com.carrotsearch.randomizedtesting.RandomizedRunner$7.evaluate(RandomizedRunner.java:898)
at org.apache.lucene.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:43)
at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
at org.apache.lucene.util.TestRuleStoreClassName$1.evaluate(TestRuleStoreClassName.java:38)
at com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:40)
at com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:40)
at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
at org.apache.lucene.util.TestRuleAssertionsRequired$1.evaluate(TestRuleAssertionsRequired.java:51)
at org.apache.lucene.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:43)
at org.apache.lucene.util.TestRuleMarkFailure$1.evaluate(TestRuleMarkFailure.java:44)
at org.apache.lucene.util.TestRuleIgnoreAfterMaxFailures$1.evaluate(TestRuleIgnoreAfterMaxFailures.java:60)
at org.apache.lucene.util.TestRuleIgnoreTestSuites$1.evaluate(TestRuleIgnoreTestSuites.java:47)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
at com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:370)
at com.carrotsearch.randomizedtesting.ThreadLeakControl.lambda$forkTimeoutingTask$0(ThreadLeakControl.java:826)
at java.base/java.lang.Thread.run(Thread.java:832)

org.apache.lucene.index.TestIndexFileDeleter > test suite's output saved to /home/rmuir/workspace/lucene/lucene/core/build/test-results/test/outputs/OUTPUT-org.apache.lucene.index.TestIndexFileDeleter.txt, copied below:
> org.apache.lucene.store.AlreadyClosedException: ReaderPool is already closed
> at __randomizedtesting.SeedInfo.seed([9142DCE874F11926:78DFABDA0238FEDB]:0)
> at org.apache.lucene.index.ReaderPool.get(ReaderPool.java:400)
> at org.apache.lucene.index.IndexWriter.writeReaderPool(IndexWriter.java:3760)
> at org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:590)
> at org.apache.lucene.index.RandomIndexWriter.getReader(RandomIndexWriter.java:474)
> at org.apache.lucene.index.RandomIndexWriter.getReader(RandomIndexWriter.java:406)
> at org.apache.lucene.index.TestIndexFileDeleter.testExcInDecRef(TestIndexFileDeleter.java:484)
> at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
> at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.base/java.lang.reflect.Method.invoke(Method.java:564)
> at com.carrotsearch.randomizedtesting.RandomizedRunner.invoke(RandomizedRunner.java:1754)
> at com.carrotsearch.randomizedtesting.RandomizedRunner$8.evaluate(RandomizedRunner.java:942)
> at com.carrotsearch.randomizedtesting.RandomizedRunner$9.evaluate(RandomizedRunner.java:978)
> at com.carrotsearch.randomizedtesting.RandomizedRunner$10.evaluate(RandomizedRunner.java:992)
> at org.apache.lucene.util.TestRuleSetupTeardownChained$1.evaluate(TestRuleSetupTeardownChained.java:44)
> at org.apache.lucene.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:43)
> at org.apache.lucene.util.TestRuleThreadAndTestName$1.evaluate(TestRuleThreadAndTestName.java:45)
> at org.apache.lucene.util.TestRuleIgnoreAfterMaxFailures$1.evaluate(TestRuleIgnoreAfterMaxFailures.java:60)
> at org.apache.lucene.util.TestRuleMarkFailure$1.evaluate(TestRuleMarkFailure.java:44)
> at org.junit.rules.RunRules.evaluate(RunRules.java:20)
> at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
> at com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:370)
> at com.carrotsearch.randomizedtesting.ThreadLeakControl.forkTimeoutingTask(ThreadLeakControl.java:819)
> at com.carrotsearch.randomizedtesting.ThreadLeakControl$3.evaluate(ThreadLeakControl.java:470)
> at com.carrotsearch.randomizedtesting.RandomizedRunner.runSingleTest(RandomizedRunner.java:951)
> at com.carrotsearch.randomizedtesting.RandomizedRunner$5.evaluate(RandomizedRunner.java:836)
> at com.carrotsearch.randomizedtesting.RandomizedRunner$6.evaluate(RandomizedRunner.java:887)
> at com.carrotsearch.randomizedtesting.RandomizedRunner$7.evaluate(RandomizedRunner.java:898)
> at org.apache.lucene.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:43)
> at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
> at org.apache.lucene.util.TestRuleStoreClassName$1.evaluate(TestRuleStoreClassName.java:38)
> at com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:40)
> at com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:40)
> at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
> at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
> at org.apache.lucene.util.TestRuleAssertionsRequired$1.evaluate(TestRuleAssertionsRequired.java:51)
> at org.apache.lucene.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:43)
> at org.apache.lucene.util.TestRuleMarkFailure$1.evaluate(TestRuleMarkFailure.java:44)
> at org.apache.lucene.util.TestRuleIgnoreAfterMaxFailures$1.evaluate(TestRuleIgnoreAfterMaxFailures.java:60)
> at org.apache.lucene.util.TestRuleIgnoreTestSuites$1.evaluate(TestRuleIgnoreTestSuites.java:47)
> at org.junit.rules.RunRules.evaluate(RunRules.java:20)
> at com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
> at com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:370)
> at com.carrotsearch.randomizedtesting.ThreadLeakControl.lambda$forkTimeoutingTask$0(ThreadLeakControl.java:826)
> at java.base/java.lang.Thread.run(Thread.java:832)
2> NOTE: reproduce with: gradlew test --tests TestIndexFileDeleter.testExcInDecRef -Dtests.seed=9142DCE874F11926 -Dtests.slow=true -Dtests.badapples=true -Dtests.locale=yue-Hans -Dtests.timezone=America/Eirunepe -Dtests.asserts=true -Dtests.file.encoding=UTF-8
2> NOTE: leaving temporary files on disk at: /tmp/lucene_gradle/lucene.index.TestIndexFileDeleter_9142DCE874F11926-001
2> NOTE: test params are: codec=Asserting(Lucene90): {field=PostingsFormat(name=LuceneFixedGap), id=PostingsFormat(name=Direct), content=PostingsFormat(name=LuceneVarGapFixedInterval)}, docValues:{}, maxPointsInLeafNode=629, maxMBSortInHeap=5.627723832659357, sim=Asserting(RandomSimilarity(queryNorm=false): {field=DFR I(ne)BZ(0.3), content=IB SPL-LZ(0.3)}), locale=yue-Hans, timezone=America/Eirunepe
2> NOTE: Linux 5.11.6-arch1-1 amd64/N/A 15.0.2 (64-bit)/cpus=1,threads=1,free=369546928,total=534773760
2> NOTE: All tests run in this JVM: [TestComplexExplanationsOfNonMatches, TestRegexpRandom2, TestPhraseQuery, TestFieldMaskingSpanQuery, TestSpanNotQuery, TestSpanMultiTermQueryWrapper, TestSpanTermQuery, TestScorerPerf, TestLatLonPointQueries, TestDateSort, TestMatchAllDocsQuery, TestShardSearching, TestIndriAndQuery, TestBooleanOr, TestBooleanQueryVisitSubscorers, TestSynonymQuery, TestPrefixRandom, TestIntRangeFieldQueries, TestTopDocsMerge, TestSimpleExplanationsWithFillerDocs, TestLongValuesSource, TestWANDScorer, TestQueryVisitor, TestSloppyPhraseQuery, TestNeedsScores, TestSearchWithThreads, TestMinShouldMatch2, TestComplexExplanations, TestMaxClauseLimit, TestFieldCacheRewriteMethod, TestMultiTermConstantScore, TestPositiveScoresOnlyCollector, TestTermQuery, TestLMJelinekMercerSimilarity, TestBooleanSimilarity, TestLMDirichletSimilarity, TestAxiomaticF3EXP, TestBasicModelIF, TestIndriDirichletSimilarity, TestBooleanMinShouldMatch, TestSortedSetSortField, TestBoolean2, TestTopFieldCollectorEarlyTermination, TestSloppyMath, TestDirectPacked, TestDaciukMihovAutomatonBuilder, TestAutomaton, TestCompiledAutomaton, TestPagedBytes, TestFrequencyTrackingRingBuffer, TestFSTs, TestWeakIdentityMap, TestAttributeSource, TestDocIdsWriter, Test2BBKDPoints, TestCloseableThreadLocal, TestIOUtils, TestSparseFixedBitDocIdSet, TestMergedIterator, TestRecyclingByteBlockAllocator, TestNotDocIdSet, TestCharsRefBuilder, TestBytesRef, TestQueryBuilder, TestHighLZ4, TestFixedLengthBytesRefArray, TestBytesRefHash, TestCachingTokenFilter, TestCharacterUtils, TestCharTermAttributeImpl, TestAnalyzerWrapper, TestGraphTokenFilter, TestSearchForDuplicates, TestGeoUtils, TestLine2D, TestXYPolygon, TestXYCircle, TestByteBuffersDirectory, TestBufferedChecksum, TestTrackingDirectoryWrapper, TestRateLimiter, TestChecksumIndexInput, TestMmapDirectory, TestLongRange, TestFeatureSort, TestLatLonPointDistanceFeatureQuery, TestLatLonShape, TestXYPointShapeQueries, TestXYPolygonShapeQueries, TestLatLonLineShapeQueries, TestFieldType, TestDateTools, TestSegmentReader, TestIndexWriterDelete, TestParallelLeafReader, TestReaderWrapperDVTypeCheck, TestBagOfPostings, TestBagOfPositions, TestDocumentsWriterPerThreadPool, Test2BDocs, TestIndexWriterThreadsToSegments, TestPrefixCodedTerms, TestPersistentSnapshotDeletionPolicy, TestIndexFileDeleter]
```

---
Migrated from [LUCENE-9839](https://issues.apache.org/jira/browse/LUCENE-9839) by Robert Muir (@rmuir), updated Nov 05 2021
Attachments: [image-2021-11-05-09-35-38-980.png](https://apache.github.io/lucene-jira-archive/attachments/LUCENE-9839/image-2021-11-05-09-35-38-980.png)

Contributor guide

Open the contributing guide

Research direction

Start with TestIndexFileDeleter.testExcInDecRef in TestIndexFileDeleter.java and reproduce it using the provided Gradle command and test seed. Trace the AlreadyClosedException through ReaderPool.java and IndexWriter.java; done means identifying and correcting the concurrency failure so the test passes reliably.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
testing
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.