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]