You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "Patrick Hunt (JIRA)" <ji...@apache.org> on 2010/07/02 07:37:49 UTC

[jira] Commented: (ZOOKEEPER-517) NIO factory fails to close connections when the number of file handles run out.

    [ https://issues.apache.org/jira/browse/ZOOKEEPER-517?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12884548#action_12884548 ] 

Patrick Hunt commented on ZOOKEEPER-517:
----------------------------------------

I noticed another issue in this same area:

{noformat}

                        if ((k.readyOps() & SelectionKey.OP_ACCEPT) != 0) {
                            SocketChannel sc = ((ServerSocketChannel) k
                                    .channel()).accept();
                            InetAddress ia = sc.socket().getInetAddress();
                            int cnxncount = getClientCnxnCount(ia);
                            if (maxClientCnxns > 0 && cnxncount >= maxClientCnxns){
                                LOG.warn("Too many connections from " + ia
                                         + " - max is " + maxClientCnxns );
                                sc.close();
{noformat}

Notice that if macclientcnxns is exceeded we close the connection - iirc default linger time on linux is typically 60seconds. So if we have a mis-behaving client we can still run into trouble ("still" meaning we added this code to keep clients from DOS attacking the server) with TIME_WAIT state on the tcp connection.

We need to set the linger time down to 0 in this case before closing.

> NIO factory fails to close connections when the number of file handles run out.
> -------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-517
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-517
>             Project: Zookeeper
>          Issue Type: Bug
>          Components: server
>            Reporter: Mahadev konar
>            Priority: Critical
>             Fix For: 3.3.2, 3.4.0
>
>
> The code in NIO factory is such that if we fail to accept a connection due to some reasons (too many file handles maybe one of them) we do not close the connections that are in CLOSE_WAIT. We need to call an explicit close on these sockets and then close them. One of the solutions might be to move doIO before accpet so that we can still close connection even if we cannot accept connections.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.