[ 
https://issues.apache.org/jira/browse/KAFKA-749?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13571067#comment-13571067
 ] 

Sriram Subramanian commented on KAFKA-749:
------------------------------------------

Took a look at this. 

1. This adds another layer of locking to the Request queue which in itself is a 
Blocking queue implementation. This does not seem very efficient. Either we 
implement our blocking queue or use the api.
2. Having said that, it seems a lot easier to just purge the queue. Is this not 
an option? 
3. If 2 is not possible, a more elegant way is to use the poison pill approach. 
We shutdown the socket server, and enqueue a shutdown request to the queue. 
Each request handler thread dequeues the request, checks it is is shutdown 
request, if so re-queues it and exits.
                
> Bug in socket server shutdown logic makes the broker hang on shutdown until 
> it has to be killed
> -----------------------------------------------------------------------------------------------
>
>                 Key: KAFKA-749
>                 URL: https://issues.apache.org/jira/browse/KAFKA-749
>             Project: Kafka
>          Issue Type: Bug
>          Components: network
>    Affects Versions: 0.8
>            Reporter: Neha Narkhede
>            Assignee: Neha Narkhede
>            Priority: Blocker
>              Labels: bugs, p1
>         Attachments: kafka-749-v1.patch
>
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> The current shutdown logic of the server shuts down the io threads first, 
> followed by acceptor and finally processor threads. The shutdown API of io 
> threads enqueues a special AllDone command into the common request queue. It 
> shuts down the io thread when it dequeues this special all done command. What 
> can happen is that while this shutdown command processing is happening on the 
> io threads, the network/processor threads can still accept new connections 
> and requests and will add those new requests to the request queue. That 
> means, more requests can be enqueued after the AllDone command. What happens 
> is that after the io threads have shutdown, there is no thread available to 
> dequeue from the request queue. So the processor threads can hang while 
> adding new requests to a full request queue, thereby blocking the server from 
> shutting down.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to