LorenzBuehmann opened a new issue, #1634:
URL: https://github.com/apache/jena/issues/1634

   ### Version
   
   4.7.0-SNAPSHOT
   
   ### What happened?
   
   Dataset: some DBpedia stuff
   
   Query ("give me longest river"):
   ``` sparql
   SELECT DISTINCT ?uri WHERE {
     ?uri a <http://dbpedia.org/ontology/River> 
     {
       ?uri <http://dbpedia.org/ontology/length> ?l 
     } UNION {
       ?uri <http://dbpedia.org/property/length> ?l 
     } 
   }
   ORDER BY DESC(?l) OFFSET 0 LIMIT 1
   ```
   it fails with 500 and "Comparison method violates its general contract!".
   
   DBpedia data is annoying anyways, there are plenty of length literals with 
different datatype. For debugging I reduced the literal mix to two 
:`xsd:double,          <http://dbpedia.org/datatype/kilometre>`
   
   ``` sparql
   PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
   
   SELECT DISTINCT ?uri WHERE {
     ?uri a <http://dbpedia.org/ontology/River> 
     {
       ?uri <http://dbpedia.org/ontology/length> ?l 
     } UNION {
       ?uri <http://dbpedia.org/property/length> ?l 
     } 
     filter(datatype(?l) in (xsd:double,        
<http://dbpedia.org/datatype/kilometre>))
   }
   ORDER BY DESC(?l) OFFSET 0 LIMIT 1
   ```
   which still fails.
   
   It does not fail if we project/select the length literal `?l` though:
   
   ```sparql
   SELECT DISTINCT ?uri ?l WHERE {
     ?uri a <http://dbpedia.org/ontology/River> 
     {
       ?uri <http://dbpedia.org/ontology/length> ?l 
     } UNION {
       ?uri <http://dbpedia.org/property/length> ?l 
     } 
     filter(datatype(?l) in (xsd:double,        
<http://dbpedia.org/datatype/kilometre>))
   }
   ORDER BY DESC(?l) OFFSET 0 LIMIT 1
   ```
   
   Looking for the Java exception I found source like here: 
https://bugs.openjdk.org/browse/JDK-8234482
   which also does contain a hint that timsort needs sufficient amount of data 
to fail:
   > TimSort doesn't throw this exception in all cases, though, only if there 
are a sufficiently large number of elements to be merged (generally > 32 
elements, often hundreds are required), and if the sorting algorithm happens to 
detect an contradiction in the comparison method.
   
   
   ### Relevant output and stacktrace
   
   ```shell
   Query = PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>  SELECT DISTINCT 
?uri WHERE {   ?uri a <http://dbpedia.org/ontology/River>    {     ?uri 
<http://dbpedia.org/ontology/length> ?l    } UNION {     ?uri 
<http://dbpedia.org/property/length> ?l    }    filter(datatype(?l) in 
(xsd:double,   <http://dbpedia.org/datatype/kilometre>)) } ORDER BY DESC(?l) 
OFFSET 0 LIMIT 1
   10:12:42 WARN  Fuseki          :: [32] RC = 500 : Comparison method violates 
its general contract!
   java.lang.IllegalArgumentException: Comparison method violates its general 
contract!
        at java.util.TimSort.mergeHi(TimSort.java:903) ~[?:?]
        at java.util.TimSort.mergeAt(TimSort.java:520) ~[?:?]
        at java.util.TimSort.mergeCollapse(TimSort.java:448) ~[?:?]
        at java.util.TimSort.sort(TimSort.java:245) ~[?:?]
        at java.util.Arrays.sort(Arrays.java:1441) ~[?:?]
        at 
org.apache.jena.atlas.data.AbortableComparator.abortableSort(AbortableComparator.java:57)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.atlas.data.SortedDataBag.iterator(SortedDataBag.java:205) 
~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.atlas.data.SortedDataBag.iterator(SortedDataBag.java:192) 
~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.sparql.engine.iterator.QueryIterSort$SortedBindingIterator.initializeIterator(QueryIterSort.java:88)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.atlas.iterator.IteratorDelayedInitialization.init(IteratorDelayedInitialization.java:38)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.atlas.iterator.IteratorDelayedInitialization.hasNext(IteratorDelayedInitialization.java:48)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.sparql.engine.iterator.QueryIterPlainWrapper.hasNextBinding(QueryIterPlainWrapper.java:59)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:116)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.sparql.engine.iterator.QueryIterConvert.hasNextBinding(QueryIterConvert.java:58)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:116)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.sparql.engine.iterator.QueryIterDistinct.getInputNextUnseen(QueryIterDistinct.java:113)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.sparql.engine.iterator.QueryIterDistinct.hasNextBinding(QueryIterDistinct.java:72)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:116)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.sparql.engine.iterator.QueryIterSlice.hasNextBinding(QueryIterSlice.java:76)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:116)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:38)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:116)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:38)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:116)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.sparql.exec.RowSetStream.hasNext(RowSetStream.java:47) 
~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.sparql.engine.ResultSetStream.hasNext(ResultSetStream.java:81) 
~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.fuseki.servlets.SPARQLQueryProcessor.executeQuery(SPARQLQueryProcessor.java:380)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.fuseki.servlets.SPARQLQueryProcessor.execute(SPARQLQueryProcessor.java:279)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.fuseki.servlets.SPARQLQueryProcessor.executeWithParameter(SPARQLQueryProcessor.java:224)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.fuseki.servlets.SPARQLQueryProcessor.execute(SPARQLQueryProcessor.java:209)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.fuseki.servlets.ActionService.executeLifecycle(ActionService.java:58)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.fuseki.servlets.SPARQLQueryProcessor.execPost(SPARQLQueryProcessor.java:84)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.fuseki.servlets.ActionProcessor.process(ActionProcessor.java:34)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.fuseki.servlets.ActionBase.process(ActionBase.java:54) 
~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.fuseki.servlets.ActionExecLib.execActionSub(ActionExecLib.java:124)
 ~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.fuseki.servlets.ActionExecLib.execAction(ActionExecLib.java:98) 
~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.fuseki.server.Dispatcher.dispatchAction(Dispatcher.java:164) 
~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.fuseki.server.Dispatcher.process(Dispatcher.java:156) 
~[fuseki-server.jar:4.7.0-SNAPSHOT]
        at 
org.apache.jena.fuseki.server.Dispatcher.dispatch(Dispatcher.java:83) 
~[fuseki-server.jar:4.7.0-SNAPSHOT]
   ```
   
   
   ### Are you interested in making a pull request?
   
   _No response_


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to