Author: fhanik Date: Mon Jul 2 11:46:20 2007 New Revision: 552560 URL: http://svn.apache.org/viewvc?view=rev&rev=552560 Log: Force closure of connections upon a server shutdown
Modified: tomcat/trunk/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java tomcat/trunk/test/org/apache/catalina/tribes/test/io/TestSenderConnections.java Modified: tomcat/trunk/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java?view=diff&rev=552560&r1=552559&r2=552560 ============================================================================== --- tomcat/trunk/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java (original) +++ tomcat/trunk/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java Mon Jul 2 11:46:20 2007 @@ -37,6 +37,7 @@ import java.util.LinkedList; import java.util.Set; import java.nio.channels.CancelledKeyException; +import java.nio.channels.ClosedSelectorException; /** * @author Filip Hanik @@ -303,8 +304,7 @@ } serverChannel.close(); - if (selector != null) - selector.close(); + closeSelector(); } @@ -319,13 +319,34 @@ if (selector != null) { try { selector.wakeup(); - selector.close(); + closeSelector(); } catch (Exception x) { log.error("Unable to close cluster receiver selector.", x); } finally { selector = null; } } + } + + private void closeSelector() throws IOException { + Selector selector = this.selector; + this.selector = null; + if (selector==null) return; + try { + Iterator it = selector.keys().iterator(); + // look at each key in the selected set + while (it.hasNext()) { + SelectionKey key = (SelectionKey)it.next(); + key.channel().close(); + key.attach(null); + key.cancel(); + } + }catch ( IOException ignore ){ + if (log.isWarnEnabled()) { + log.warn("Unable to cleanup on selector close.",ignore); + } + }catch ( ClosedSelectorException ignore){} + selector.close(); } // ---------------------------------------------------------- Modified: tomcat/trunk/test/org/apache/catalina/tribes/test/io/TestSenderConnections.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/tribes/test/io/TestSenderConnections.java?view=diff&rev=552560&r1=552559&r2=552560 ============================================================================== --- tomcat/trunk/test/org/apache/catalina/tribes/test/io/TestSenderConnections.java (original) +++ tomcat/trunk/test/org/apache/catalina/tribes/test/io/TestSenderConnections.java Mon Jul 2 11:46:20 2007 @@ -80,6 +80,45 @@ channels[0].send(new Member[]{impl},new TestMsg(),0); } + + public void testSendToRemote() throws Exception { + ReplicationTransmitter transmitter = (ReplicationTransmitter) channels[0].getChannelSender(); + AbstractSender sender = (AbstractSender)transmitter.getTransport(); + sender.setMaxRetryAttempts(0); + sender.setTimeout(60000); + MemberImpl impl = new MemberImpl("127.0.0.1",9999,1000,new byte[]{1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8}); + for (int i=0; i<1000; i++) { + if (i%100==0) System.out.println("Sending message:"+(i+1)); + channels[0].send(new Member[] {impl}, new TestMsg(), 0); + } + } + + + public void testSendToFailing() throws Exception { + ReplicationTransmitter transmitter = (ReplicationTransmitter) channels[0].getChannelSender(); + AbstractSender sender = (AbstractSender)transmitter.getTransport(); + sender.setMaxRetryAttempts(0); + sender.setTimeout(60000); + Member[] ma = channels[0].getMembers(); + final Member m = channels[1].getLocalMember(true); + Thread st = new Thread() { + public void run() { + try { + for (int i=0; i<10000; i++ ) { + channels[0].send(new Member[] {m}, new TestMsg(), 0); + } + } catch (Exception x) { + x.printStackTrace(); + } + } + }; + st.start(); + Thread.sleep(250); + channels[1].stop(Channel.DEFAULT); + st.join(); + } + + public void testKeepAliveCount() throws Exception { System.out.println("Setting keep alive count to 0"); for (int i = 0; i < channels.length; i++) { --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]