Patrick Hunt commented on ZOOKEEPER-562:

send_ping is calling wake_io_thread itself, so this is a particularly bad 
situation (forces a tight loop)

solution is to update last_send as last_send_attempt when attempting to send, 
whether successful or not.

> c client can flood server with pings if tcp send queue filled
> -------------------------------------------------------------
>                 Key: ZOOKEEPER-562
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-562
>             Project: Zookeeper
>          Issue Type: Bug
>          Components: c client
>    Affects Versions: 3.2.1
>            Reporter: Patrick Hunt
>            Assignee: Mahadev konar
>            Priority: Blocker
>             Fix For: 3.2.2, 3.3.0
> The c client can flood the server with pings if the tcp queue is filled.
> Say the cluster is overloaded and shuts down the recv processing
> a c client can send a ping, but since last_send is only updated on successful 
> pushing of data into the 
> socket, if flush_send_queue fails to send any data (send_buffer returns 0) 
> then last_send is not updated
> and zookeeper_interest will again send a ping the next time it is woken - 
> which could be 0 if recv_to is close
> to 0, easily could happen if server is not sending data to the client.

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