[ 
https://issues.apache.org/jira/browse/HBASE-2447?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12860449#action_12860449
 ] 

Todd Lipcon commented on HBASE-2447:
------------------------------------

bq. hasWaiters(queueEmpty) before queueEmpty.signal

That seems really dirty to me... what's the problem you see with the flag? It's 
an extremely common practice to set a condition before signalling and check the 
condition before waiting.

(your proposed solution also doesn't work if we call addToSyncQueue before the 
syncer thread has started, probably not possible in current code, but still 
worth avoiding the problem)

> LogSyncer.addToSyncQueue doesn't check if syncer is still running before 
> waiting
> --------------------------------------------------------------------------------
>
>                 Key: HBASE-2447
>                 URL: https://issues.apache.org/jira/browse/HBASE-2447
>             Project: Hadoop HBase
>          Issue Type: Bug
>          Components: regionserver
>            Reporter: Todd Lipcon
>            Assignee: Todd Lipcon
>            Priority: Critical
>         Attachments: hbase-2447.txt
>
>
> In testing GC pause scenarios with kill -STOP, I got the regionserver into a 
> situation where it was blocked forever while shutting down (also blocking 
> clients, since the RPCs were still pinging). The root issue is that, if the 
> log syncer has an error just as more edits are being done, addToSyncQueue() 
> can go to sleep waiting on a syncer which has just died.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to