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

Simon Helsen commented on JENA-131:
-----------------------------------

ignore the previous comment. Even without aborting queries, I run into the same 
issue. However, I looked at it more carefully. I think the problem is that in 
the class Transaction, the methods

   public void addIterator(Iterator<?> iter)       { iterators.add(iter) ; }
    public void removeIterator(Iterator<?> iter)    { iterators.remove(iter) ; }

are not synchronized. Or alternatively, that the object iterators is not 
synchronized. Looking at the original stack trace from the description. The 
only way the index of out bounds can happen there is if there is a concurrent 
modification of the iterators List object. 

I will try to patch this and test locally
                
> TxTDB problem during concurrent execution
> -----------------------------------------
>
>                 Key: JENA-131
>                 URL: https://issues.apache.org/jira/browse/JENA-131
>             Project: Jena
>          Issue Type: Bug
>          Components: TDB
>         Environment: arq-2.8.9-20111001.145524-39 and 
> tx-tdb-0.9.0-20111006.082548-13 on IBM JRE 6
>            Reporter: Simon Helsen
>
> In a massive concurrent test with many reads and writes, I am running into 
> the problems shown below. I suspect the problem only occurs if a read and 
> write are trying to operate on the same data at the same time, i.e. the 
> transactions don't isolate enough. My test case is inside the framework. I 
> currently have no test case for you to try, but I am hoping you can see 
> something by inspecting the stack trace
> ModelWriteActivity: 1579ms
> 17:46:27,183 [1948218399@qtp-533667791-14]  WARN 
> hpl.jena.sparql.engine.iterator.QueryIteratorCheck  - Open iterator: 
> QueryIterConcat/55657
> 17:46:27,254 [1948218399@qtp-533667791-14]  WARN 
> hpl.jena.sparql.engine.iterator.QueryIteratorCheck  - Open iterator: 
> QueryIterSingleton/55658
> 17:46:27,257 [1948218399@qtp-533667791-14]  WARN 
> hpl.jena.sparql.engine.iterator.QueryIteratorCheck  - Open iterator: 
> QueryIterPeek/55659
> 17:46:27,261 [1948218399@qtp-533667791-14]  WARN 
> hpl.jena.sparql.engine.iterator.QueryIteratorCheck  - Open iterator: 
> QueryIterTDB/55660
> 17:46:27,264 [1948218399@qtp-533667791-14]  WARN 
> hpl.jena.sparql.engine.iterator.QueryIteratorCheck  - Open iterator: 
> QueryIterOptionalIndex/55661
> 17:46:27,335 [1948218399@qtp-533667791-14]  WARN 
> hpl.jena.sparql.engine.iterator.QueryIteratorCheck  - Open iterator: 
> QueryIterOptionalIndex/55662
> 17:46:27,338 [1948218399@qtp-533667791-14]  WARN 
> hpl.jena.sparql.engine.iterator.QueryIteratorCheck  - Open iterator: 
> QueryIterDefaulting/55803
> 17:46:27,395 [1948218399@qtp-533667791-14]  WARN 
> hpl.jena.sparql.engine.iterator.QueryIteratorCheck  - Open iterator: 
> QueryIterDefaulting/55807
> 17:46:27,399 [1948218399@qtp-533667791-14]  WARN 
> hpl.jena.sparql.engine.iterator.QueryIteratorCheck  - Open iterator: 
> QueryIterPeek/55808
> 17:46:27,403 [1948218399@qtp-533667791-14]  WARN 
> hpl.jena.sparql.engine.iterator.QueryIteratorCheck  - Open iterator: 
> QueryIterTDB/55809
> 17:46:27,406 [1948218399@qtp-533667791-14]  WARN 
> hpl.jena.sparql.engine.iterator.QueryIteratorCheck  - Open iterator: 
> QueryIterAssign/55810
> 17:46:27,410 [1948218399@qtp-533667791-14]  WARN 
> hpl.jena.sparql.engine.iterator.QueryIteratorCheck  - Open iterator: 
> QueryIterSingleton/55811
> 17:46:27,490 [1948218399@qtp-533667791-14]  WARN 
> hpl.jena.sparql.engine.iterator.QueryIteratorCheck  - Open iterator: 
> QueryIterPeek/55812
> 17:46:27,493 [1948218399@qtp-533667791-14]  WARN 
> hpl.jena.sparql.engine.iterator.QueryIteratorCheck  - Open iterator: 
> QueryIterTDB/55813
> 17:46:27,497 [1948218399@qtp-533667791-14]  WARN 
> hpl.jena.sparql.engine.iterator.QueryIteratorCheck  - Open iterator: 
> QueryIterOptionalIndex/55814
> 17:46:27,502 [1948218399@qtp-533667791-14]  WARN 
> hpl.jena.sparql.engine.iterator.QueryIteratorCheck  - Open iterator: 
> QueryIterOptionalIndex/55815
> 17:46:27,507 [1948218399@qtp-533667791-14] ERROR com.ibm.team.jfs             
>                        - Originating Exception:
> java.lang.IndexOutOfBoundsException: Index: 20, Size: 18
>       at java.util.ArrayList.remove(ArrayList.java:552)
>       at java.util.ArrayList.remove(ArrayList.java:572)
>       at 
> com.hp.hpl.jena.tdb.transaction.Transaction.removeIterator(Transaction.java:188)
>       at 
> com.hp.hpl.jena.tdb.transaction.BlockMgrJournal.endIterator(BlockMgrJournal.java:312)
>       at 
> com.hp.hpl.jena.tdb.transaction.BlockMgrJournal.endIterator(BlockMgrJournal.java:313)
>       at 
> com.hp.hpl.jena.tdb.base.block.BlockMgrWrapper.endIterator(BlockMgrWrapper.java:134)
>       at 
> com.hp.hpl.jena.tdb.base.recordbuffer.RecordRangeIterator.close(RecordRangeIterator.java:155)
>       at 
> com.hp.hpl.jena.tdb.base.recordbuffer.RecordRangeIterator.hasNext(RecordRangeIterator.java:112)
>       at org.openjena.atlas.iterator.Iter$4.hasNext(Iter.java:274)
>       at 
> com.hp.hpl.jena.tdb.sys.DatasetControlMRSW$IteratorCheckNotConcurrent.hasNext(DatasetControlMRSW.java:119)
>       at org.openjena.atlas.iterator.Iter$3.hasNext(Iter.java:164)
>       at org.openjena.atlas.iterator.Iter$6.hasNext(Iter.java:359)
>       at org.openjena.atlas.iterator.Iter$3.hasNext(Iter.java:164)
>       at org.openjena.atlas.iterator.Iter$4.hasNext(Iter.java:274)
>       at org.openjena.atlas.iterator.Iter$3.hasNext(Iter.java:164)
>       at org.openjena.atlas.iterator.Iter.hasNext(Iter.java:742)
>       at 
> org.openjena.atlas.iterator.RepeatApplyIterator.hasNext(RepeatApplyIterator.java:58)
>       at 
> org.openjena.atlas.iterator.RepeatApplyIterator.hasNext(RepeatApplyIterator.java:46)
>       at 
> org.openjena.atlas.iterator.RepeatApplyIterator.hasNext(RepeatApplyIterator.java:46)
>       at 
> org.openjena.atlas.iterator.RepeatApplyIterator.hasNext(RepeatApplyIterator.java:46)
>       at 
> org.openjena.atlas.iterator.RepeatApplyIterator.hasNext(RepeatApplyIterator.java:46)
>       at org.openjena.atlas.iterator.Iter$4.hasNext(Iter.java:274)
>       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:107)
>       at 
> com.hp.hpl.jena.sparql.engine.iterator.QueryIterRepeatApply.makeNextStage(QueryIterRepeatApply.java:106)
>       at 
> com.hp.hpl.jena.sparql.engine.iterator.QueryIterRepeatApply.hasNextBinding(QueryIterRepeatApply.java:65)
>       at 
> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:107)
>       at 
> com.hp.hpl.jena.sparql.engine.iterator.QueryIterRepeatApply.makeNextStage(QueryIterRepeatApply.java:106)
>       at 
> com.hp.hpl.jena.sparql.engine.iterator.QueryIterRepeatApply.hasNextBinding(QueryIterRepeatApply.java:65)
>       at 
> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:107)
>       at 
> com.hp.hpl.jena.tdb.solver.OpExecutorTDB.optimizeExecuteQuads(OpExecutorTDB.java:215)
>       at 
> com.hp.hpl.jena.tdb.solver.OpExecutorTDB.execute(OpExecutorTDB.java:152)
>       at 
> com.hp.hpl.jena.sparql.engine.main.ExecutionDispatch.visit(ExecutionDispatch.java:63)
>       at 
> com.hp.hpl.jena.sparql.algebra.op.OpQuadPattern.visit(OpQuadPattern.java:97)
>       at 
> com.hp.hpl.jena.sparql.engine.main.ExecutionDispatch.exec(ExecutionDispatch.java:43)
>       at 
> com.hp.hpl.jena.sparql.engine.main.OpExecutor.executeOp(OpExecutor.java:119)
>       at 
> com.hp.hpl.jena.sparql.engine.main.OpExecutor.execute(OpExecutor.java:208)
>       at 
> com.hp.hpl.jena.sparql.engine.main.ExecutionDispatch.visit(ExecutionDispatch.java:105)
>       at 
> com.hp.hpl.jena.sparql.algebra.op.OpSequence.visit(OpSequence.java:73)
>       at 
> com.hp.hpl.jena.sparql.engine.main.ExecutionDispatch.exec(ExecutionDispatch.java:45)
>       at 
> com.hp.hpl.jena.sparql.engine.main.OpExecutor.executeOp(OpExecutor.java:119)
>       at 
> com.hp.hpl.jena.sparql.engine.main.OpExecutor.execute(OpExecutor.java:464)
>       at 
> com.hp.hpl.jena.sparql.engine.main.ExecutionDispatch.visit(ExecutionDispatch.java:246)
>       at com.hp.hpl.jena.sparql.algebra.op.OpAssign.visit(OpAssign.java:116)
>       at 
> com.hp.hpl.jena.sparql.engine.main.ExecutionDispatch.exec(ExecutionDispatch.java:45)
>       at 
> com.hp.hpl.jena.sparql.engine.main.OpExecutor.executeOp(OpExecutor.java:119)
>       at 
> com.hp.hpl.jena.sparql.engine.main.OpExecutor.execute(OpExecutor.java:92)
>       at com.hp.hpl.jena.sparql.engine.main.QC.execute(QC.java:52)
>       at 
> com.hp.hpl.jena.sparql.engine.main.iterator.QueryIterUnion.nextStage(QueryIterUnion.java:55)
>       at 
> com.hp.hpl.jena.sparql.engine.iterator.QueryIterRepeatApply.makeNextStage(QueryIterRepeatApply.java:113)
>       at 
> com.hp.hpl.jena.sparql.engine.iterator.QueryIterRepeatApply.hasNextBinding(QueryIterRepeatApply.java:65)
>       at 
> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:107)
>       at 
> com.hp.hpl.jena.sparql.engine.iterator.QueryIterConvert.hasNextBinding(QueryIterConvert.java:65)
>       at 
> com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:107)
>       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:107)
>       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:107)
>       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:107)
>       at 
> com.hp.hpl.jena.sparql.engine.ResultSetStream.hasNext(ResultSetStream.java:70)
>       at 
> com.hp.hpl.jena.sparql.engine.QueryExecutionBase.execDescribe(QueryExecutionBase.java:278)
>       at 
> com.hp.hpl.jena.sparql.engine.QueryExecutionBase.execDescribe(QueryExecutionBase.java:256)
>         <snip>
> DataSetReadActivity: 1249ms

--
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

        

Reply via email to