[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