[ 
https://issues.apache.org/jira/browse/LUCENE-6956?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Nicholas Knize updated LUCENE-6956:
-----------------------------------
    Attachment: LUCENE-6956.patch

The issue is related to the performance improvements added in LUCENE-6951. That 
approximation exploits characteristics of the range based GeoPoint encoding 
which are "well formed" quad cells.  Much like the issue seen with range 
queries and BKD's tendency to create exotic splits, the polygon approximation 
can fail with these irregular rectangles.

The attached patch changes the following:

* add the original rectCrossesPoly method and uses it for more "precise" 
relations required by BKD.
* remove tolerance comparisons from {{GeoRelationUtils.pointInRect}}. This 
method should operate independent of the tolerance factor.
* for LatLonPoint BoundingBox queries, ignore false positives/negatives that 
are within TOLERANCE rounding error

> TestBKDTree.testRandomMedium() failure: some hits were wrong
> ------------------------------------------------------------
>
>                 Key: LUCENE-6956
>                 URL: https://issues.apache.org/jira/browse/LUCENE-6956
>             Project: Lucene - Core
>          Issue Type: Bug
>            Reporter: Steve Rowe
>            Assignee: Michael McCandless
>         Attachments: LUCENE-6956.patch
>
>
> My Jenkins found a reproducible seed for a failure of 
> {{TestBKDTree.testRandomMedium()}} on branch_5x with Java8:
> {noformat}
>   [junit4] Suite: org.apache.lucene.bkdtree.TestBKDTree
>    [junit4]   1> T1: id=29784 should match but did not
>    [junit4]   1>   small=true query=BKDPointInPolygonQuery: field=point: 
> Points: [-9.594408497214317, 86.83882305398583] [-9.594408497214317, 
> 86.8827043287456] [-8.752231243997812, 86.8827043287456] [-8.752231243997812, 
> 86.83882305398583] [-9.594408497214317, 86.83882305398583]  docID=29528
>    [junit4]   1>   lat=86.88086835667491 lon=-8.821268286556005
>    [junit4]   1>   deleted?=false
>    [junit4]   1> T1: id=29801 should match but did not
>    [junit4]   1>   small=true query=BKDPointInPolygonQuery: field=point: 
> Points: [-9.594408497214317, 86.83882305398583] [-9.594408497214317, 
> 86.8827043287456] [-8.752231243997812, 86.8827043287456] [-8.752231243997812, 
> 86.83882305398583] [-9.594408497214317, 86.83882305398583]  docID=29545
>    [junit4]   1>   lat=86.88149104826152 lon=-9.34366637840867
>    [junit4]   1>   deleted?=false
>    [junit4]   1> T1: id=29961 should match but did not
>    [junit4]   1>   small=true query=BKDPointInPolygonQuery: field=point: 
> Points: [-9.594408497214317, 86.83882305398583] [-9.594408497214317, 
> 86.8827043287456] [-8.752231243997812, 86.8827043287456] [-8.752231243997812, 
> 86.83882305398583] [-9.594408497214317, 86.83882305398583]  docID=29705
>    [junit4]   1>   lat=86.8706679996103 lon=-9.38328042626381
>    [junit4]   1>   deleted?=false
>    [junit4]   1> T1: id=30015 should match but did not
>    [junit4]   1>   small=true query=BKDPointInPolygonQuery: field=point: 
> Points: [-9.594408497214317, 86.83882305398583] [-9.594408497214317, 
> 86.8827043287456] [-8.752231243997812, 86.8827043287456] [-8.752231243997812, 
> 86.83882305398583] [-9.594408497214317, 86.83882305398583]  docID=29759
>    [junit4]   1>   lat=86.84762765653431 lon=-9.44802425801754
>    [junit4]   1>   deleted?=false
>    [junit4]   1> T1: id=30017 should match but did not
>    [junit4]   1>   small=true query=BKDPointInPolygonQuery: field=point: 
> Points: [-9.594408497214317, 86.83882305398583] [-9.594408497214317, 
> 86.8827043287456] [-8.752231243997812, 86.8827043287456] [-8.752231243997812, 
> 86.83882305398583] [-9.594408497214317, 86.83882305398583]  docID=29761
>    [junit4]   1>   lat=86.8753323610872 lon=-9.091365560889244
>    [junit4]   1>   deleted?=false
>    [junit4]   1> T1: id=30042 should match but did not
>    [junit4]   1>   small=true query=BKDPointInPolygonQuery: field=point: 
> Points: [-9.594408497214317, 86.83882305398583] [-9.594408497214317, 
> 86.8827043287456] [-8.752231243997812, 86.8827043287456] [-8.752231243997812, 
> 86.83882305398583] [-9.594408497214317, 86.83882305398583]  docID=29786
>    [junit4]   1>   lat=86.85837233439088 lon=-9.127480667084455
>    [junit4]   1>   deleted?=false
>    [junit4]   1> T1: id=30061 should match but did not
>    [junit4]   1>   small=true query=BKDPointInPolygonQuery: field=point: 
> Points: [-9.594408497214317, 86.83882305398583] [-9.594408497214317, 
> 86.8827043287456] [-8.752231243997812, 86.8827043287456] [-8.752231243997812, 
> 86.83882305398583] [-9.594408497214317, 86.83882305398583]  docID=29805
>    [junit4]   1>   lat=86.85876209288836 lon=-9.408821929246187
>    [junit4]   1>   deleted?=false
>    [junit4]   1> T1: id=30077 should match but did not
>    [junit4]   1>   small=true query=BKDPointInPolygonQuery: field=point: 
> Points: [-9.594408497214317, 86.83882305398583] [-9.594408497214317, 
> 86.8827043287456] [-8.752231243997812, 86.8827043287456] [-8.752231243997812, 
> 86.83882305398583] [-9.594408497214317, 86.83882305398583]  docID=29821
>    [junit4]   1>   lat=86.84681385755539 lon=-8.837449550628662
>    [junit4]   1>   deleted?=false
>    [junit4]   1> T1: id=30185 should match but did not
>    [junit4]   1>   small=true query=BKDPointInPolygonQuery: field=point: 
> Points: [-9.594408497214317, 86.83882305398583] [-9.594408497214317, 
> 86.8827043287456] [-8.752231243997812, 86.8827043287456] [-8.752231243997812, 
> 86.83882305398583] [-9.594408497214317, 86.83882305398583]  docID=29929
>    [junit4]   1>   lat=86.84285902418196 lon=-9.196635894477367
>    [junit4]   1>   deleted?=false
>    [junit4]   1> T1: id=30457 should match but did not
>    [junit4]   1>   small=true query=BKDPointInPolygonQuery: field=point: 
> Points: [-9.594408497214317, 86.83882305398583] [-9.594408497214317, 
> 86.8827043287456] [-8.752231243997812, 86.8827043287456] [-8.752231243997812, 
> 86.83882305398583] [-9.594408497214317, 86.83882305398583]  docID=30201
>    [junit4]   1>   lat=86.85951378196478 lon=-9.43030072376132
>    [junit4]   1>   deleted?=false
>    [junit4]   1> T1: id=30510 should match but did not
>    [junit4]   1>   small=true query=BKDPointInPolygonQuery: field=point: 
> Points: [-9.594408497214317, 86.83882305398583] [-9.594408497214317, 
> 86.8827043287456] [-8.752231243997812, 86.8827043287456] [-8.752231243997812, 
> 86.83882305398583] [-9.594408497214317, 86.83882305398583]  docID=30254
>    [junit4]   1>   lat=86.87674303539097 lon=-9.011097270995378
>    [junit4]   1>   deleted?=false
>    [junit4]   1> T1: id=30541 should match but did not
>    [junit4]   1>   small=true query=BKDPointInPolygonQuery: field=point: 
> Points: [-9.594408497214317, 86.83882305398583] [-9.594408497214317, 
> 86.8827043287456] [-8.752231243997812, 86.8827043287456] [-8.752231243997812, 
> 86.83882305398583] [-9.594408497214317, 86.83882305398583]  docID=30285
>    [junit4]   1>   lat=86.8406930565834 lon=-9.17652016505599
>    [junit4]   1>   deleted?=false
>    [junit4]   2> 1? 01, 2016 8:21:44 ?? 
> com.carrotsearch.randomizedtesting.RandomizedRunner$QueueUncaughtExceptionsHandler
>  uncaughtException
>    [junit4]   2> WARNING: Uncaught exception in thread: 
> Thread[T1,5,TGRP-TestBKDTree]
>    [junit4]   2> java.lang.AssertionError: some hits were wrong
>    [junit4]   2>        at 
> __randomizedtesting.SeedInfo.seed([17908CAA7FD53E04]:0)
>    [junit4]   2>        at org.junit.Assert.fail(Assert.java:93)
>    [junit4]   2>        at 
> org.apache.lucene.util.BaseGeoPointTestCase$VerifyHits.test(BaseGeoPointTestCase.java:547)
>    [junit4]   2>        at 
> org.apache.lucene.util.BaseGeoPointTestCase$2._run(BaseGeoPointTestCase.java:753)
>    [junit4]   2>        at 
> org.apache.lucene.util.BaseGeoPointTestCase$2.run(BaseGeoPointTestCase.java:618)
>    [junit4]   2> 
>    [junit4]   2> NOTE: download the large Jenkins line-docs file by running 
> 'ant get-jenkins-line-docs' in the lucene directory.
>    [junit4]   2> NOTE: reproduce with: ant test  -Dtestcase=TestBKDTree 
> -Dtests.method=testRandomMedium -Dtests.seed=17908CAA7FD53E04 
> -Dtests.multiplier=2 -Dtests.nightly=true -Dtests.slow=true 
> -Dtests.linedocsfile=/home/jenkins/lucene-data/enwiki.random.lines.txt 
> -Dtests.locale=zh_HK -Dtests.timezone=Europe/Jersey -Dtests.asserts=true 
> -Dtests.file.encoding=US-ASCII
>    [junit4] ERROR   7.46s | TestBKDTree.testRandomMedium <<<
>    [junit4]    > Throwable #1: 
> com.carrotsearch.randomizedtesting.UncaughtExceptionError: Captured an 
> uncaught exception in thread: Thread[id=25, name=T1, state=RUNNABLE, 
> group=TGRP-TestBKDTree]
>    [junit4]    >        at 
> __randomizedtesting.SeedInfo.seed([17908CAA7FD53E04:AA4EBB023EB05D62]:0)
>    [junit4]    > Caused by: java.lang.AssertionError: some hits were wrong
>    [junit4]    >        at 
> __randomizedtesting.SeedInfo.seed([17908CAA7FD53E04]:0)
>    [junit4]    >        at 
> org.apache.lucene.util.BaseGeoPointTestCase$VerifyHits.test(BaseGeoPointTestCase.java:547)
>    [junit4]    >        at 
> org.apache.lucene.util.BaseGeoPointTestCase$2._run(BaseGeoPointTestCase.java:753)
>    [junit4]    >        at 
> org.apache.lucene.util.BaseGeoPointTestCase$2.run(BaseGeoPointTestCase.java:618)
>    [junit4]   2> NOTE: test params are: codec=Asserting(Lucene54): {}, 
> docValues:{}, sim=RandomSimilarityProvider(queryNorm=true,coord=crazy): {}, 
> locale=zh_HK, timezone=Europe/Jersey
>    [junit4]   2> NOTE: Linux 4.1.0-custom2-amd64 amd64/Oracle Corporation 
> 1.8.0_45 (64-bit)/cpus=16,threads=1,free=381269328,total=513802240
>    [junit4]   2> NOTE: All tests run in this JVM: [TestBKDTree]
>    [junit4]   2> NOTE: download the large Jenkins line-docs file by running 
> 'ant get-jenkins-line-docs' in the lucene directory.
>    [junit4]   2> NOTE: reproduce with: ant test  -Dtestcase=TestBKDTree 
> -Dtests.seed=17908CAA7FD53E04 -Dtests.multiplier=2 -Dtests.nightly=true 
> -Dtests.slow=true 
> -Dtests.linedocsfile=/home/jenkins/lucene-data/enwiki.random.lines.txt 
> -Dtests.locale=zh_HK -Dtests.timezone=Europe/Jersey -Dtests.asserts=true 
> -Dtests.file.encoding=US-ASCII
>    [junit4] ERROR   0.00s | TestBKDTree (suite) <<<
>    [junit4]    > Throwable #1: java.lang.AssertionError: The test or suite 
> printed 11178 bytes to stdout and stderr, even though the limit was set to 
> 8192 bytes. Increase the limit with @Limit, ignore it completely with 
> @SuppressSysoutChecks or run with -Dtests.verbose=true
>    [junit4]    >        at 
> __randomizedtesting.SeedInfo.seed([17908CAA7FD53E04]:0)
>    [junit4]    >        at java.lang.Thread.run(Thread.java:745)
>    [junit4] Completed [1/1 (1!)] in 7.90s, 1 test, 1 failure, 1 error <<< 
> FAILURES!
>    [junit4] 
>    [junit4] 
>    [junit4] Tests with failures [seed: 17908CAA7FD53E04]:
>    [junit4]   - org.apache.lucene.bkdtree.TestBKDTree.testRandomMedium
>    [junit4]   - org.apache.lucene.bkdtree.TestBKDTree (suite)
>    [junit4] 
>    [junit4] 
>    [junit4] JVM J0:     1.00 ..     9.75 =     8.75s
>    [junit4] Execution time total: 9.76 sec.
>    [junit4] Tests summary: 1 suite, 1 test, 1 suite-level error, 1 error
> {noformat}



--
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