Mark Buquor created JENA-289:
--------------------------------
Summary: Respect query timeouts in TDB implementation
Key: JENA-289
URL: https://issues.apache.org/jira/browse/JENA-289
Project: Apache Jena
Issue Type: Improvement
Components: TDB
Affects Versions: TDB 0.9.1
Reporter: Mark Buquor
In general use, we sometimes see queries throw QueryCancelledException several
seconds/minutes after the expected timeout. This is acceptable to a degree, but
it appears that there are cases where a rogue query could execute unmitigated.
The attached testcase is an example of a query that will execute and consume
CPU/heap until an OutOfMemoryError is thrown.
Example: The following query with 10s timeouts executed for ~7 minutes before
throwing an OOME.
Aug 3, 2012 10:18:19 AM Executing query [limit=1,000 timeout1=10s
timeout2=10s]: SELECT * WHERE { ?a ?b ?c . ?c ?d ?e }
java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.HashSet.<init>(HashSet.java:86)
at org.openjena.atlas.iterator.FilterUnique.<init>(FilterUnique.java:26)
at org.openjena.atlas.iterator.Iter.distinct(Iter.java:438)
at
com.hp.hpl.jena.tdb.solver.StageMatchTuple.makeNextStage(StageMatchTuple.java:116)
at
com.hp.hpl.jena.tdb.solver.StageMatchTuple.makeNextStage(StageMatchTuple.java:44)
at
org.openjena.atlas.iterator.RepeatApplyIterator.hasNext(RepeatApplyIterator.java:49)
at org.openjena.atlas.iterator.Iter$4.hasNext(Iter.java:295)
at
com.hp.hpl.jena.sparql.engine.iterator.QueryIterPlainWrapper.hasNextBinding(QueryIterPlainWrapper.java:54)
at
com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:108)
at
com.hp.hpl.jena.sparql.engine.iterator.QueryIterSlice.hasNextBinding(QueryIterSlice.java:76)
at
com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:108)
at
com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:40)
at
com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:108)
at
com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:40)
at
com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:108)
at
com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:40)
at
com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:108)
at
com.hp.hpl.jena.sparql.engine.ResultSetStream.hasNext(ResultSetStream.java:72)
at
com.hp.hpl.jena.sparql.resultset.ResultSetApply.apply(ResultSetApply.java:41)
at com.hp.hpl.jena.sparql.resultset.XMLOutput.format(XMLOutput.java:52)
at
com.hp.hpl.jena.query.ResultSetFormatter.outputAsXML(ResultSetFormatter.java:482)
at
com.hp.hpl.jena.query.ResultSetFormatter.outputAsXML(ResultSetFormatter.java:460)
at TestTimout.main(TestTimout.java:84)
Aug 3, 2012 10:25:41 AM Finished
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira