[ https://issues.apache.org/jira/browse/ZOOKEEPER-2737?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Michael Han resolved ZOOKEEPER-2737. ------------------------------------ Resolution: Fixed Fix Version/s: 3.5.3 3.6.0 Issue resolved by pull request 207 [https://github.com/apache/zookeeper/pull/207] > NettyServerCnxFactory leaks connection if exception happens while writing to > a channel. > --------------------------------------------------------------------------------------- > > Key: ZOOKEEPER-2737 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2737 > Project: ZooKeeper > Issue Type: Bug > Components: server > Affects Versions: 3.5.2 > Reporter: Michael Han > Assignee: Michael Han > Priority: Critical > Labels: connection, netty, server > Fix For: 3.6.0, 3.5.3 > > > Found this while debugging occasionally failed unit tests. Currently we do > this if exception occurs during writing to a channel with Netty: > {code} > @Override > public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent > e) > throws Exception > { > LOG.warn("Exception caught " + e, e.getCause()); > NettyServerCnxn cnxn = (NettyServerCnxn) ctx.getAttachment(); > if (cnxn != null) { > if (LOG.isDebugEnabled()) { > LOG.debug("Closing " + cnxn); > cnxn.close(); > } > } > } > {code} > So the connection is only closed when debug mode is enabled. This is > problematic as lots of clean up code is abstracted inside the close and > without proper close the connection we are leaking resources. > [Commit > log|https://github.com/apache/zookeeper/blob/master/src/java/main/org/apache/zookeeper/server/NettyServerCnxnFactory.java#L147] > indicates the issue exists since day 1 with ZOOKEEPER-733. Note the original > patch uploaded to ZOOKEEPER-733 has this close call in right place, and the > call gets moved around during iteration of the patches w/o gets noticed. -- This message was sent by Atlassian JIRA (v6.3.15#6346)