On Fri, 2007-06-15 at 09:09 +0200, Bela Ban wrote:
I looked at 1103 in a bit more detail and concluded that the change
in
JGroups (
http://jira.jboss.com/jira/browse/JGRP-533) would not help. The
underlying issue is that (a) 2.4.1 has a single incoming request queue
and (b) the ClusteredCacheLoader holds a lock while making a
cluster-wide call. Let's look at an example:
1. The CCL acquires a lock on Fqn-A and makes a cluster-wide call
2. We get a replication message for A (RM-A), so someone made an
update to A and is now trying to commit the change. RM-A tries to
acquire the lock on A, but is blocked because the CCL holds it.
3. Now a result for the CCL call arrives. It is not processed (single
queue) until RM-A gets processed. However, that's not the case
until the CCL call completes. In this case, the only way for the
CCL call to complete is via a timeout, as it will never get its
results.
That should be ok though because the CCL will still timeout on that
lock. The original problem was that the same thread with the CCL lock
was blocking on an FC lock so that the CCL lock would never be released
(since the FC lock was higher in the stack).
-Jason
--
Jason T. Greene
Lead, POJO Cache
JBoss, a division of Red Hat