Author: fhanik Date: Mon Mar 13 20:11:59 2006 New Revision: 385728 URL: http://svn.apache.org/viewcvs?rev=385728&view=rev Log: Performance optimizations
Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/Channel.java tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelInterceptor.java tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/MembershipService.java tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/GroupChannel.java tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/mcast/McastService.java tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/AbstractPooledSender.java tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/PooledSender.java tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ReplicationTransmitter.java tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/bio/BioSender.java tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/bio/PooledMultiSender.java tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/NioSender.java tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/ParallelNioSender.java tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/PooledParallelSender.java tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java tomcat/container/tc5.5.x/modules/groupcom/test/org/apache/catalina/tribes/demos/MapDemo.java Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/Channel.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/Channel.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/Channel.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/Channel.java Mon Mar 13 20:11:59 2006 @@ -104,7 +104,7 @@ * * @return Member */ - public Member getLocalMember() ; + public Member getLocalMember(boolean incAlive) ; /** * Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelInterceptor.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelInterceptor.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelInterceptor.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelInterceptor.java Mon Mar 13 20:11:59 2006 @@ -60,7 +60,7 @@ * * @return Member */ - public Member getLocalMember() ; + public Member getLocalMember(boolean incAliveTime) ; /** * Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/MembershipService.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/MembershipService.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/MembershipService.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/MembershipService.java Mon Mar 13 20:11:59 2006 @@ -80,7 +80,7 @@ /** * Returns the member object that defines this member */ - public Member getLocalMember(); + public Member getLocalMember(boolean incAliveTime); /** * Return all members by name Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java Mon Mar 13 20:11:59 2006 @@ -195,8 +195,8 @@ * * @return Member */ - public Member getLocalMember() { - return this.getMembershipService().getLocalMember(); + public Member getLocalMember(boolean incAlive) { + return this.getMembershipService().getLocalMember(incAlive); } Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java Mon Mar 13 20:11:59 2006 @@ -119,8 +119,8 @@ * * @return Member */ - public Member getLocalMember() { - if ( getNext()!=null ) return getNext().getLocalMember(); + public Member getLocalMember(boolean incAlive) { + if ( getNext()!=null ) return getNext().getLocalMember(incAlive); else return null; } Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/GroupChannel.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/GroupChannel.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/GroupChannel.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/GroupChannel.java Mon Mar 13 20:11:59 2006 @@ -97,7 +97,7 @@ if ( destination.length == 0 ) return; int options = 0; ClusterData data = new ClusterData();//generates a unique Id - data.setAddress(getLocalMember()); + data.setAddress(getLocalMember(false)); data.setTimestamp(System.currentTimeMillis()); byte[] b = null; if ( msg instanceof ByteMessage ){ Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/mcast/McastService.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/mcast/McastService.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/mcast/McastService.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/mcast/McastService.java Mon Mar 13 20:11:59 2006 @@ -153,8 +153,8 @@ /** * Return the local member */ - public Member getLocalMember() { - localMember.setMemberAliveTime(System.currentTimeMillis()-impl.getServiceStartTime()); + public Member getLocalMember(boolean alive) { + if ( alive ) localMember.setMemberAliveTime(System.currentTimeMillis()-impl.getServiceStartTime()); return localMember; } Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/AbstractPooledSender.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/AbstractPooledSender.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/AbstractPooledSender.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/AbstractPooledSender.java Mon Mar 13 20:11:59 2006 @@ -31,7 +31,7 @@ */ public abstract class AbstractPooledSender extends PooledSender implements MultiPointSender{ protected boolean suspect; - protected boolean useDirectBuffer; + protected boolean useDirectBuffer = true; protected int maxRetryAttempts; protected boolean autoConnect; protected int keepAliveCount; Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/PooledSender.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/PooledSender.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/PooledSender.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/PooledSender.java Mon Mar 13 20:11:59 2006 @@ -48,7 +48,7 @@ public abstract DataSender getNewDataSender(); public DataSender getSender() { - return queue.getSender(0); + return queue.getSender(timeout); } public void returnSender(DataSender sender) { Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ReplicationTransmitter.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ReplicationTransmitter.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ReplicationTransmitter.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ReplicationTransmitter.java Mon Mar 13 20:11:59 2006 @@ -110,6 +110,7 @@ * @see org.apache.catalina.tribes.ClusterSender#start() */ public void start() throws java.io.IOException { + getTransport().connect(); } /* Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/bio/BioSender.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/bio/BioSender.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/bio/BioSender.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/bio/BioSender.java Mon Mar 13 20:11:59 2006 @@ -22,12 +22,13 @@ import java.net.Socket; import java.util.Arrays; -import org.apache.catalina.tribes.ChannelException; import org.apache.catalina.tribes.io.XByteBuffer; import org.apache.catalina.tribes.tcp.Constants; import org.apache.catalina.tribes.tcp.DataSender; import org.apache.catalina.tribes.tcp.SenderState; import org.apache.catalina.util.StringManager; +import java.io.OutputStream; +import java.io.InputStream; /** * Send cluster messages with only one socket. Ack and keep Alive Handling is @@ -69,6 +70,8 @@ * current sender socket */ private Socket socket = null; + private OutputStream soOut = null; + private InputStream soIn = null; /** * is Socket really connected @@ -375,6 +378,8 @@ socket.setReceiveBufferSize(getRxBufSize()); socket.setSoTimeout( (int) timeout); connected = true; + soOut = socket.getOutputStream(); + soIn = socket.getInputStream(); this.requestCount = 0; this.keepAliveConnectTime = System.currentTimeMillis(); if (log.isDebugEnabled()) @@ -402,6 +407,8 @@ } catch (IOException x) { } finally { socket = null; + soOut = null; + soIn = null; } } this.requestCount = 0; @@ -476,8 +483,8 @@ * @since 5.5.10 */ protected void writeData(byte[] data) throws IOException { - socket.getOutputStream().write(data); - socket.getOutputStream().flush(); + soOut.write(data); + soOut.flush(); if (getWaitForAck()) waitForAck(); } @@ -493,7 +500,7 @@ boolean ackReceived = false; ackbuf.clear(); int bytesRead = 0; - int i = socket.getInputStream().read(); + int i = soIn.read(); while ((i != -1) && (bytesRead < Constants.ACK_COMMAND.length)) { bytesRead++; byte d = (byte)i; @@ -502,7 +509,7 @@ ackReceived = Arrays.equals(ackbuf.extractDataPackage(true),Constants.ACK_DATA); break; } - i = socket.getInputStream().read(); + i = soIn.read(); } if (!ackReceived) { if (i == -1) throw new IOException(sm.getString("IDataSender.ack.eof",getAddress(), new Integer(socket.getLocalPort()))); Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/bio/PooledMultiSender.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/bio/PooledMultiSender.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/bio/PooledMultiSender.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/bio/PooledMultiSender.java Mon Mar 13 20:11:59 2006 @@ -36,9 +36,20 @@ } public void sendMessage(Member[] destination, ChannelMessage msg) throws ChannelException { - MultiPointSender sender = (MultiPointSender)getSender(); - sender.sendMessage(destination,msg); - + MultiPointSender sender = null; + try { + sender = (MultiPointSender)getSender(); + if (sender == null) { + ChannelException cx = new ChannelException("Unable to retrieve a data sender, time out error."); + for (int i = 0; i < destination.length; i++) cx.addFaultyMember(destination[i]); + throw cx; + } else { + sender.sendMessage(destination, msg); + } + sender.keepalive(); + }finally { + if ( sender != null ) returnSender(sender); + } } /** Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/NioSender.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/NioSender.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/NioSender.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/NioSender.java Mon Mar 13 20:11:59 2006 @@ -110,7 +110,7 @@ else { //do a health check, we have no way of verify a disconnected //socket since we don't register for OP_READ on waitForAck=false - read(key); + read(key);//this causes overhead. return true; } } else { @@ -209,17 +209,17 @@ this.connected = false; if ( socketChannel != null ) { Socket socket = socketChannel.socket(); - socket.shutdownOutput(); - socket.shutdownInput(); - socket.close(); - socketChannel.close(); + //error free close, all the way + try {socket.shutdownOutput();}catch ( Exception x){} + try {socket.shutdownInput();}catch ( Exception x){} + try {socket.close();}catch ( Exception x){} + try {socketChannel.close();}catch ( Exception x){} socket = null; socketChannel = null; } } catch ( Exception x ) { - log.error("Unable to disconnect. msg="+x.getMessage()); - if ( log.isDebugEnabled() ) - log.debug("Unable to disconnect. msg="+x.getMessage(),x); + log.error("Unable to disconnect NioSender. msg="+x.getMessage()); + if ( log.isDebugEnabled() ) log.debug("Unable to disconnect NioSender. msg="+x.getMessage(),x); } finally { reset(); } Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/ParallelNioSender.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/ParallelNioSender.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/ParallelNioSender.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/ParallelNioSender.java Mon Mar 13 20:11:59 2006 @@ -282,11 +282,11 @@ public boolean keepalive() { //throw new UnsupportedOperationException("Method ParallelNioSender.checkKeepAlive() not implemented"); boolean result = false; - Map.Entry[] entries = (Map.Entry[])nioSenders.entrySet().toArray(new Map.Entry[nioSenders.size()]); - for ( int i=0; i<entries.length; i++ ) { - NioSender sender = (NioSender)entries[i].getValue(); + for ( Iterator i = nioSenders.entrySet().iterator(); i.hasNext(); ) { + Map.Entry entry = (Map.Entry)i.next(); + NioSender sender = (NioSender)entry.getValue(); if ( sender.keepalive() ) { - nioSenders.remove(entries[i].getKey()); + nioSenders.remove(entry.getKey()); } } return result; Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/PooledParallelSender.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/PooledParallelSender.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/PooledParallelSender.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/nio/PooledParallelSender.java Mon Mar 13 20:11:59 2006 @@ -37,11 +37,13 @@ * @version 1.0 */ public class PooledParallelSender extends AbstractPooledSender implements MultiPointSender { + protected boolean connected = false; public PooledParallelSender() { super(); } public void sendMessage(Member[] destination, ChannelMessage message) throws ChannelException { + if ( !connected ) throw new ChannelException("Sender not connected."); ParallelNioSender sender = (ParallelNioSender)getSender(); try { sender.sendMessage(destination, message); @@ -63,6 +65,16 @@ } catch ( IOException x ) { throw new IllegalStateException("Unable to open NIO selector.",x); } + } + + public synchronized void disconnect() { + this.connected = false; + super.disconnect(); + } + + public synchronized void connect() throws IOException { + this.connected = true; + super.connect(); } public void memberAdded(Member member) { Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tipis/LazyReplicatedMap.java Mon Mar 13 20:11:59 2006 @@ -154,7 +154,7 @@ try { //send out a map membership message, only wait for the first reply MapMessage msg = new MapMessage(this.mapContextName,MapMessage.MSG_START, - false,null,null,null,channel.getLocalMember()); + false,null,null,null,channel.getLocalMember(false)); Response[] resp = rpcChannel.send(channel.getMembers(),msg,rpcChannel.FIRST_REPLY,timeout); for ( int i=0; i<resp.length; i++ ) { messageReceived(resp[i].getMessage(),resp[i].getSource()); @@ -175,7 +175,7 @@ try { //send a map membership stop message MapMessage msg = new MapMessage(this.mapContextName,MapMessage.MSG_STOP, - false,null,null,null,channel.getLocalMember()); + false,null,null,null,channel.getLocalMember(false)); if ( channel!=null) channel.send(channel.getMembers(),msg); }catch ( ChannelException x ) { log.warn("Unable to send stop message.",x); @@ -304,7 +304,7 @@ //map start request if ( mapmsg.getMsgType() == mapmsg.MSG_START ) { mapMemberAdded(sender); - mapmsg.setBackUpNode(channel.getLocalMember()); + mapmsg.setBackUpNode(channel.getLocalMember(false)); return mapmsg; } Modified: tomcat/container/tc5.5.x/modules/groupcom/test/org/apache/catalina/tribes/demos/MapDemo.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/test/org/apache/catalina/tribes/demos/MapDemo.java?rev=385728&r1=385727&r2=385728&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/groupcom/test/org/apache/catalina/tribes/demos/MapDemo.java (original) +++ tomcat/container/tc5.5.x/modules/groupcom/test/org/apache/catalina/tribes/demos/MapDemo.java Mon Mar 13 20:11:59 2006 @@ -45,7 +45,7 @@ public MapDemo(Channel channel ) { map = new LazyReplicatedMap(channel,5000, "MapDemo"); - table = SimpleTableDemo.createAndShowGUI(map,channel.getLocalMember().getName()); + table = SimpleTableDemo.createAndShowGUI(map,channel.getLocalMember(false).getName()); channel.addChannelListener(this); channel.addMembershipListener(this); } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]