You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "Jay Shrauner (JIRA)" <ji...@apache.org> on 2013/01/17 03:30:13 UTC

[jira] [Commented] (ZOOKEEPER-1620) NIOServerCnxnFactory (new code introduced in ZK-1504) opens selectors but never closes them

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

Jay Shrauner commented on ZOOKEEPER-1620:
-----------------------------------------

Have you tried running the tests in an unmodified branch? I think you are encountering this because of changes in your branch, because in the upstream branch we don't see the tests fail like this.

That being said, you are right we could do a better job of cleaning up the selector. I'd suggest adding a closeSelector() method to the AbstractSelectThread

protected void closeSelector() {
  try {
    selector.close();
  catch (IOException e) {
    // Ignore
  }
}

and then adding calls to closeSelector() right before the NIOServerCnxnFactory.this.stop() calls in the finally block of the run methods for the AcceptThread and SelectorThread.
                
> NIOServerCnxnFactory (new code introduced in ZK-1504) opens selectors but never closes them
> -------------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1620
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1620
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>    Affects Versions: 3.5.0
>            Reporter: Alexander Shraer
>
> New code (committed in ZK-1504) opens selectors but doesn't close them.
> Specifically AbstractSelectThread in its constructor does 
> this.selector = Selector.open();
> But possibly also elsewhere. Tests fail for me with the following message:
> java.io.IOException: Too many open files
> 	at sun.nio.ch.EPollArrayWrapper.epollCreate(Native Method)
> 	at sun.nio.ch.EPollArrayWrapper.<init>(EPollArrayWrapper.java:69)
> 	at sun.nio.ch.EPollSelectorImpl.<init>(EPollSelectorImpl.java:52)
> 	at sun.nio.ch.EPollSelectorProvider.openSelector(EPollSelectorProvider.java:18)
> 	at java.nio.channels.Selector.open(Selector.java:209)
> 	at org.apache.zookeeper.server.NIOServerCnxnFactory$AbstractSelectThread.<init>(NIOServerCnxnFactory.java:128)
> 	at org.apache.zookeeper.server.NIOServerCnxnFactory$AcceptThread.<init>(NIOServerCnxnFactory.java:177)
> 	at org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:663)
> 	at org.apache.zookeeper.server.ServerCnxnFactory.createFactory(ServerCnxnFactory.java:127)
> 	at org.apache.zookeeper.server.quorum.QuorumPeer.<init>(QuorumPeer.java:709)
> 	at org.apache.zookeeper.test.QuorumBase.startServers(QuorumBase.java:177)
> 	at org.apache.zookeeper.test.QuorumBase.setUp(QuorumBase.java:113)
> 	at org.apache.zookeeper.test.QuorumBase.setUp(QuorumBase.java:71)
> 	at org.apache.zookeeper.test.ReconfigTest.setUp(ReconfigTest.java:56)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira