[ https://issues.apache.org/jira/browse/ZOOKEEPER-1174?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ted Dunning updated ZOOKEEPER-1174: ----------------------------------- Attachment: ZOOKEEPER-1174.patch Here is a proposed patch. There are a few considerations here that merit review. First, is it safe to register sockets with a selector after the connect call? I assert yes because select is level based rather than transition based. Secondly, is it safe to not register sockets that connect immediately? I think, but am not sure, that the answer is yes because we have clearly already called primeConnection(). Thirdly, is it OK to not rethrow the io exception from the connect call? I am not sure here. The immediate effect is that connection is only attempted at the timeout rate rather than the faster rate specified by some of the delays in the code. This seems OK at first glance, but other opinions would be nice to have. > FD leak when network unreachable > -------------------------------- > > Key: ZOOKEEPER-1174 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1174 > Project: ZooKeeper > Issue Type: Bug > Components: java client > Affects Versions: 3.3.3 > Reporter: Ted Dunning > Assignee: Ted Dunning > Priority: Critical > Fix For: 3.3.4 > > Attachments: ZOOKEEPER-1174.patch, zk-fd-leak.tgz > > > In the socket connection logic there are several errors that result in bad > behavior. The basic problem is that a socket is registered with a selector > unconditionally when there are nuances that should be dealt with. First, the > socket may connect immediately. Secondly, the connect may throw an > exception. In either of these two cases, I don't think that the socket > should be registered. > I will attach a test case that demonstrates the problem. I have been unable > to create a unit test that exhibits the problem because I would have to mock > the low level socket libraries to do so. It would still be good to do so if > somebody can figure out a good way. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira