[
https://issues.apache.org/jira/browse/ZOOKEEPER-1620?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13557405#comment-13557405
]
Jay Shrauner commented on ZOOKEEPER-1620:
-----------------------------------------
You shouldn't need to do that (explicitly call closeSelector inside
factory.stop()), and it's preferable if you don't. The reason it's preferable
not to do it is to allow the system to do a graceful shutdown. The reason you
shouldn't need to do that is that the shutdown call joins on the accept and
selector threads, so it's not going to return until those threads exit.
The unit tests create and destroy the factories/threads/selectors in a pretty
tight loop. I'm not sure how long it takes the system to close fd's associated
with the selector, but maybe this is something like how closed sockets can
linger. I might try to put a lengthier sleep after the factory.shutdown() call.
There have been known issues with file descriptor leaks when calling
selector.close(), so we might check JDK versions we're each running. I found
the following bug affecting JDK5u28/6u30/7u5
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7118373
> 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
> Assignee: Thawan Kooburat
> Fix For: 3.5.0
>
> Attachments: ZOOKEEPER-1620.patch, ZOOKEEPER-1620.patch
>
>
> 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