[
https://issues.apache.org/jira/browse/DIRMINA-924?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13532982#comment-13532982
]
Deyan Pandulev commented on DIRMINA-924:
----------------------------------------
Hello Mike,
thank you for your suggestion. I run the test with your proposal but the
results are the same.
> Custom executor for mina acceptor
> ---------------------------------
>
> Key: DIRMINA-924
> URL: https://issues.apache.org/jira/browse/DIRMINA-924
> Project: MINA
> Issue Type: Improvement
> Components: Core
> Affects Versions: 2.0.7
> Environment: Debian squeeze 2.6.32-5-amd64 jdk1.6.0_32
> Reporter: Deyan Pandulev
>
> The problem is when using custom executor with the acceptor. In that case the
> opened processes are not cleaned properly. So if my custom executor use
> SimpleIoProcessorPool with 5 processors when activate and deactive they
> remain open.
> Step 1:
> Activate and lsof -java_pid will produce:
> java 13796 deyan 4r REG 8,9 644783 47039005
> /home/deyan/install/apache mina/apache-mina-2.0.7/dist/mina-core-2.0.7.jar
> java 13796 deyan 5r REG 8,9 26176 47039015
> /home/deyan/install/apache mina/apache-mina-2.0.7/lib/slf4j-api-1.6.6.jar
> java 13796 deyan 6r FIFO 0,8 0t0 143881 pipe
> java 13796 deyan 7r FIFO 0,8 0t0 143881 pipe
> java 13796 deyan 8u 0000 0,9 0 618
> anon_inode
> java 13796 deyan 9u FIFO 0,8 0t0 143882 pipe
> java 13796 deyan 10r FIFO 0,8 0t0 143882 pipe
> java 13796 deyan 11w 0000 0,9 0 618
> anon_inode
> java 13796 deyan 12u FIFO 0,8 0t0 143883 pipe
> java 13796 deyan 13u FIFO 0,8 0t0 143883 pipe
> java 13796 deyan 14r 0000 0,9 0 618
> anon_inode
> java 13796 deyan 15r FIFO 0,8 0t0 143884 pipe
> java 13796 deyan 16r FIFO 0,8 0t0 143884 pipe
> java 13796 deyan 17r 0000 0,9 0 618
> anon_inode
> java 13796 deyan 18r FIFO 0,8 0t0 143885 pipe
> java 13796 deyan 19r FIFO 0,8 0t0 143885 pipe
> java 13796 deyan 20r 0000 0,9 0 618
> anon_inode
> Step 2:
> On deactivate and the same command:
> java 13796 deyan 4r REG 8,9 644783 47039005
> /home/deyan/install/apache mina/apache-mina-2.0.7/dist/mina-core-2.0.7.jar
> java 13796 deyan 5r REG 8,9 26176 47039015
> /home/deyan/install/apache mina/apache-mina-2.0.7/lib/slf4j-api-1.6.6.jar
> java 13796 deyan 6r FIFO 0,8 0t0 143881 pipe
> java 13796 deyan 7r FIFO 0,8 0t0 143881 pipe
> java 13796 deyan 8u 0000 0,9 0 618
> anon_inode
> java 13796 deyan 9u FIFO 0,8 0t0 143882 pipe
> java 13796 deyan 10r FIFO 0,8 0t0 143882 pipe
> java 13796 deyan 11w 0000 0,9 0 618
> anon_inode
> java 13796 deyan 12u FIFO 0,8 0t0 143883 pipe
> java 13796 deyan 13u FIFO 0,8 0t0 143883 pipe
> java 13796 deyan 14r 0000 0,9 0 618
> anon_inode
> java 13796 deyan 15r FIFO 0,8 0t0 143884 pipe
> java 13796 deyan 16r FIFO 0,8 0t0 143884 pipe
> java 13796 deyan 17r 0000 0,9 0 618
> anon_inode
> java 13796 deyan 18r FIFO 0,8 0t0 143885 pipe
> java 13796 deyan 19r FIFO 0,8 0t0 143885 pipe
> java 13796 deyan 20r 0000 0,9 0 618
> anon_inode
> So there is no cleanup. If i don't use custom executor the server behaves
> properly.
> Step 2:
> If i activate again:
> java 13796 deyan 4r REG 8,9 644783 47039005
> /home/deyan/install/apache mina/apache-mina-2.0.7/dist/mina-core-2.0.7.jar
> java 13796 deyan 5r REG 8,9 26176 47039015
> /home/deyan/install/apache mina/apache-mina-2.0.7/lib/slf4j-api-1.6.6.jar
> java 13796 deyan 6r FIFO 0,8 0t0 143881 pipe
> java 13796 deyan 7r FIFO 0,8 0t0 143881 pipe
> java 13796 deyan 8u 0000 0,9 0 618
> anon_inode
> java 13796 deyan 9u FIFO 0,8 0t0 143882 pipe
> java 13796 deyan 10r FIFO 0,8 0t0 143882 pipe
> java 13796 deyan 11w 0000 0,9 0 618
> anon_inode
> java 13796 deyan 12u FIFO 0,8 0t0 143883 pipe
> java 13796 deyan 13u FIFO 0,8 0t0 143883 pipe
> java 13796 deyan 14r 0000 0,9 0 618
> anon_inode
> java 13796 deyan 15r FIFO 0,8 0t0 143884 pipe
> java 13796 deyan 16r FIFO 0,8 0t0 143884 pipe
> java 13796 deyan 17r 0000 0,9 0 618
> anon_inode
> java 13796 deyan 18r FIFO 0,8 0t0 143885 pipe
> java 13796 deyan 19r FIFO 0,8 0t0 143885 pipe
> java 13796 deyan 20r 0000 0,9 0 618
> anon_inode
> java 13796 deyan 21r FIFO 0,8 0t0 143996 pipe
> java 13796 deyan 22r FIFO 0,8 0t0 143996 pipe
> java 13796 deyan 23r 0000 0,9 0 618
> anon_inode
> java 13796 deyan 24r FIFO 0,8 0t0 143997 pipe
> java 13796 deyan 25r unix 0xffff88011e2fa700 0t0 143977 socket
> java 13796 deyan 26r sock 0,6 0t0 143890 can't
> identify protocol
> java 13796 deyan 27r FIFO 0,8 0t0 143997 pipe
> java 13796 deyan 28u 0000 0,9 0 618
> anon_inode
> java 13796 deyan 29u FIFO 0,8 0t0 143998 pipe
> java 13796 deyan 30r FIFO 0,8 0t0 143998 pipe
> java 13796 deyan 31r 0000 0,9 0 618
> anon_inode
> java 13796 deyan 32r FIFO 0,8 0t0 143999 pipe
> java 13796 deyan 33r FIFO 0,8 0t0 143999 pipe
> java 13796 deyan 34r 0000 0,9 0 618
> anon_inode
> java 13796 deyan 35r FIFO 0,8 0t0 144000 pipe
> java 13796 deyan 36r FIFO 0,8 0t0 144000 pipe
> java 13796 deyan 37r 0000 0,9 0 618
> anon_inode
> java 13796 deyan 38r FIFO 0,8 0t0 144001 pipe
> java 13796 deyan 39r FIFO 0,8 0t0 144001 pipe
> java 13796 deyan 40r 0000 0,9 0 618
> anon_inode
> You can see that the anon_inode are doubled.
> I want to ask what am I doing wrong and to point me out how to use custom
> executor because I want to integrate Mina in Application Server.
> The test code:
> public class SimpleMinaServer {
> private NioSocketAcceptor acceptor;
> private final IoHandler ioHandler;
> private final InetSocketAddress inetSocketAddress;
> private final int threads;
> public SimpleMinaServer(IoHandler ioHandler, InetSocketAddress
> inetSocketAddress, int threads) {
> this.ioHandler = ioHandler;
> this.inetSocketAddress = inetSocketAddress;
> this.threads = threads;
> }
> public synchronized void activate() throws Exception {
> try {
> Executor executor = new ThreadPoolExecutor(0, Integer.MAX_VALUE,
> 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());
> ((ThreadPoolExecutor) executor).setRejectedExecutionHandler(new
> ThreadPoolExecutor.CallerRunsPolicy());
> IoProcessor<NioSession> processor = new
> SimpleIoProcessorPool<NioSession>(NioProcessor.class, executor, threads);
> acceptor = new NioSocketAcceptor(processor);
> // If you comment the code above and uncomment the code below it
> // behaves properly
> // acceptor = new NioSocketAcceptor(this.threads);
> acceptor.setReuseAddress(true);
> acceptor.setCloseOnDeactivation(true);
> acceptor.getSessionConfig().setIdleTime(IdleStatus.READER_IDLE, 12);
> DefaultIoFilterChainBuilder filterChain = acceptor.getFilterChain();
> LoggingFilter loggingFilter = new LoggingFilter();
> loggingFilter.setMessageReceivedLogLevel(LogLevel.NONE);
> loggingFilter.setMessageSentLogLevel(LogLevel.NONE);
> loggingFilter.setMessageSentLogLevel(LogLevel.NONE);
> loggingFilter.setSessionClosedLogLevel(LogLevel.NONE);
> loggingFilter.setSessionCreatedLogLevel(LogLevel.NONE);
> loggingFilter.setSessionIdleLogLevel(LogLevel.NONE);
> loggingFilter.setSessionOpenedLogLevel(LogLevel.NONE);
> loggingFilter.setExceptionCaughtLogLevel(LogLevel.DEBUG);
> filterChain.addLast("logging", loggingFilter);
> TextLineCodecFactory customTextLineCodecFactory = new
> TextLineCodecFactory(Charset.forName("UTF-8"), LineDelimiter.NUL,
> LineDelimiter.NUL);
> customTextLineCodecFactory.setDecoderMaxLineLength(16000);
> customTextLineCodecFactory.setEncoderMaxLineLength(16000);
> ProtocolCodecFilter protocolCodecFilter = new
> ProtocolCodecFilter(customTextLineCodecFactory);
> filterChain.addLast("codec", protocolCodecFilter);
> acceptor.setHandler(ioHandler);
> acceptor.bind(inetSocketAddress);
> System.err.println("Apache Mina Server started on port " +
> inetSocketAddress.getPort());
> } catch (Exception e) {
> System.err.println("Exception while starting resource adapter");
> throw e;
> }
> }
> public synchronized void deactivate() {
> if (this.acceptor != null) {
> this.acceptor.unbind();
> this.acceptor.dispose();
> this.acceptor = null;
> }
> }
> public static void main(String[] args) throws Exception {
> final SimpleIoHandler ioHandler = new SimpleIoHandler();
> SimpleMinaServer s = new SimpleMinaServer(ioHandler, new
> InetSocketAddress(9090), 5);
> s.activate();
> final Scanner sc = new Scanner(System.in);
> while (true) {
> sc.nextLine();
> if (s.acceptor != null) {
> s.deactivate();
> System.out.println("Deactivating");
> } else {
> s.activate();
> System.out.println("Activating");
> }
> }
> }
> }
--
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