[ https://issues.apache.org/jira/browse/DIRSERVER-2234?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16482435#comment-16482435 ]
Emmanuel Lecharny commented on DIRSERVER-2234: ---------------------------------------------- Good catch ! I'll add the missing {{session.closeNow();}} > Kinit via TCP causes ApacheDS to create a NioProcessor thread at 100% CPU > ------------------------------------------------------------------------- > > Key: DIRSERVER-2234 > URL: https://issues.apache.org/jira/browse/DIRSERVER-2234 > Project: Directory ApacheDS > Issue Type: Bug > Affects Versions: 2.0.0-M24 > Environment: ApacheDS > Reporter: Wenxiang Qiu > Priority: Major > > ApacheDS uses a KerberosProtocolHandler as the handler of the > IoAcceptor in KdcServer.java: > > {code:java} > // Inject the protocol handler acceptor.setHandler( new > KerberosProtocolHandler( this, store ) ); > {code} > When a TCP connection is about to be closed, > KerberosProtocolHandler$inputClosed(IoSession session) is invoked when > {code:java} > filterChain.fireInputClosed(); > {code} > is reached in AbstractPollingIoProcessor.java. But > KerberosProtocolHandler$inputClosed(IoSession session) does nothing: > {code:java} > public void inputClosed( IoSession session ) > { > } > {code} > which leaves the session unclosed, which in turn prevents its SocketChannel > from being deregistered from the selector in NioProcessor. As a result, > {code:java} > int selected = select(SELECT_TIMEOUT); > {code} > in AbstractPollingIoProcessor.Processor.run() keeps returning a readable > channel, on which read() returns -1. This infinite loop consumes all > available CPU. > > By constrast, LdapServer sets a LdapProtocolHandler to its acceptor, and > LdapProtocolHandler inherits inputClosed(IoSession session) from > IoHandlerAdapter: > {code:java} > public void inputClosed(IoSession session) throws Exception { > session.close(true); > } > {code} > which closes properly the session. > > > How to reproduce: > Simply run kinit with TCP (by setting udp_preference_limit = 1 in > /etc/krb5.conf), and ApacheDS will be running at 100% CPU. Doing it again > will consume more CPU resources depending on core number. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)