LorenzBuehmann opened a new issue, #1614: URL: https://github.com/apache/jena/issues/1614
### Version 4.7.0-SNAPSHOT ### Question Hi, - Jena 4.7.0-SNAPSHOT - TDB2 - Fuseki ### Part 1 We deployed Wikidata truthy dump and got a query which runs "forever" (probably): ``` sparql PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX wikibase: <http://wikiba.se/ontology#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?item ?itemLabel WHERE { ?item (rdfs:label|skos:altLabel) ?itemLabel; rdf:type wikibase:Property. FILTER(CONTAINS(LCASE(?itemLabel), "border"@en)) } LIMIT 10 ``` There are in total 7 results (when the reordered query terminates). You can see the usage of a property path in the first triple pattern. It looks like the BGP is never reordered here? We also computed the TDB stats: | Pattern | Count | |------------------------------|---------------:| | `rdfs:label` | 510 188 728 | | `skos:altLabel` | 102 554 842 | | `rdf:type wikibase:Property` | 9003 | the size of the second triple pattern would be `9000`, so fairly small. Reordering the triple pattern indeed helps, but the user would have to know this. I can imagine property path query result estimation is difficult ... ### Part 2 With the same query we recognized that the query execution timeout is never considered with that query, so it looks like it's in a branch where query termination isn't checked for maybe when calling `GraphUtils.allNodes(graph)` in `PathLib` L245 ?? relevant part of JStack dump: ``` "qtp123458189-28" #28 prio=5 os_prio=0 cpu=45409.83ms elapsed=198.44s tid=0x00007f3831342000 nid=0x3b runnable [0x00007f1eacefa000] java.lang.Thread.State: RUNNABLE at java.io.RandomAccessFile.seek0([email protected]/Native Method) at java.io.RandomAccessFile.seek([email protected]/RandomAccessFile.java:591) at org.apache.jena.dboe.base.file.BinaryDataFileRandomAccess.seek(BinaryDataFileRandomAccess.java:95) at org.apache.jena.dboe.base.file.BinaryDataFileRandomAccess.read(BinaryDataFileRandomAccess.java:71) at org.apache.jena.dboe.base.file.BinaryDataFileWriteBuffered.read(BinaryDataFileWriteBuffered.java:121) - locked <0x00007f202a7f73f8> (a java.lang.Object) at org.apache.jena.dboe.trans.data.TransBinaryDataFile.read(TransBinaryDataFile.java:197) at org.apache.jena.tdb2.store.nodetable.TReadAppendFileTransport.read(TReadAppendFileTransport.java:74) at org.apache.thrift.transport.TTransport.readAll(TTransport.java:100) at org.apache.thrift.protocol.TCompactProtocol.readByte(TCompactProtocol.java:622) at org.apache.thrift.protocol.TCompactProtocol.readFieldBegin(TCompactProtocol.java:522) at org.apache.thrift.TUnion$TUnionStandardScheme.read(TUnion.java:247) at org.apache.thrift.TUnion$TUnionStandardScheme.read(TUnion.java:227) at org.apache.thrift.TUnion.read(TUnion.java:145) at org.apache.jena.tdb2.store.nodetable.NodeTableTRDF.readNodeFromTable(NodeTableTRDF.java:82) at org.apache.jena.tdb2.store.nodetable.NodeTableNative._retrieveNodeByNodeId(NodeTableNative.java:102) - locked <0x00007f203af76558> (a org.apache.jena.tdb2.store.nodetable.NodeTableTRDF) at org.apache.jena.tdb2.store.nodetable.NodeTableNative.getNodeForNodeId(NodeTableNative.java:52) at org.apache.jena.tdb2.store.nodetable.NodeTableCache._retrieveNodeByNodeId(NodeTableCache.java:208) - locked <0x00007f203af6b168> (a java.lang.Object) at org.apache.jena.tdb2.store.nodetable.NodeTableCache.getNodeForNodeId(NodeTableCache.java:133) at org.apache.jena.tdb2.store.nodetable.NodeTableWrapper.getNodeForNodeId(NodeTableWrapper.java:52) at org.apache.jena.tdb2.store.nodetable.NodeTableInline.getNodeForNodeId(NodeTableInline.java:65) at org.apache.jena.tdb2.lib.TupleLib.triple(TupleLib.java:77) at org.apache.jena.tdb2.lib.TupleLib.triple(TupleLib.java:66) at org.apache.jena.tdb2.lib.TupleLib.lambda$convertToTriples$2(TupleLib.java:48) at org.apache.jena.tdb2.lib.TupleLib$$Lambda$643/0x00007f1e464db4b0.apply(Unknown Source) at org.apache.jena.atlas.iterator.Iter$IterMap.next(Iter.java:417) at org.apache.jena.atlas.iterator.IteratorWrapper.next(IteratorWrapper.java:41) at org.apache.jena.dboe.transaction.txn.IteratorTxnTracker.next(IteratorTxnTracker.java:39) at org.apache.jena.atlas.iterator.Iter$IterMap.next(Iter.java:417) at org.apache.jena.atlas.iterator.Iter$IterMap.next(Iter.java:417) at org.apache.jena.atlas.iterator.Iter.next(Iter.java:1109) at org.apache.jena.util.iterator.WrappedIterator.next(WrappedIterator.java:107) at org.apache.jena.sparql.util.graph.GraphUtils.allNodes(GraphUtils.java:240) at org.apache.jena.sparql.path.PathLib.determineUngroundedStartingSet(PathLib.java:245) at org.apache.jena.sparql.path.PathLib.execUngroundedPath(PathLib.java:182) at org.apache.jena.sparql.path.PathLib.execTriplePath(PathLib.java:128) at org.apache.jena.sparql.path.PathLib.execTriplePath(PathLib.java:108) at org.apache.jena.sparql.engine.iterator.QueryIterPath.nextStage(QueryIterPath.java:47) at org.apache.jena.sparql.engine.iterator.QueryIterRepeatApply.makeNextStage(QueryIterRepeatApply.java:100) at org.apache.jena.sparql.engine.iterator.QueryIterRepeatApply.hasNextBinding(QueryIterRepeatApply.java:60) at org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:116) at org.apache.jena.sparql.engine.main.iterator.QueryIterGraph$QueryIterGraphInner.hasNextBinding(QueryIterGraph.java:121) at org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:116) at org.apache.jena.sparql.engine.iterator.QueryIterRepeatApply.hasNextBinding(QueryIterRepeatApply.java:69) at org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:116) at org.apache.jena.sparql.engine.iterator.QueryIterProcessBinding.hasNextBinding(QueryIterProcessBinding.java:77) at org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:116) at org.apache.jena.tdb2.solver.OpExecutorTDB2.optimizeExecuteQuads(OpExecutorTDB2.java:227) at org.apache.jena.tdb2.solver.OpExecutorTDB2.execute(OpExecutorTDB2.java:164) at org.apache.jena.sparql.engine.main.ExecutionDispatch.visit(ExecutionDispatch.java:66) at org.apache.jena.sparql.algebra.op.OpQuadPattern.visit(OpQuadPattern.java:87) at org.apache.jena.sparql.engine.main.ExecutionDispatch.exec(ExecutionDispatch.java:46) at org.apache.jena.sparql.engine.main.OpExecutor.exec(OpExecutor.java:119) at org.apache.jena.tdb2.solver.OpExecutorTDB2.exec(OpExecutorTDB2.java:87) at org.apache.jena.sparql.engine.main.OpExecutor.execute(OpExecutor.java:230) at org.apache.jena.sparql.engine.main.ExecutionDispatch.visit(ExecutionDispatch.java:130) at org.apache.jena.sparql.algebra.op.OpSequence.visit(OpSequence.java:75) at org.apache.jena.sparql.engine.main.ExecutionDispatch.exec(ExecutionDispatch.java:46) at org.apache.jena.sparql.engine.main.OpExecutor.exec(OpExecutor.java:119) at org.apache.jena.tdb2.solver.OpExecutorTDB2.exec(OpExecutorTDB2.java:87) at org.apache.jena.sparql.engine.main.OpExecutor.execute(OpExecutor.java:391) at org.apache.jena.sparql.engine.main.ExecutionDispatch.visit(ExecutionDispatch.java:267) at org.apache.jena.sparql.algebra.op.OpProject.visit(OpProject.java:47) at org.apache.jena.sparql.engine.main.ExecutionDispatch.exec(ExecutionDispatch.java:46) at org.apache.jena.sparql.engine.main.OpExecutor.exec(OpExecutor.java:119) at org.apache.jena.tdb2.solver.OpExecutorTDB2.exec(OpExecutorTDB2.java:87) at org.apache.jena.sparql.engine.main.OpExecutor.execute(OpExecutor.java:401) at org.apache.jena.sparql.engine.main.ExecutionDispatch.visit(ExecutionDispatch.java:307) at org.apache.jena.sparql.algebra.op.OpSlice.visit(OpSlice.java:50) at org.apache.jena.sparql.engine.main.ExecutionDispatch.exec(ExecutionDispatch.java:46) at org.apache.jena.sparql.engine.main.OpExecutor.exec(OpExecutor.java:119) at org.apache.jena.tdb2.solver.OpExecutorTDB2.exec(OpExecutorTDB2.java:87) at org.apache.jena.sparql.engine.main.OpExecutor.execute(OpExecutor.java:90) at org.apache.jena.sparql.engine.main.QC.execute(QC.java:53) at org.apache.jena.sparql.engine.main.QueryEngineMain.eval(QueryEngineMain.java:55) at org.apache.jena.tdb2.solver.QueryEngineTDB.eval(QueryEngineTDB.java:108) at org.apache.jena.sparql.engine.QueryEngineBase.evaluate(QueryEngineBase.java:171) at org.apache.jena.sparql.engine.QueryEngineBase.createPlan(QueryEngineBase.java:130) at org.apache.jena.sparql.engine.QueryEngineBase.getPlan(QueryEngineBase.java:112) at org.apache.jena.tdb2.solver.QueryEngineTDB$QueryEngineFactoryTDB.create(QueryEngineTDB.java:138) at org.apache.jena.sparql.engine.QueryEngineFactoryWrapper.create(QueryEngineFactoryWrapper.java:49) at org.apache.jena.sparql.exec.QueryExecDataset.getPlan(QueryExecDataset.java:531) at org.apache.jena.sparql.exec.QueryExecDataset.startQueryIterator(QueryExecDataset.java:494) at org.apache.jena.sparql.exec.QueryExecDataset.execute(QueryExecDataset.java:173) at org.apache.jena.sparql.exec.QueryExecDataset.select(QueryExecDataset.java:167) at org.apache.jena.sparql.exec.QueryExecutionAdapter.execSelect(QueryExecutionAdapter.java:115) at org.apache.jena.fuseki.servlets.SPARQLQueryProcessor.executeQuery(SPARQLQueryProcessor.java:374) at org.apache.jena.fuseki.servlets.SPARQLQueryProcessor.execute(SPARQLQueryProcessor.java:279) at org.apache.jena.fuseki.servlets.SPARQLQueryProcessor.executeWithParameter(SPARQLQueryProcessor.java:224) at org.apache.jena.fuseki.servlets.SPARQLQueryProcessor.execute(SPARQLQueryProcessor.java:209) at org.apache.jena.fuseki.servlets.ActionService.executeLifecycle(ActionService.java:58) at org.apache.jena.fuseki.servlets.SPARQLQueryProcessor.execPost(SPARQLQueryProcessor.java:84) at org.apache.jena.fuseki.servlets.ActionProcessor.process(ActionProcessor.java:34) at org.apache.jena.fuseki.servlets.ActionBase.process(ActionBase.java:54) at org.apache.jena.fuseki.servlets.ActionExecLib.execActionSub(ActionExecLib.java:124) at org.apache.jena.fuseki.servlets.ActionExecLib.execAction(ActionExecLib.java:98) at org.apache.jena.fuseki.server.Dispatcher.dispatchAction(Dispatcher.java:164) at org.apache.jena.fuseki.server.Dispatcher.process(Dispatcher.java:156) at org.apache.jena.fuseki.server.Dispatcher.dispatch(Dispatcher.java:83) at org.apache.jena.fuseki.servlets.FusekiFilter.doFilter(FusekiFilter.java:48) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:202) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635) at org.apache.jena.fuseki.servlets.CrossOriginFilter.handle(CrossOriginFilter.java:344) at org.apache.jena.fuseki.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.java:298) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:210) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1635) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:527) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:131) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:578) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:223) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1571) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1383) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1544) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1305) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:822) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) at org.eclipse.jetty.server.Server.handle(Server.java:563) at org.eclipse.jetty.server.HttpChannel.lambda$handle$0(HttpChannel.java:505) at org.eclipse.jetty.server.HttpChannel$$Lambda$768/0x00007f1d7cda2440.dispatch(Unknown Source) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:762) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:497) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:282) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100) at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:421) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produce(AdaptiveExecutionStrategy.java:199) at org.eclipse.jetty.io.ManagedSelector$$Lambda$725/0x00007f1d7d757058.run(Unknown Source) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:933) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1077) at java.lang.Thread.run([email protected]/Thread.java:829) ``` Let me if we can provide more details. -- 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]
