You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by fh...@apache.org on 2006/05/19 20:26:09 UTC
svn commit: r407877 -
/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java
Author: fhanik
Date: Fri May 19 11:26:09 2006
New Revision: 407877
URL: http://svn.apache.org/viewvc?rev=407877&view=rev
Log:
small adjustment to the failure detector, difference between member add and disappear
Modified:
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java
Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java?rev=407877&r1=407876&r2=407877&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java Fri May 19 11:26:09 2006
@@ -76,7 +76,9 @@
protected Membership membership = null;
- protected HashMap suspect = new HashMap();
+ protected HashMap removeSuspects = new HashMap();
+
+ protected HashMap addSuspects = new HashMap();
public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException {
try {
@@ -110,12 +112,20 @@
public synchronized void memberAdded(Member member) {
if ( membership == null ) setupMembership();
- if ( suspect.containsKey(member) ) {
+ if ( removeSuspects.containsKey(member) ) {
//previously marked suspect, system below picked up the member again
- suspect.remove(member);
+ removeSuspects.remove(member);
} else {
//if we add it here, then add it upwards too
- if ( memberAlive(member) && membership.memberAlive((MemberImpl)member)) super.memberAdded(member);
+ if ( membership.memberAlive((MemberImpl)member) ) {
+ //check to see if it is alive
+ if (memberAlive(member)) {
+ super.memberAdded(member);
+ } else {
+ membership.removeMember((MemberImpl)member);
+ addSuspects.put(member, new Long(System.currentTimeMillis()));
+ }
+ }
}
}
@@ -130,7 +140,7 @@
super.memberDisappeared(member);
} else {
//add the member as suspect
- suspect.put(member, new Long(System.currentTimeMillis()));
+ removeSuspects.put(member, new Long(System.currentTimeMillis()));
}
}
@@ -154,34 +164,51 @@
}
public synchronized void heartbeat() {
- if ( membership == null ) setupMembership();
- //update all alive times
- Member[] members = super.getMembers();
- for ( int i=0; i<members.length; i++ ) {
- if ( membership.memberAlive((MemberImpl)members[i]) ) {
- //we don't have this one in our membership, check to see if he/she is alive
- if ( memberAlive(members[i]) ) {
- log.warn("Member added, even though we werent notified:"+members[i]);
- super.memberAdded(members[i]);
- } else {
- membership.removeMember((MemberImpl)members[i]);
- }//end if
- }//end if
- }//for
-
- //check suspect members if they are still alive,
- //if not, simply issue the memberDisappeared message
- MemberImpl[] keys = (MemberImpl[])suspect.keySet().toArray(new MemberImpl[suspect.size()]);
- for (int i=0; i<keys.length; i++ ) {
- MemberImpl m = (MemberImpl)keys[i];
- if (membership.getMember(m)!=null && (!memberAlive(m))) {
- membership.removeMember(m);
- super.memberDisappeared(m);
- suspect.remove(m);
- }//end if
+ try {
+ if (membership == null) setupMembership();
+ //update all alive times
+ Member[] members = super.getMembers();
+ for (int i = 0; i < members.length; i++) {
+ if (membership.memberAlive( (MemberImpl) members[i])) {
+ //we don't have this one in our membership, check to see if he/she is alive
+ if (memberAlive(members[i])) {
+ log.warn("Member added, even though we werent notified:" + members[i]);
+ super.memberAdded(members[i]);
+ } else {
+ membership.removeMember( (MemberImpl) members[i]);
+ } //end if
+ } //end if
+ } //for
+
+ //check suspect members if they are still alive,
+ //if not, simply issue the memberDisappeared message
+ MemberImpl[] keys = (MemberImpl[]) removeSuspects.keySet().toArray(new MemberImpl[removeSuspects.size()]);
+ for (int i = 0; i < keys.length; i++) {
+ MemberImpl m = (MemberImpl) keys[i];
+ if (membership.getMember(m) != null && (!memberAlive(m))) {
+ membership.removeMember(m);
+ super.memberDisappeared(m);
+ removeSuspects.remove(m);
+ } //end if
+ }
+
+ //check add suspects members if they are alive now,
+ //if they are, simply issue the memberAdded message
+ keys = (MemberImpl[]) addSuspects.keySet().toArray(new MemberImpl[addSuspects.size()]);
+ for (int i = 0; i < keys.length; i++) {
+ MemberImpl m = (MemberImpl) keys[i];
+ if ( membership.getMember(m) == null && (memberAlive(m))) {
+ membership.memberAlive(m);
+ super.memberAdded(m);
+ addSuspects.remove(m);
+ } //end if
+ }
+
+ }catch ( Exception x ) {
+ log.warn("Unable to perform heartbeat on the TcpFailureDetector.",x);
+ } finally {
+ super.heartbeat();
}
-
- super.heartbeat();
}
protected synchronized void setupMembership() {
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org