You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jena.apache.org by François-Paul Servant <fr...@gmail.com> on 2016/11/06 10:00:21 UTC

Oops forget that (was Re: ConcurrentModificationException in JSONLD output (3.1.1 and 3.1.0))

Hi,

Andy, thank you very much for your answer, which helped to open my eyes. The problem is completely in the calling code, nothing wrong with the writer. Sorry for this false alert.

fps


> Le 6 nov. 2016 à 10:42, Andy Seaborne <an...@apache.org> a écrit :
> 
> Hi there,
> 
> In TDB1, a write transaction has a separate internal dataset object, whereas readers of the same committed state (epoch) share an internal dataset which is read-only.
> 
> The DatasetControlMRSW applies to each internal dataset.
> 
> The trigger you have come across is checking that the epoch the iterator started with is the same as it is currently when hasNext is called. It has found that the epoch has advanced.
> 
> This can occur if
> 
> 1/ multiple threads, not in a transaction, and there is an update somewhere.
> 
> 2/ There is an update on the dataset inside an iterator loop.  That does not seem to be possible here as its an iterator inside the JSON-LD writer.
> 
> 3/ if there multiple threads are acting on same transaction; you need to handle the Transaction object directly to cause this.
> 
> The problem is not at the point the stacktrace records - that only gives when it was detected.
> 
> 
> 	Andy
> 
> 
> On 06/11/16 00:41, François-Paul Servant wrote:
>> Hi,
>> 
>> I've just got a ConcurrentModificationException outputing jsonld, in the following circumstance: trying to output the content of a given named graph of a TDB store, twice at the same time (output called from a jersey servlet).
>> The problem exists in 3.1.1 and 3.1.0. Stacktraces below.
>> I don’t understand. Sorry to see this only now.
>> 
>> fps
>> 
>> 
>> StackTrace with 3.1.0:
>> GRAVE: Servlet.service() for servlet [Jersey Web Application] in context with path [/rasse] threw exception [java.util.ConcurrentModificationException: Iterator: started at 205, now 206] with root cause
>> java.util.ConcurrentModificationException: Iterator: started at 205, now 206
>> 	at org.apache.jena.tdb.sys.DatasetControlMRSW.policyError(DatasetControlMRSW.java:157)
>> 	at org.apache.jena.tdb.sys.DatasetControlMRSW.access$000(DatasetControlMRSW.java:32)
>> 	at org.apache.jena.tdb.sys.DatasetControlMRSW$IteratorCheckNotConcurrent.checkCourrentModification(DatasetControlMRSW.java:110)
>> 	at org.apache.jena.tdb.sys.DatasetControlMRSW$IteratorCheckNotConcurrent.hasNext(DatasetControlMRSW.java:118)
>> 	at org.apache.jena.atlas.iterator.Iter$2.hasNext(Iter.java:265)
>> 	at org.apache.jena.atlas.iterator.Iter$2.hasNext(Iter.java:265)
>> 	at org.apache.jena.atlas.iterator.Iter.hasNext(Iter.java:870)
>> 	at org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
>> 	at org.apache.jena.atlas.iterator.Iter.apply(Iter.java:172)
>> 	at org.apache.jena.atlas.iterator.Iter.apply(Iter.java:781)
>> 	at org.apache.jena.riot.out.JsonLDWriter.addProperties(JsonLDWriter.java:172)
>> 	at org.apache.jena.riot.out.JsonLDWriter.serialize(JsonLDWriter.java:84)
>> 	at org.apache.jena.riot.out.JsonLDWriter.write(JsonLDWriter.java:68)
>> 	at org.apache.jena.riot.out.JsonLDWriter.write(JsonLDWriter.java:78)
>> 	at org.apache.jena.riot.system.RiotLib$WriterAdapter.write(RiotLib.java:376)
>> 	at org.apache.jena.riot.adapters.RDFWriterRIOT.write(RDFWriterRIOT.java:82)
>> 	at org.apache.jena.rdf.model.impl.ModelCom.write(ModelCom.java:355)
>> 	at com.renault.rasse.resources.AbstractRasseResource.writeModelConvertingEuro5Uris2RasseOnes(AbstractRasseResource.java:736)
>> 	at com.renault.rasse.resources.AbstractRasseResource$1.write(AbstractRasseResource.java:624)
>> 	at org.glassfish.jersey.message.internal.StreamingOutputProvider.writeTo(StreamingOutputProvider.java:78)
>> 	at org.glassfish.jersey.message.internal.StreamingOutputProvider.writeTo(StreamingOutputProvider.java:60)
>> 	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:265)
>> 	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250)
>> 	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
>> 	at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:106)
>> 	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
>> 	at org.glassfish.jersey.server.mvc.internal.TemplateMethodInterceptor.aroundWriteTo(TemplateMethodInterceptor.java:77)
>> 	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
>> 	at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:86)
>> 	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
>> 	at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1130)
>> 	at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:711)
>> 	at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:444)
>> 	at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:434)
>> 	at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:329)
>> 	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
>> 	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
>> 	at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
>> 	at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
>> 	at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
>> 	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
>> 	at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305)
>> 	at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)
>> 	at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473)
>> 	at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
>> 	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
>> 	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
>> 	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
>> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
>> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>> 	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
>> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
>> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
>> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
>> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
>> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
>> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
>> 	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
>> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
>> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
>> 	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081)
>> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
>> 	at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
>> 	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
>> 	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
>> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>> 	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>> 	at java.lang.Thread.run(Thread.java:745)
>> 
>> with 3.1.1
>> GRAVE: Servlet.service() for servlet [Jersey Web Application] in context with path [/rasse] threw exception [java.util.ConcurrentModificationException: Iterator: started at 25, now 26] with root cause
>> java.util.ConcurrentModificationException: Iterator: started at 25, now 26
>> 	at org.apache.jena.tdb.sys.DatasetControlMRSW.policyError(DatasetControlMRSW.java:157)
>> 	at org.apache.jena.tdb.sys.DatasetControlMRSW.access$000(DatasetControlMRSW.java:32)
>> 	at org.apache.jena.tdb.sys.DatasetControlMRSW$IteratorCheckNotConcurrent.checkCourrentModification(DatasetControlMRSW.java:110)
>> 	at org.apache.jena.tdb.sys.DatasetControlMRSW$IteratorCheckNotConcurrent.hasNext(DatasetControlMRSW.java:118)
>> 	at org.apache.jena.atlas.iterator.Iter$2.hasNext(Iter.java:265)
>> 	at org.apache.jena.atlas.iterator.Iter$2.hasNext(Iter.java:265)
>> 	at org.apache.jena.atlas.iterator.Iter.hasNext(Iter.java:870)
>> 	at org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
>> 	at org.apache.jena.atlas.iterator.Iter$2.hasNext(Iter.java:265)
>> 	at org.apache.jena.atlas.iterator.Iter.hasNext(Iter.java:870)
>> 	at org.apache.jena.riot.writer.JenaRDF2JSONLD.parse(JenaRDF2JSONLD.java:47)
>> 	at org.apache.jena.riot.writer.JsonLDWriter.serialize(JsonLDWriter.java:183)
>> 	at org.apache.jena.riot.writer.JsonLDWriter.write(JsonLDWriter.java:136)
>> 	at org.apache.jena.riot.writer.JsonLDWriter.write(JsonLDWriter.java:142)
>> 	at org.apache.jena.riot.system.RiotLib$WriterAdapter.write(RiotLib.java:376)
>> 	at org.apache.jena.riot.adapters.RDFWriterRIOT.write(RDFWriterRIOT.java:82)
>> 	at org.apache.jena.rdf.model.impl.ModelCom.write(ModelCom.java:357)
>> 	at com.renault.rasse.resources.AbstractRasseResource.writeModelConvertingEuro5Uris2RasseOnes(AbstractRasseResource.java:736)
>> 	at com.renault.rasse.resources.AbstractRasseResource$1.write(AbstractRasseResource.java:624)
>> 	at org.glassfish.jersey.message.internal.StreamingOutputProvider.writeTo(StreamingOutputProvider.java:78)
>> 	at org.glassfish.jersey.message.internal.StreamingOutputProvider.writeTo(StreamingOutputProvider.java:60)
>> 	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:265)
>> 	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250)
>> 	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
>> 	at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:106)
>> 	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
>> 	at org.glassfish.jersey.server.mvc.internal.TemplateMethodInterceptor.aroundWriteTo(TemplateMethodInterceptor.java:77)
>> 	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
>> 	at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:86)
>> 	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
>> 	at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1130)
>> 	at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:711)
>> 	at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:444)
>> 	at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:434)
>> 	at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:329)
>> 	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
>> 	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
>> 	at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
>> 	at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
>> 	at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
>> 	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
>> 	at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305)
>> 	at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)
>> 	at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473)
>> 	at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
>> 	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
>> 	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
>> 	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
>> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
>> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>> 	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
>> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
>> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
>> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
>> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
>> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
>> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
>> 	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
>> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
>> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
>> 	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081)
>> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
>> 	at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
>> 	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
>> 	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
>> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>> 	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>> 	at java.lang.Thread.run(Thread.java:745)
>> 
>> 
>>