You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "Michael Han (JIRA)" <ji...@apache.org> on 2017/03/24 17:16:41 UTC

[jira] [Created] (ZOOKEEPER-2737) NettyServerCnxFactory leaks connection if exception happens while writing to a channel.

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)