Michael Han created ZOOKEEPER-2737:
--------------------------------------
Summary: 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
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)