[ 
https://issues.apache.org/jira/browse/LUCENE-5873?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14231270#comment-14231270
 ] 

Mikhail Khludnev commented on LUCENE-5873:
------------------------------------------

bq. The contract of advance is to return the next matching doc ID on or after 
the target, so it feels wrong to restrict the values that are legal as targets?
note: the assert was introduced long ago, see 
[commit|https://github.com/apache/lucene-solr/commit/9b6fb299586226dc46865ebaba98ce58c9b89f3c].
 
the reasoning is that parents are orthogonal to children (until LUCENE-5816). 
here the advance() contact contradicts with ToChildBJQ ones. eg if we have 
parent with doc num 10, and call toChildBJQ.advance(10). What it needs to 
return? 
* it can't return parent doc 10 - that violates the ToChildBJQ contract, 
* it can't return any child docs because they are <10, however it's expected 
that DISI.advance(10) > 10
* it can't return anything from the next block, because it leads to 
undetermined behavior (mind that "10" is not a literally 10, but q=foo:bar, 
which yields 10)
obviously if we can't resolve contradiction, we throw exception. 


> AssertionError in ToChildBlockJoinScorer.advance
> ------------------------------------------------
>
>                 Key: LUCENE-5873
>                 URL: https://issues.apache.org/jira/browse/LUCENE-5873
>             Project: Lucene - Core
>          Issue Type: Bug
>            Reporter: Varun Thacker
>            Priority: Minor
>         Attachments: LUCENE-5873.patch, LUCENE-5873.patch
>
>
> When using ToChildBJQ and searching via IndexSearcher.search(Query query, 
> Filter filter, int n) if we provide a filter which matches both parent and 
> child documents we get this error 
> {noformat}
> java.lang.AssertionError
>       at 
> __randomizedtesting.SeedInfo.seed([C346722DC1E4810C:A08F176AE828FA1D]:0)
>       at 
> org.apache.lucene.search.join.ToChildBlockJoinQuery$ToChildBlockJoinScorer.advance(ToChildBlockJoinQuery.java:286)
>       at 
> org.apache.lucene.search.FilteredQuery$LeapFrogScorer.advanceToNextCommonDoc(FilteredQuery.java:274)
>       at 
> org.apache.lucene.search.FilteredQuery$LeapFrogScorer.nextDoc(FilteredQuery.java:286)
>       at 
> org.apache.lucene.search.Weight$DefaultBulkScorer.scoreAll(Weight.java:192)
>       at 
> org.apache.lucene.search.Weight$DefaultBulkScorer.score(Weight.java:163)
>       at org.apache.lucene.search.BulkScorer.score(BulkScorer.java:35)
>       at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:614)
>       at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:483)
>       at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:440)
>       at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:273)
>       at 
> org.apache.lucene.search.join.TestBlockJoinValidation.testValidationForToChildBjqWithChildFilterQuery(TestBlockJoinValidation.java:124)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at 
> com.carrotsearch.randomizedtesting.RandomizedRunner.invoke(RandomizedRunner.java:1618)
>       at 
> com.carrotsearch.randomizedtesting.RandomizedRunner$6.evaluate(RandomizedRunner.java:827)
>       at 
> com.carrotsearch.randomizedtesting.RandomizedRunner$7.evaluate(RandomizedRunner.java:863)
>       at 
> com.carrotsearch.randomizedtesting.RandomizedRunner$8.evaluate(RandomizedRunner.java:877)
>       at 
> org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:110)
>       at 
> org.apache.lucene.util.TestRuleSetupTeardownChained$1.evaluate(TestRuleSetupTeardownChained.java:50)
>       at 
> org.apache.lucene.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:46)
>       at 
> com.carrotsearch.randomizedtesting.rules.SystemPropertiesInvariantRule$1.evaluate(SystemPropertiesInvariantRule.java:55)
>       at 
> org.apache.lucene.util.TestRuleThreadAndTestName$1.evaluate(TestRuleThreadAndTestName.java:49)
>       at 
> org.apache.lucene.util.TestRuleIgnoreAfterMaxFailures$1.evaluate(TestRuleIgnoreAfterMaxFailures.java:65)
>       at 
> org.apache.lucene.util.TestRuleMarkFailure$1.evaluate(TestRuleMarkFailure.java:48)
>       at 
> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
>       at 
> com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:365)
>       at 
> com.carrotsearch.randomizedtesting.ThreadLeakControl.forkTimeoutingTask(ThreadLeakControl.java:798)
>       at 
> com.carrotsearch.randomizedtesting.ThreadLeakControl$3.evaluate(ThreadLeakControl.java:458)
>       at 
> com.carrotsearch.randomizedtesting.RandomizedRunner.runSingleTest(RandomizedRunner.java:836)
>       at 
> com.carrotsearch.randomizedtesting.RandomizedRunner$3.evaluate(RandomizedRunner.java:738)
>       at 
> com.carrotsearch.randomizedtesting.RandomizedRunner$4.evaluate(RandomizedRunner.java:772)
>       at 
> com.carrotsearch.randomizedtesting.RandomizedRunner$5.evaluate(RandomizedRunner.java:783)
>       at 
> org.apache.lucene.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:46)
>       at 
> org.apache.lucene.util.TestRuleStoreClassName$1.evaluate(TestRuleStoreClassName.java:42)
>       at 
> com.carrotsearch.randomizedtesting.rules.SystemPropertiesInvariantRule$1.evaluate(SystemPropertiesInvariantRule.java:55)
>       at 
> com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:39)
>       at 
> com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:39)
>       at 
> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
>       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:43)
>       at 
> org.apache.lucene.util.TestRuleMarkFailure$1.evaluate(TestRuleMarkFailure.java:48)
>       at 
> org.apache.lucene.util.TestRuleIgnoreAfterMaxFailures$1.evaluate(TestRuleIgnoreAfterMaxFailures.java:65)
>       at 
> org.apache.lucene.util.TestRuleIgnoreTestSuites$1.evaluate(TestRuleIgnoreTestSuites.java:55)
>       at 
> com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
>       at 
> com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:365)
>       at java.lang.Thread.run(Thread.java:745)
> {noformat}
> This was caught by test failures recored in SOLR-6295 . The reason why we 
> send a filter is if the user would like to limit the child documents being 
> matched.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to