[jboss-jira] [JBoss JIRA] Commented: (JBCACHE-794) Eviction Queue hard limit can cause deadlocks

Owen Taylor (JIRA) jira-events at jboss.com
Tue Oct 10 10:45:42 EDT 2006


    [ http://jira.jboss.com/jira/browse/JBCACHE-794?page=comments#action_12344968 ] 
            
Owen Taylor commented on JBCACHE-794:
-------------------------------------

In terms of 1), right now, I'm skeptical that a system that hits the limit is in a "functional" state:

 - You get many, many warnings before then (from the 98% full check)
 - System performance will be awful, since all tree cache accessing threads will block until the eviction timer wakes up
 - You'll get this bug

But I suppose if this bug was fixed, that situation might be OK for a system that experienced a unexpected burst
of cache activity much greater than the normal load.

Anyways, I don't have a unit test case, and I'm not quite sure how to build one. Something like the following
perhaps:

 * Configure a cache with a LRU eviction policy and maxNodes of 1000
 * Continuously
   - Open a transaction
   - Write values to 1010 nodes
   - Close the transction

If that loop runs quickly enough:

 - The eviction queue will fill (producing a ton of warnings at 98% full)
 - The writing (main) thread will block
 - After a few seconds, the eviction thread will run, try try to evict some values from locked nodes, and deadlock, throwing a TimeoutException
 - The aggregate node-writing throughput after this happens won't be the expected
      200,000 every 5 seconds
   (the maximum rate we can clear the eviction queue), but will instead be about:
     1 every 15 seconds
   (the rate the lock times out)

There may be some subtle reasons why that doesn't quite work, but it should be close. 

> Eviction Queue hard limit can cause deadlocks
> ---------------------------------------------
>
>                 Key: JBCACHE-794
>                 URL: http://jira.jboss.com/jira/browse/JBCACHE-794
>             Project: JBoss Cache
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>    Affects Versions: 1.4.0.SP1
>            Reporter: Owen Taylor
>         Assigned To: Manik Surtani
>             Fix For: 2.0.0, 1.4.0.SP2
>
>
> if the eviction queue fills up, you can get the situation where:
>  - The eviction queue processing task calls evict() which needs to get a write lock on a node
>  - A different thread has a read lock on that node and is blocking to put something into the eviction queue
> Once this starts happening the evication queue thread is procesing events *very* slowly because
> it repeatedly stalls while the lock times out, so the queue will stay full.
> Without digging into the code too much, possible fixes that occur to me include:
>  1) Don't have a hard limit on the size of the eviction queue, and just warn when it gets too big
>  2) Use a timeout of 0 when trying to get the write lock to evict a node, after all, if a node is
>       locked when we try to evict it, it probably shouldn't be evicted anyways.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list