[jboss-cvs] JBossCache/src/org/jboss/cache/buddyreplication ...

Manik Surtani manik at jboss.org
Tue Mar 13 14:03:18 EDT 2007


  User: msurtani
  Date: 07/03/13 14:03:18

  Modified:    src/org/jboss/cache/buddyreplication   BuddyGroup.java
                        BuddyManager.java
  Log:
  JBCACHE-950
  
  Revision  Changes    Path
  1.12      +33 -15    JBossCache/src/org/jboss/cache/buddyreplication/BuddyGroup.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: BuddyGroup.java
  ===================================================================
  RCS file: /cvsroot/jboss/JBossCache/src/org/jboss/cache/buddyreplication/BuddyGroup.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -b -r1.11 -r1.12
  --- BuddyGroup.java	9 Feb 2007 17:23:58 -0000	1.11
  +++ BuddyGroup.java	13 Mar 2007 18:03:18 -0000	1.12
  @@ -11,9 +11,11 @@
   
   import java.io.Serializable;
   import java.util.ArrayList;
  +import java.util.Collection;
   import java.util.Collections;
  +import java.util.Date;
   import java.util.List;
  -import java.util.Vector;
  +import java.util.concurrent.CopyOnWriteArrayList;
   
   /**
    * Value object that represents a buddy group
  @@ -21,7 +23,7 @@
    * @author <a href="mailto:manik at jboss.org">Manik Surtani (manik at jboss.org)</a>
    */
   @ThreadSafe
  -public class BuddyGroup implements Serializable//Externalizable
  +public class BuddyGroup implements Serializable
   {
      /**
       * Serial version.
  @@ -32,41 +34,56 @@
   
      private Address dataOwner;
   
  +   private Date lastModified = new Date();
  +
      /**
  -    * Vector<Address> - a list of JGroups addresses
  +    * List<Address> - a list of JGroups addresses
       */
  -   List<Address> buddies = new Vector<Address>();//Collections.synchronizedList(new ArrayList());
  -
  -   //    List buddies = new ArrayList();
  +   private List<Address> buddies = new CopyOnWriteArrayList<Address>();
   
  -   public synchronized String getGroupName()
  +   public String getGroupName()
      {
         return groupName;
      }
   
  -   public synchronized void setGroupName(String groupName)
  +   protected void setGroupName(String groupName)
      {
         this.groupName = groupName;
  +      lastModified = new Date();
      }
   
  -   public synchronized Address getDataOwner()
  +   public Address getDataOwner()
      {
         return dataOwner;
      }
   
  -   public synchronized void setDataOwner(Address dataOwner)
  +   protected void setDataOwner(Address dataOwner)
      {
         this.dataOwner = dataOwner;
  +      lastModified = new Date();
  +   }
  +
  +   public List<Address> getBuddies()
  +   {
  +      // defensive copy and immutable.
  +      return Collections.unmodifiableList(new ArrayList<Address>(buddies));
  +   }
  +
  +   protected void addBuddies(Collection<Address> buddies)
  +   {
  +      this.buddies.addAll(buddies);
  +      lastModified = new Date();
      }
   
  -   public synchronized List<Address> getBuddies()
  +   protected void removeBuddies(Collection<Address> buddies)
      {
  -      return Collections.unmodifiableList(buddies);
  +      this.buddies.removeAll(buddies);
  +      lastModified = new Date();
      }
   
  -   public synchronized void setBuddies(List<Address> buddies)
  +   public Date getLastModified()
      {
  -      this.buddies = new ArrayList(buddies);
  +      return lastModified;
      }
   
      public String toString()
  @@ -74,7 +91,8 @@
         StringBuffer b = new StringBuffer("BuddyGroup: (");
         b.append("dataOwner: ").append(dataOwner).append(", ");
         b.append("groupName: ").append(groupName).append(", ");
  -      b.append("buddies: ").append(buddies).append(")");
  +      b.append("buddies: ").append(buddies).append(",");
  +      b.append("lastModified: ").append(lastModified).append(")");
         return b.toString();
      }
   
  
  
  
  1.70      +18 -6     JBossCache/src/org/jboss/cache/buddyreplication/BuddyManager.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: BuddyManager.java
  ===================================================================
  RCS file: /cvsroot/jboss/JBossCache/src/org/jboss/cache/buddyreplication/BuddyManager.java,v
  retrieving revision 1.69
  retrieving revision 1.70
  diff -u -b -r1.69 -r1.70
  --- BuddyManager.java	12 Mar 2007 23:06:21 -0000	1.69
  +++ BuddyManager.java	13 Mar 2007 18:03:18 -0000	1.70
  @@ -295,9 +295,11 @@
         // some of my buddies have died!
         List<Address> newBuddies = buddyLocator.locateBuddies(buddyPool, membership, buddyGroup.getDataOwner());
         List<Address> uninitialisedBuddies = new ArrayList<Address>();
  +      List<Address> originalBuddies = buddyGroup.getBuddies();
  +
         for (Address newBuddy : newBuddies)
         {
  -         if (!buddyGroup.buddies.contains(newBuddy))
  +         if (!originalBuddies.contains(newBuddy))
            {
               uninitialisedBuddies.add(newBuddy);
            }
  @@ -305,7 +307,7 @@
   
         List<Address> obsoleteBuddies = new ArrayList<Address>();
         // find obsolete buddies
  -      for (Address origBuddy : buddyGroup.buddies)
  +      for (Address origBuddy : originalBuddies)
         {
            if (!newBuddies.contains(origBuddy))
            {
  @@ -314,9 +316,11 @@
         }
   
         // Update buddy list
  +      boolean buddyGroupMutated = false;
         if (!obsoleteBuddies.isEmpty())
         {
            removeFromGroup(obsoleteBuddies);
  +         buddyGroupMutated = true;
         }
         else
         {
  @@ -325,13 +329,21 @@
         if (!uninitialisedBuddies.isEmpty())
         {
            addBuddies(newBuddies);
  +         buddyGroupMutated = true;
         }
         else
         {
            log.trace("No uninitialized buddies found, nothing to announce.");
         }
   
  -      log.info("New buddy group: " + buddyGroup);
  +      if (buddyGroupMutated)
  +      {
  +         if (log.isInfoEnabled()) log.info("Buddy group members have changed. New buddy group: " + buddyGroup);
  +         cache.getConfiguration().getRuntimeConfig().setBuddyGroup(buddyGroup);
  +      }
  +      else
  +         log.debug("Nothing has changed; new buddy list is identical to the old one.");
  +
      }
   
      // -------------- methods to be called by the tree cache  --------------------
  @@ -500,7 +512,7 @@
       */
      public List<Address> getBuddyAddresses()
      {
  -      return buddyGroup.buddies;
  +      return buddyGroup.getBuddies();
      }
   
      /**
  @@ -536,7 +548,7 @@
         {
            log.debug("Removing obsolete buddies from buddy group [" + buddyGroup.getGroupName() + "].  Obsolete buddies are " + buddies);
         }
  -      buddyGroup.buddies.removeAll(buddies);
  +      buddyGroup.removeBuddies(buddies);
         // now broadcast a message to the removed buddies.
         MethodCall membershipCall = MethodCallFactory.create(MethodDeclarations.remoteRemoveFromBuddyGroupMethod, buddyGroup.getGroupName());
         MethodCall replicateCall = MethodCallFactory.create(MethodDeclarations.replicateMethod, membershipCall);
  @@ -596,7 +608,7 @@
         }
   
   
  -      buddyGroup.buddies.addAll(buddies);
  +      buddyGroup.addBuddies(buddies);
   
         // Create the state transfer map
   
  
  
  



More information about the jboss-cvs-commits mailing list