Re: [Jrdf-general] Concurrent graph access
Status: Inactive
Brought to you by:
newmana
From: Benedikt F. <b.f...@gm...> - 2010-04-09 11:47:47
|
Hi, I have done some testing and it turns out that neither sparql queries nor graph changes can be done concurrently at the moment... I tried using a simple ReadWriteLock (i.e. exclusive write access, multiple read access), using java.util.concurrent.locks.ReentrantReadWriteLock, but I still got bunch of exceptions (not only the ConcurrentModificationException which I mentioned earlier; for a list including stacktraces see attachment). When I switched to using a fully exclusive lock (i.e. only one thread has access no matter what the thread does), the whole thing started to behave... Probably at the cost of performance (not verified). I also started using separate graph instances for all graph access (even the sparql queries); this did not seem to change anything, so there might be a bug in there somewhere like you mentioned. Ben On 29 March 2010 23:31, Benedikt Forchhammer <b.f...@gm...> wrote: > Hi, > Thanks for the quite reply! > > On 29 March 2010 22:07, Andrew Newman <and...@gm...> wrote: >> Yep, it's safest to create a graph for each thread - but I'm not sure >> that's the error you're getting - if you're just doing queries against >> the graph you should get a concurrent modification error - it could be >> a bug in the OptimizingQueryEngine. > > I think it was actually a modification and a query at the same time... > >> You could implement your own locking or I would do it is use something >> like Spring's transaction management to add transactions around >> methods (see the FooService): >> http://static.springsource.org/spring/docs/3.0.x/reference/html/transaction.html > > Thanks for the link. I am a bit hesitant of adding another "big > library" to my project, but I will have a look... > For a start I think I am going to try to use separate graphs for > writes and see if that solves the problem... > > Thank you, > Ben > |