Ticket #355 (closed defect: fixed)
Query failure when comparing with non materialized value
| Reported by: | gjdev | Owned by: | mrpersonick |
|---|---|---|---|
| Priority: | major | Milestone: | Binary and API Compatibility |
| Component: | Bigdata SAIL | Version: | BIGDATA_RELEASE_1_0_0 |
| Keywords: | Cc: | gjdev, mrpersonick, thompsonbry |
Description
The following query fails when the query binding of arg is set to a value that is not available as a term in the database:
SELECT ?subj WHERE {
?subj <os:prop> ?val .
FILTER(STR(?val) != ?arg)}
I discovered this because the logs of our CI are filled with com.bigdata.rdf.internal.NotMaterializedException? reports. But on queries that compare for equality (=) instead of !=, and those return the correct value even after the ConditionalRoutingOp? is shut down because of this exception.
Other than the obvious query result failure, it actually worries me that queries will silently (only logging) ignore unexpected exceptions and return possibly incorrect results instead of reporting the unexpected failure as a SailException? to the caller. Instead of shutting down this bop after catching an exception, the exception should have propagated to the thread that started the query in the first place.
Example of logged stacktraces:
WARN : 3309 com.bigdata.journal.Journal.executorService3 com.bigdata.util.concurrent.Haltable.logCause(Haltable.java:418): com.bigdata.util.concurrent.Haltable@de16483 : isFirstCause=true : java.util.concurrent.ExecutionException: java.lang.RuntimeException: com.bigdata.rdf.internal.NotMaterializedException: DummyIV java.util.concurrent.ExecutionException: java.lang.RuntimeException: com.bigdata.rdf.internal.NotMaterializedException: DummyIV at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222) at java.util.concurrent.FutureTask.get(FutureTask.java:83) at com.bigdata.bop.engine.ChunkedRunningQuery$ChunkTask.call(ChunkedRunningQuery.java:1106) at com.bigdata.bop.engine.ChunkedRunningQuery$ChunkTaskWrapper.run(ChunkedRunningQuery.java:704) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at com.bigdata.concurrent.FutureTaskMon.run(FutureTaskMon.java:63) at com.bigdata.bop.engine.ChunkedRunningQuery$ChunkFutureTask.run(ChunkedRunningQuery.java:617) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.RuntimeException: com.bigdata.rdf.internal.NotMaterializedException: DummyIV at com.bigdata.rdf.internal.constraints.SPARQLConstraint.accept(SPARQLConstraint.java:128) at com.bigdata.bop.bset.ConditionalRoutingOp$ConditionalRouteTask.call(ConditionalRoutingOp.java:168) at com.bigdata.bop.bset.ConditionalRoutingOp$ConditionalRouteTask.call(ConditionalRoutingOp.java:1) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at com.bigdata.bop.engine.ChunkedRunningQuery$ChunkTask.call(ChunkedRunningQuery.java:1105) ... 9 more Caused by: com.bigdata.rdf.internal.NotMaterializedException: DummyIV at com.bigdata.rdf.internal.AbstractIV.getValue(AbstractIV.java:659) at com.bigdata.rdf.internal.constraints.CompareBOp.accept(CompareBOp.java:154) at com.bigdata.rdf.internal.constraints.XSDBooleanIVValueExpression.get(XSDBooleanIVValueExpression.java:60) at com.bigdata.rdf.internal.constraints.XSDBooleanIVValueExpression.get(XSDBooleanIVValueExpression.java:1) at com.bigdata.rdf.internal.constraints.SPARQLConstraint.accept(SPARQLConstraint.java:111) ... 14 more WARN : 3310 com.bigdata.journal.Journal.executorService3 com.bigdata.util.concurrent.Haltable.logCause(Haltable.java:418): com.bigdata.util.concurrent.Haltable@de16483 : isFirstCause=false : java.lang.InterruptedException java.lang.InterruptedException at com.bigdata.util.concurrent.Haltable.cancel(Haltable.java:220) at com.bigdata.bop.engine.AbstractRunningQuery.cancel(AbstractRunningQuery.java:1024) at com.bigdata.bop.engine.AbstractRunningQuery.halt(AbstractRunningQuery.java:995) at com.bigdata.bop.engine.ChunkedRunningQuery$ChunkTask.call(ChunkedRunningQuery.java:1108) at com.bigdata.bop.engine.ChunkedRunningQuery$ChunkTaskWrapper.run(ChunkedRunningQuery.java:704) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at com.bigdata.concurrent.FutureTaskMon.run(FutureTaskMon.java:63) at com.bigdata.bop.engine.ChunkedRunningQuery$ChunkFutureTask.run(ChunkedRunningQuery.java:617) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)