[jboss-dev-forums] [Design of Messaging on JBoss (Messaging/JBoss)] - infinite loop when connecting to a stopped acceptor
jmesnil
do-not-reply at jboss.com
Thu Dec 11 12:15:42 EST 2008
I'm currently adding management operations to start/stop JBM2 acceptors.
One of my tests ends up with a infinite loop when connecting to an acceptor that I've just stopped (I was expecting to have an error when creating the connection instead).
My code is in a middle of a refactoring but I'm able to reproduce it using the trunk code:
| public void testStartStop2() throws Exception
| {
| TransportConfiguration acceptorConfig = new TransportConfiguration(NettyAcceptorFactory.class.getName(),
| new HashMap<String, Object>(),
| randomString());
|
| Configuration conf = new ConfigurationImpl();
| conf.setSecurityEnabled(false);
| conf.setJMXManagementEnabled(false);
| conf.getAcceptorConfigurations().add(acceptorConfig);
| MessagingService service = MessagingServiceImpl.newNullStorageMessagingService(conf);
| service.start();
|
| Connection connection = JMSUtil.createConnection(NettyConnectorFactory.class.getName());
| assertNotNull(connection);
| // create a session to check the connection is working properly
| connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
| connection.close();
|
| // this simulates the management method to stop an acceptor
| Set<Acceptor> acceptors = service.getServer().getRemotingService().getAcceptors();
| assertEquals(1, acceptors.size());
| Acceptor acceptor = acceptors.iterator().next();
| assertNotNull(acceptor);
|
| acceptor.stop();
| try
| {
| connection = JMSUtil.createConnection(NettyConnectorFactory.class.getName());
| assertNotNull(connection);
| connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
| fail("acceptor must not accept connections when stopped");
| }
| catch (Exception e)
| {
| }
|
| /*
| acceptor.start();
|
| connection = JMSUtil.createConnection(NettyConnectorFactory.class.getName());
| assertNotNull(connection);
| connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
| // create a session to check the connection is working properly
| connection.close();
| */
| }
|
the test is simple:
- start JBM2 with a single netty acceptor
- create a connection and check it works
- stop the (only) acceptor
- create a connection <- expected failure
- start the acceptor
- create a connection and check it works
the test also gives an infinite loop if I stop the whole messaging service (instead of stopping only the acceptor)
The logs show that I've a infinite loop when I create the connection after stopping the acceptor:
| 11 dÃÂéc. 2008 18:13:17 org.jboss.messaging.core.logging.Logger info
| INFO: Started messaging server
| 11 dÃÂéc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger info
| INFO: Commencing automatic failover / reconnection
| 11 dÃÂéc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger info
| INFO: Attempting reconnection
| 11 dÃÂéc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger info
| INFO: Successfully reconnected
| 11 dÃÂéc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger error
| GRAVE: caught exception java.net.ConnectException: Connection refused for channel NioClientSocketChannel(id: 2709c0a8-011e-1000-8cab-013f31dc9386)
| java.net.ConnectException: Connection refused
| at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
| at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:527)
| at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.connect(NioClientSocketPipelineSink.java:300)
| at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.processSelectedKeys(NioClientSocketPipelineSink.java:292)
| at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.run(NioClientSocketPipelineSink.java:231)
| at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
| at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
| at java.lang.Thread.run(Thread.java:613)
| 11 dÃÂéc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger error
| GRAVE: caught exception java.net.ConnectException: Connection refused for channel NioClientSocketChannel(id: 2709c0a8-011e-1000-8cac-013f31dc9386)
| java.net.ConnectException: Connection refused
| at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
| at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:527)
| at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.connect(NioClientSocketPipelineSink.java:300)
| at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.processSelectedKeys(NioClientSocketPipelineSink.java:292)
| at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.run(NioClientSocketPipelineSink.java:231)
| at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
| at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
| at java.lang.Thread.run(Thread.java:613)
| 11 dÃÂéc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger info
| INFO: Commencing automatic failover / reconnection
| 11 dÃÂéc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger info
| INFO: Attempting reconnection
| 11 dÃÂéc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger info
| INFO: Successfully reconnected
| 11 dÃÂéc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger error
| GRAVE: caught exception java.net.ConnectException: Connection refused for channel NioClientSocketChannel(id: 2709c0a8-011e-1000-8cad-013f31dc9386)
| java.net.ConnectException: Connection refused
| at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
| at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:527)
| at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.connect(NioClientSocketPipelineSink.java:300)
| at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.processSelectedKeys(NioClientSocketPipelineSink.java:292)
| at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.run(NioClientSocketPipelineSink.java:231)
| at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
| at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
| at java.lang.Thread.run(Thread.java:613)
| 11 dÃÂéc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger info
| INFO: Commencing automatic failover / reconnection
| 11 dÃÂéc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger info
| INFO: Attempting reconnection
| 11 dÃÂéc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger info
| INFO: Successfully reconnected
| 11 dÃÂéc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger info
| INFO: Commencing automatic failover / reconnection
| 11 dÃÂéc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger info
| INFO: Attempting reconnection
| 11 dÃÂéc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger info
| INFO: Successfully reconnected
| 11 déc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger error
| GRAVE: caught exception java.net.ConnectException: Connection refused for channel NioClientSocketChannel(id: 2709c0a8-011e-1000-8cae-013f31dc9386)
| java.net.ConnectException: Connection refused
| at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
| at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:527)
| at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.connect(NioClientSocketPipelineSink.java:300)
| at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.processSelectedKeys(NioClientSocketPipelineSink.java:292)
| at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.run(NioClientSocketPipelineSink.java:231)
| at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
| at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
| at java.lang.Thread.run(Thread.java:613)
| 11 déc. 2008 18:13:18 org.jboss.messaging.core.logging.Logger info
| INFO: Commencing automatic failover / reconnection
|
and it continues like that on and on.
The repeated "Successfully reconnected" log are weird: there seems to be a code path that we're missing
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4196004#4196004
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4196004
More information about the jboss-dev-forums
mailing list