[jbosscache-dev] ClusteredCacheLoader deadlocks and JBCCACHE-1103
Bela Ban
bela at jboss.com
Tue Jun 19 04:04:31 EDT 2007
Is this going to solve JBCACHE-1103 ? I mean, +1 for the lock
refactoring, sounds like it needs to be done anyway. But, because you
have to be thread safe at one point, aren't you deferring the issue to a
later stage ? At one point you have to acquire a lock to prevent
concurrent loading, and I'm afraid we'll have the same issue.
But, wait, if you defer lock acquisition till after the synchronous
cluster method call, you should be fine. Is this what you have in mind ?
On the same topic: I looked into interrupting clustered method calls in
JGroups (http://jira.jboss.com/jira/browse/JGRP-533), and came to the
conclusion that it isn't feasible. When a thread is blocked on
FC.down(), waiting for credits, then I can interrupt it, but it will go
right back in its loop waiting for credits, therefore blocking again.
Unless I change the loop condition (running & waiting-for-credits), the
thread will always block if there aren't enough credits available.
Thoughts ?
Manik Surtani wrote:
>
>
> Ok, I spent a bit of time investigating this, and the original sync
> blocks in the CacheLoaderInterceptor, superceded by the
> synchronization on an Fqn in subsequent versions are all hacks to get
> around the fact that some cache loader implementations themselves
> aren't thread safe.
>
> I wrote a test to check the thread safety of cache loader impls, and
> most of what we have fail. I patched the DummyInMemoryCacheLoader to
> be thread safe (a lot of synchronization within the impl) and removed
> the unnecessary locks in the interceptors and things work fine. I
> tried this with some of the few thread-safe cache loader impls we have
> (BDBJE, for example) and this worked well as well.
>
> So what I propose is this:
>
> 1) Patch CLI to NOT use the Fqn locks (in BaseCacheLoaderInterceptor)
> 2) Make sure we acquire locks (lock() call up the interceptor stack)
> *before* attempting to load node, but after creating temp node
> 3) Make sure cache loader impls are thread safe
> 4) Add thread safety test to CacheLoaderTestBase
> 5) Patch loaders that aren't threadsafe and fail test in (4) -
> FileCacheLoader, JDBCCacheLoader, etc.
>
> I'm going to do this on my local checkout of HEAD and run the
> regression tests overnight. If this works, I suggest backporting this
> to 1.4.x and regressing there.
>
> WDYT?
--
Bela Ban
Lead JGroups / JBoss Clustering team
JBoss - a division of Red Hat
More information about the jbosscache-dev
mailing list