Author: fhanik Date: Wed Feb 8 15:27:58 2006 New Revision: 376115 URL: http://svn.apache.org/viewcvs?rev=376115&view=rev Log: Fixed error reporting. When a node crashes, instead of filling up the logs with oodles and oodles of errors message the system will now print the error once if there is one and then mark the member as a suspect. To view all error message, you can still enable debug logging and it will show up in the logs, so they don't get swallowed.
Added: tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SenderState.java Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/DataSender.java tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/PooledSocketSender.java tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/ReplicationTransmitter.java tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SocketSender.java Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/DataSender.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/DataSender.java?rev=376115&r1=376114&r2=376115&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/DataSender.java (original) +++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/DataSender.java Wed Feb 8 15:27:58 2006 @@ -16,15 +16,12 @@ package org.apache.catalina.cluster.tcp; -import java.io.IOException; -import java.io.OutputStream; -import java.net.InetAddress; -import java.net.Socket; -import java.net.SocketException; - -import org.apache.catalina.cluster.ClusterMessage; -import org.apache.catalina.cluster.io.XByteBuffer; -import org.apache.catalina.util.StringManager; +import java.io.*; +import java.net.*; + +import org.apache.catalina.cluster.*; +import org.apache.catalina.cluster.io.*; +import org.apache.catalina.util.*; /** * Send cluster messages with only one socket. Ack and keep Alive Handling is @@ -87,7 +84,7 @@ /** * sender is in suspect state (last transfer failed) */ - private boolean suspect = false; + private SenderState senderState = new SenderState(); /** * wait time for ack @@ -221,10 +218,13 @@ this.port = port; this.domain = domain; if (log.isDebugEnabled()) - log.debug(sm.getString("IDataSender.create",address, new Integer( - port))); + log.debug(sm.getString("IDataSender.create",address, new Integer(port))); } + public DataSender(String domain,InetAddress host, int port, SenderState state) { + this(domain,host,port); + if ( state != null ) this.senderState = state; + } // ------------------------------------------------------------- Properties /** @@ -457,15 +457,18 @@ } public boolean isSuspect() { - return suspect; + return senderState.isSuspect() || senderState.isFailing(); } public boolean getSuspect() { - return suspect; + return isSuspect(); } public void setSuspect(boolean suspect) { - this.suspect = suspect; + if ( suspect ) + this.senderState.setSuspect(); + else + this.senderState.setReady(); } public long getAckTimeout() { @@ -539,6 +542,11 @@ public Socket getSocket() { return socket; } + + public SenderState getSenderState() { + return senderState; + } + /** * @param socket The socket to set. */ @@ -903,11 +911,14 @@ } } catch (IOException x) { missingAckCounter++; + String errmsg = sm.getString("IDataSender.ack.missing", getAddress(), + new Integer(socket.getLocalPort()), + new Long(this.ackTimeout)); if ( !this.isSuspect() ) { - log.warn(sm.getString("IDataSender.ack.missing", getAddress(), - new Integer(socket.getLocalPort()), - new Long(this.ackTimeout)), x); this.setSuspect(true); + if ( log.isWarnEnabled() ) log.warn(errmsg, x); + } else { + if ( log.isDebugEnabled() )log.debug(errmsg, x); } throw x; } finally { Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/PooledSocketSender.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/PooledSocketSender.java?rev=376115&r1=376114&r2=376115&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/PooledSocketSender.java (original) +++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/PooledSocketSender.java Wed Feb 8 15:27:58 2006 @@ -16,9 +16,9 @@ package org.apache.catalina.cluster.tcp; -import java.io.IOException; -import java.net.InetAddress; -import java.util.LinkedList; +import java.io.*; +import java.net.*; +import java.util.*; /** * Send cluster messages with a pool of sockets (25). @@ -227,8 +227,10 @@ private SocketSender getNewSocketSender() { //new SocketSender( - SocketSender sender = new SocketSender(getDomain(),parent.getAddress(), parent - .getPort()); + SocketSender sender = new SocketSender(getDomain(), + parent.getAddress(), + parent.getPort(), + parent.getSenderState() ); sender.setKeepAliveMaxRequestCount(parent .getKeepAliveMaxRequestCount()); sender.setKeepAliveTimeout(parent.getKeepAliveTimeout()); Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/ReplicationTransmitter.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/ReplicationTransmitter.java?rev=376115&r1=376114&r2=376115&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/ReplicationTransmitter.java (original) +++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/ReplicationTransmitter.java Wed Feb 8 15:27:58 2006 @@ -866,10 +866,10 @@ addStats(data.getMessage().length); return true; } catch (Exception x) { - if (log.isErrorEnabled()) { - if (!sender.getSuspect()) { - log.error("Unable to send replicated message, is member ["+sender.toString()+"] down?",x); - } + if (!sender.getSuspect()) { + if (log.isErrorEnabled() ) log.error("Unable to send replicated message, is member ["+sender.toString()+"] down?",x); + } else if (log.isDebugEnabled() ) { + log.debug("Unable to send replicated message, is member ["+sender.toString()+"] down?",x); } sender.setSuspect(true); failureCounter++; Added: tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SenderState.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SenderState.java?rev=376115&view=auto ============================================================================== --- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SenderState.java (added) +++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SenderState.java Wed Feb 8 15:27:58 2006 @@ -0,0 +1,82 @@ +/* + * Copyright 1999,2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.catalina.cluster.tcp; + + +/** + * Send cluster messages with a pool of sockets (25). + * + * FIXME support processing stats + * + * @author Filip Hanik + * @version 1.0 + * @since 5.5.16 + */ + +public class SenderState { + + public static final int READY = 0; + public static final int SUSPECT = 1; + public static final int FAILING = 2; + /** + * The descriptive information about this implementation. + */ + private static final String info = "SenderState/1.0"; + + // ----------------------------------------------------- Instance Variables + + private int state = READY; + + // ----------------------------------------------------- Constructor + + + public SenderState() { + this(READY); + } + + public SenderState(int state) { + this.state = state; + } + + public boolean isSuspect() { + return state == SUSPECT; + } + + public void setSuspect() { + state = SUSPECT; + } + + public boolean isReady() { + return state == READY; + } + + public void setReady() { + state = READY; + } + + public boolean isFailing() { + return state == FAILING; + } + + public void setFailing() { + state = FAILING; + } + + + // ----------------------------------------------------- Public Properties + +} Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SocketSender.java URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SocketSender.java?rev=376115&r1=376114&r2=376115&view=diff ============================================================================== --- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SocketSender.java (original) +++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SocketSender.java Wed Feb 8 15:27:58 2006 @@ -45,6 +45,10 @@ super(domain,host, port); } + public SocketSender(String domain,InetAddress host, int port, SenderState state) { + super(domain,host, port, state); + } + // ------------------------------------------------------------- Properties /** @@ -64,4 +68,4 @@ return buf.toString(); } -} \ No newline at end of file +} --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]