fhanik      2004/04/08 08:30:11

  Modified:    modules/cluster/src/share/org/apache/catalina/cluster/mcast
                        McastMembership.java
               modules/cluster/src/share/org/apache/catalina/cluster/session
                        DeltaManager.java
               modules/cluster/src/share/org/apache/catalina/cluster/tcp
                        SimpleTcpCluster.java
  Log:
  Three fixes:
  
  1. Membership alive time gets updated with each new broad cast, this will keep the 
membership updated with the exact lifetime of each node
  
  2. The cluster sorts its members by desc alive time
  
  3. change the started flag to be set earlier in the DeltaManager, somehow the start 
is still invoked twice, will investigate
  
  Revision  Changes    Path
  1.4       +5 -2      
jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/mcast/McastMembership.java
  
  Index: McastMembership.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/mcast/McastMembership.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- McastMembership.java      27 Feb 2004 14:58:55 -0000      1.3
  +++ McastMembership.java      8 Apr 2004 15:30:11 -0000       1.4
  @@ -76,6 +76,9 @@
               entry = new MbrEntry(m);
               map.put(m.getName(),entry);
               result = true;
  +        } else {
  +            //update the member alive time
  +            entry.getMember().setMemberAliveTime(m.getMemberAliveTime());
           }//end if
           entry.accessed();
           return result;
  @@ -163,4 +166,4 @@
               return delta > maxtime;
           }
       }//MbrEntry
  -}
  \ No newline at end of file
  +}
  
  
  
  1.22      +3 -2      
jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java
  
  Index: DeltaManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- DeltaManager.java 7 Apr 2004 20:43:54 -0000       1.21
  +++ DeltaManager.java 8 Apr 2004 15:30:11 -0000       1.22
  @@ -602,8 +602,9 @@
           if (started) {
               return;
           }
  -        lifecycle.fireLifecycleEvent(START_EVENT, null);
           started = true;
  +        lifecycle.fireLifecycleEvent(START_EVENT, null);
  +        
   
           // Force initialization of the random number generator
           String dummy = generateSessionId();
  
  
  
  1.38      +27 -2     
jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java
  
  Index: SimpleTcpCluster.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- SimpleTcpCluster.java     7 Apr 2004 20:43:55 -0000       1.37
  +++ SimpleTcpCluster.java     8 Apr 2004 15:30:11 -0000       1.38
  @@ -167,6 +167,9 @@
       private long nrOfMsgsReceived = 0;
       private long msgSendTime = 0;
       private long lastChecked = System.currentTimeMillis();
  +    
  +    //sort members by alive time
  +    protected MemberComparator memberComparator = new MemberComparator();
   
       private String managerClassName = 
"org.apache.catalina.cluster.session.DeltaManager";
   
  @@ -281,7 +284,10 @@
       }
   
       public Member[] getMembers() {
  -        return membershipService.getMembers();
  +        Member[] members = membershipService.getMembers();
  +        //sort by alive time
  +        java.util.Arrays.sort(members,memberComparator);
  +        return members;
       }
       
   
  @@ -643,6 +649,25 @@
       
       public void addValve(Valve valve) {
           this.valve = valve;
  +    }
  +    
  +    private class MemberComparator implements java.util.Comparator {
  +        
  +        public int compare(Object o1, Object o2) { 
  +            try {
  +                return compare((Member)o1,(Member)o2);
  +            } catch (ClassCastException x) {
  +                return 0;
  +            }
  +        }
  +        
  +        public int compare(Member m1, Member m2) {
  +            //longer alive time, means sort first
  +            long result = m2.getMemberAliveTime() - m1.getMemberAliveTime();
  +            if ( result < 0 ) return -1;
  +            else if ( result == 0 ) return 0;
  +            else return 1;
  +        }
       }
       
       
  
  
  

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

Reply via email to