Author: fhanik
Date: Tue May  2 16:58:18 2006
New Revision: 399095

URL: http://svn.apache.org/viewcvs?rev=399095&view=rev
Log:
implemented the heart beat, the failure detector should be ready to test

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/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java?rev=399095&r1=399094&r2=399095&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
 Tue May  2 16:58:18 2006
@@ -30,6 +30,7 @@
 import java.util.HashMap;
 import org.apache.catalina.tribes.membership.Membership;
 import org.apache.catalina.tribes.membership.MemberImpl;
+import java.util.Iterator;
 
 /**
  * <p>Title: A perfect failure detector </p>
@@ -137,9 +138,29 @@
         return super.getLocalMember(incAlive);
     }
     
-    public void heartbeat() {
-        //todo, implement an expiration of members that we deemed alive
-        //check them again and act accordingly
+    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]) ) {
+                log.warn("Member added, even though we werent 
notified:"+members[i]);
+                super.memberAdded(members[i]);
+            }//end if
+        }//for
+        
+        //check suspect members if they are still alive,
+        //if not, simply issue the memberDisappeared message
+        
+        for (Iterator i = suspect.keySet().iterator(); i.hasNext(); ) {
+            MemberImpl m = (MemberImpl)i.next();
+            if (!memberAlive(m)) {
+                membership.removeMember(m);
+                super.memberDisappeared(m);
+                suspect.remove(m);
+            }//end if
+        }
+        
         super.heartbeat();
     }
     



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to