[ https://issues.apache.org/jira/browse/LUCENE-2972?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13037629#comment-13037629 ]
Michael McCandless commented on LUCENE-2972: -------------------------------------------- I just committed the fix: {noformat} Index: src/java/org/apache/lucene/search/FieldCacheTermsFilter.java =================================================================== --- src/java/org/apache/lucene/search/FieldCacheTermsFilter.java (revision 1125975) +++ src/java/org/apache/lucene/search/FieldCacheTermsFilter.java (working copy) @@ -127,7 +127,7 @@ public FieldCacheTermsFilterDocIdSet(FieldCache.DocTermsIndex fcsi) { this.fcsi = fcsi; - openBitSet = new OpenBitSet(this.fcsi.size()); + openBitSet = new OpenBitSet(this.fcsi.numOrd()); final BytesRef spare = new BytesRef(); for (int i=0;i<terms.length;i++) { int termNumber = this.fcsi.binarySearchLookup(terms[i], spare); {noformat} We were using number-of-docs instead of number-of-ords to allocate the OBS. This only causes a problem if 1) every doc has a unique term (thus number-of-ords is 1 + number-of-docs since 0 is reserved to mean unset), and 2) the number of docs is 0 mod 64, because this would then cause an AIOOBE coming out of the OBS (not the fcsi.getOrd!), which the disi impl interprets as no-more-docs. Phew! I think likely we couldn't repro because ConccurrentMergeScheduler was involved... this was able to repro for me: {noformat} ant test-core -Dtestcase=TestFieldCacheTermsFilter -Dtestmethod=testMissingTerms -Dtests.seed=-7172644887386150665:-4028247385708880228a {noformat} It uses SMS. I'd like to add assertions to OBS to better catch bugs like this in the future... I'll work up a patch. > Intermittent failure in TestFieldCacheTermsFilter.testMissingTerms > ------------------------------------------------------------------ > > Key: LUCENE-2972 > URL: https://issues.apache.org/jira/browse/LUCENE-2972 > Project: Lucene - Java > Issue Type: Bug > Reporter: Michael McCandless > Assignee: Michael McCandless > Fix For: 3.2, 4.0 > > > Running tests in while(1) I hit this: > {noformat} > NOTE: reproduce with: ant test -Dtestcase=TestFieldCacheTermsFilter > -Dtestmethod=testMissingTerms > -Dtests.seed=-1046382732738729184:5855929314778232889 > 1) testMissingTerms(org.apache.lucene.search.TestFieldCacheTermsFilter) > java.lang.AssertionError: Must match 1 expected:<1> but was:<0> > at org.junit.Assert.fail(Assert.java:91) > at org.junit.Assert.failNotEquals(Assert.java:645) > at org.junit.Assert.assertEquals(Assert.java:126) > at org.junit.Assert.assertEquals(Assert.java:470) > at > org.apache.lucene.search.TestFieldCacheTermsFilter.testMissingTerms(TestFieldCacheTermsFilter.java:63) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) > at > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) > at org.junit.rules.TestWatchman$1.evaluate(TestWatchman.java:48) > at > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) > at > org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) > at > org.apache.lucene.util.LuceneTestCase$LuceneTestCaseRunner.runChild(LuceneTestCase.java:1214) > at > org.apache.lucene.util.LuceneTestCase$LuceneTestCaseRunner.runChild(LuceneTestCase.java:1146) > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) > at > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) > at > org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) > at org.junit.runners.ParentRunner.run(ParentRunner.java:236) > at org.junit.runners.Suite.runChild(Suite.java:128) > at org.junit.runners.Suite.runChild(Suite.java:24) > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) > at org.junit.runners.ParentRunner.run(ParentRunner.java:236) > at org.junit.runner.JUnitCore.run(JUnitCore.java:157) > at org.junit.runner.JUnitCore.run(JUnitCore.java:136) > at org.junit.runner.JUnitCore.run(JUnitCore.java:117) > at org.junit.runner.JUnitCore.runMain(JUnitCore.java:98) > at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:53) > at org.junit.runner.JUnitCore.main(JUnitCore.java:45) > {noformat} > Unfortunately the seed doesn't [consistently] repro for me... -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org