[ 
https://issues.apache.org/jira/browse/JENA-1719?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16875732#comment-16875732
 ] 

Dave Reynolds commented on JENA-1719:
-------------------------------------

Was able to reduce this to a simpler test case which doesn't require fuseki or 
the full RDFS rule set and find a workaround.

Test case and workaround are in [https://github.com/apache/jena/pull/580] - as 
it says there this doesn't fix the deeper underlying problem but does at least 
work around it. The testcase in the PR avoids using tdb2 so that it can be 
included as a reasoner test in jena-core but a separate "integration" test (not 
in the PR) which more closely matches the original report and uses tdb2 does 
pass with this PR applied. 

 

> Fuseki with TDB2 using RDFS inference throws exception on queries
> -----------------------------------------------------------------
>
>                 Key: JENA-1719
>                 URL: https://issues.apache.org/jira/browse/JENA-1719
>             Project: Apache Jena
>          Issue Type: Bug
>    Affects Versions: Jena 3.10.0, Jena 3.11.0
>            Reporter: Mike Welch
>            Priority: Major
>         Attachments: data.nt, example.owl, example.ttl
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> Configuring an InfModel with an RDFS reasoner and a TDB2 dataset throws the 
> following exception when issuing a query:
>  
> {noformat}
> org.apache.jena.dboe.transaction.txn.TransactionException: Iterator used 
> inside a different transaction
>  at 
> org.apache.jena.tdb2.store.IteratorTxnTracker.check(IteratorTxnTracker.java:53)
>  at 
> org.apache.jena.tdb2.store.IteratorTxnTracker.hasNext(IteratorTxnTracker.java:41)
>  at org.apache.jena.atlas.iterator.Iter$2.hasNext(Iter.java:265)
>  at org.apache.jena.atlas.iterator.Iter.hasNext(Iter.java:903)
>  at 
> org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
>  at 
> org.apache.jena.util.iterator.NiceIterator$1.hasNext(NiceIterator.java:105)
>  at 
> org.apache.jena.util.iterator.NiceIterator$1.hasNext(NiceIterator.java:105)
>  at 
> org.apache.jena.reasoner.rulesys.impl.TopLevelTripleMatchFrame.nextMatch(TopLevelTripleMatchFrame.java:55)
>  at 
> org.apache.jena.reasoner.rulesys.impl.LPInterpreter.run(LPInterpreter.java:328)
>  at 
> org.apache.jena.reasoner.rulesys.impl.LPInterpreter.next(LPInterpreter.java:190)
>  at org.apache.jena.reasoner.rulesys.impl.Generator.pump(Generator.java:252)
>  at org.apache.jena.reasoner.rulesys.impl.Generator.pump(Generator.java:239)
>  at 
> org.apache.jena.reasoner.rulesys.impl.LPBRuleEngine.pump(LPBRuleEngine.java:359)
>  at 
> org.apache.jena.reasoner.rulesys.impl.LPTopGoalIterator.moveForward(LPTopGoalIterator.java:107)
>  at 
> org.apache.jena.reasoner.rulesys.impl.LPTopGoalIterator.hasNext(LPTopGoalIterator.java:223)
>  at 
> org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
>  at 
> org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
>  at 
> org.apache.jena.util.iterator.FilterIterator.hasNext(FilterIterator.java:55)
>  at 
> org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
>  at 
> org.apache.jena.util.iterator.FilterIterator.hasNext(FilterIterator.java:55)
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIterTriplePattern$TripleMapper.hasNextBinding(QueryIterTriplePattern.java:135)
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIterRepeatApply.hasNextBinding(QueryIterRepeatApply.java:74)
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIterBlockTriples.hasNextBinding(QueryIterBlockTriples.java:63)
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIterSlice.hasNextBinding(QueryIterSlice.java:76)
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:39)
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:39)
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>  at 
> org.apache.jena.sparql.engine.ResultSetStream.hasNext(ResultSetStream.java:74)
>  at 
> org.apache.jena.sparql.engine.ResultSetCheckCondition.hasNext(ResultSetCheckCondition.java:55)
>  at 
> org.apache.jena.sparql.resultset.ResultSetApply.apply(ResultSetApply.java:38)
>  at 
> org.apache.jena.riot.resultset.rw.ResultSetWriterJSON.write(ResultSetWriterJSON.java:82)
>  at 
> org.apache.jena.riot.resultset.rw.ResultsWriter.write(ResultsWriter.java:127)
>  at 
> org.apache.jena.riot.resultset.rw.ResultsWriter.write(ResultsWriter.java:97)
>  at 
> org.apache.jena.fuseki.servlets.ResponseResultSet.lambda$generalOutput$1(ResponseResultSet.java:209)
>  at 
> org.apache.jena.fuseki.servlets.ResponseResultSet.output(ResponseResultSet.java:225)
>  at 
> org.apache.jena.fuseki.servlets.ResponseResultSet.generalOutput(ResponseResultSet.java:215)
>  at 
> org.apache.jena.fuseki.servlets.ResponseResultSet.doResponseResultSet$(ResponseResultSet.java:176)
>  at 
> org.apache.jena.fuseki.servlets.ResponseResultSet.doResponseResultSet(ResponseResultSet.java:85)
>  at 
> org.apache.jena.fuseki.servlets.SPARQL_Query.sendResults(SPARQL_Query.java:404)
>  at 
> org.apache.jena.fuseki.servlets.SPARQL_Query.execute(SPARQL_Query.java:286)
>  at 
> org.apache.jena.fuseki.servlets.SPARQL_Query.executeWithParameter(SPARQL_Query.java:238)
>  at 
> org.apache.jena.fuseki.servlets.SPARQL_Query.perform(SPARQL_Query.java:213)
>  at 
> org.apache.jena.fuseki.servlets.ActionService.executeLifecycle(ActionService.java:243)
>  at 
> org.apache.jena.fuseki.servlets.ActionService.execCommonWorker(ActionService.java:134)
>  at org.apache.jena.fuseki.servlets.ActionBase.doCommon(ActionBase.java:74)
>  at 
> org.apache.jena.fuseki.servlets.FusekiFilter.doFilter(FusekiFilter.java:73)
>  at 
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
>  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:125)
>  at 
> org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
>  at 
> org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
>  at 
> org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
>  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:383)
>  at 
> org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
>  at 
> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
>  at 
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
>  at 
> org.apache.jena.fuseki.servlets.CrossOriginFilter.handle(CrossOriginFilter.java:285)
>  at 
> org.apache.jena.fuseki.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.java:248)
>  at 
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1634)
>  at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
>  at 
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
>  at 
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
>  at 
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
>  at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
>  at 
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
>  at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
>  at 
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1340)
>  at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
>  at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
>  at 
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
>  at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
>  at 
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1242)
>  at 
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
>  at 
> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:740)
>  at 
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
>  at org.eclipse.jetty.server.Server.handle(Server.java:503)
>  at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:364)
>  at 
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
>  at 
> org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
>  at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
>  at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
>  at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
>  at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
>  at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
>  at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:132)
>  at 
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
>  at 
> org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
>  at java.lang.Thread.run(Thread.java:748){noformat}
>  
> Steps to reproduce (see attachments for files)
>  
> 1. Generate a tdb2 database from the toy data
> {code:java}
> $tdb2.tdbloader --loc=graph data.nt{code}
> 2. Start fuseki-server with the attached config (adjust path to ontology file 
> in the config accordingly)
> {code:java}
> $fuseki-server --config=example.ttl{code}
> 3. Issue a small query
> {code:java}
> $s-query --server=http://localhost:3030/example "select * where {?s a 
> <http://example.com/ns/Person>} limit 10"{code}
> 4. Issue another query
> {code:java}
> $s-query --server=http://localhost:3030/example "select * where {?s a 
> <http://example.com/ns/Person>} limit 1000"{code}
> At this point, I consistently get this response:
> {code:java}
> Error 500: Iterator used inside a different transaction
> 500: 
> http://localhost:3030/example?query=select+%2A+where+%7B%3Fs+a+%3Chttp%3A%2F%2Fexample.com%2Fns%2FPerson%3E%7D+limit+1000{code}
> And on the server log see the above stack trace.  I have encountered this in 
> both the 3.11 and 3.10 releases.  I have not tried on earlier versions.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to