[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-3575?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated ZOOKEEPER-3575:
--------------------------------------
    Labels: pull-request-available  (was: )

> Moving sending packets in Learner to a separate thread
> ------------------------------------------------------
>
>                 Key: ZOOKEEPER-3575
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-3575
>             Project: ZooKeeper
>          Issue Type: Sub-task
>          Components: server
>    Affects Versions: 3.6.0
>            Reporter: Jie Huang
>            Priority: Major
>              Labels: pull-request-available
>
> After changing to close the socket asynchronously, the shutdown process can 
> proceed while the socket is being closed. However, the shutdown process could 
> still stall if a thread being shutdown is writing to the socket. For example, 
> the SyncRequestProcessor flushes all ACK packets in queue when shutdown is 
> called, which calls Learner.writePacket(), which will not return (with an IO 
> exception) until the socket finishes closing. So it's still delayed by the 
> socket closing time. 
> To get around the delay, we move Learner.writePacket() to a separate thread. 
> The tricky part is to handle the IO exception thrown by 
> Learner.writePacket(). Currently, the IO exception is caught by different 
> callers in different ways. For example, if an IO exception caught during 
> revalidateSession, the session is closed and removed. In other cases, like in 
> FollowerRequestProcessor and SendAckRequestProcess, the quorum socket is 
> closed when the IO exception is caught. After moving it to a thread, the 
> callers won't be able to catch and handle the exception. We need to handle it 
> within the sending function. We reason that if an IO exception is thrown on 
> the quorum socket of a follower, it only makes sense to shut down the server. 
> So we make the sending thread a ZooKeeperCriticalThread.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to