Github user hanm commented on a diff in the pull request:

    https://github.com/apache/zookeeper/pull/99#discussion_r90763391
  
    --- Diff: src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java ---
    @@ -716,7 +716,12 @@ public void process(WatchedEvent event) {
             // Convert WatchedEvent to a type that can be sent over the wire
             WatcherEvent e = event.getWrapper();
     
    -        sendResponse(h, e, "notification");
    +        try {
    +            sendResponse(h, e, "notification");
    +        } catch (IOException ex) {
    +            LOG.debug("Problem sending to " + getRemoteSocketAddress(), 
ex);
    +            close();
    --- End diff --
    
    >> It was not closing (I think) before as exception was swallowed since 
sendResponse in NIOServerCnxn was not throwing IOException
    
    Yes, I think the connection was not closing before in cases of exception 
thrown from `NIOServerCnxn.sendResponse` which swallows everything. The change 
in this PR changes the behavior by closing the connection in case of exceptions 
occur in sendResponse. I am leaning towards the old behavior of NOT closing the 
connection, because the connection looks pretty innocent - in fact 
`NIOServerCnxn.sendResponse` does not involve any socket IO I believe, it just 
queuing stuff to be send over sockets. So if something goes wrong, we just do 
our best effort by logging what's wrong - rather than trying mess up with 
sockets which seems out of responsibilities of `NIOServerCnxn.sendResponse`. 
Similarly since `NIOServerCnxn.sendResponse` does not directly involve sockets, 
there should not be any leaks in case sendResponse screw up.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to