[jbosscache-commits] JBoss Cache SVN: r7107 - in core/trunk/src: test/java/org/jboss/cache and 1 other directory.
jbosscache-commits at lists.jboss.org
jbosscache-commits at lists.jboss.org
Tue Nov 11 07:48:50 EST 2008
Author: mircea.markus
Date: 2008-11-11 07:48:50 -0500 (Tue, 11 Nov 2008)
New Revision: 7107
Modified:
core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyManager.java
core/trunk/src/test/java/org/jboss/cache/UnitTestCacheFactory.java
Log:
fixed buddy issue
Modified: core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyManager.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyManager.java 2008-11-11 11:41:47 UTC (rev 7106)
+++ core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyManager.java 2008-11-11 12:48:50 UTC (rev 7107)
@@ -325,7 +325,7 @@
// allow waiting threads to process.
initialisationLatch.countDown();
- // register a CacheImpl Listener to reassign buddies as and when view changes occur
+ // register a listener to reassign buddies as and when view changes occur
viewChangeListener = new ViewChangeListener();
cache.addCacheListener(viewChangeListener);
@@ -383,6 +383,25 @@
{
return "MembershipChange: Old members = " + oldMembers + " New members = " + newMembers;
}
+
+ /**
+ * Returns the list of nodes that were in the old view and are not in the new view, and which are also in the
+ * <b>filter</b> param.
+ */
+ public Set<Address> getDroppedNodes(Collection filter)
+ {
+ if (oldMembers == null || oldMembers.isEmpty())
+ return Collections.EMPTY_SET;
+ Set<Address> result = new HashSet<Address>();
+ for (Address oldMember : oldMembers)
+ {
+ if (!newMembers.contains(oldMember) && filter.contains(oldMember))
+ {
+ result.add(oldMember);
+ }
+ }
+ return result;
+ }
}
private synchronized void enqueueViewChange(MembershipChange mc)
@@ -552,6 +571,7 @@
{
if (me.getValue().equals(groupName))
{
+ if (log.isTraceEnabled()) log.trace("handleRemoveFromBuddyGroup removing " + me.getKey());
buddyGroupsIParticipateIn.remove(me.getKey());
break;
}
@@ -1162,8 +1182,9 @@
private void handleEnqueuedViewChange() throws Exception
{
- log.trace("Waiting for enqueued view change events");
+ if (trace) log.trace("Waiting for enqueued view change events");
MembershipChange members = queue.take();
+ if (trace) log.trace("Processing membership change: " + members);
if (members == STOP_NOTIFIER)
{
log.trace("Caught stop notifier, time to go home.");
@@ -1206,28 +1227,21 @@
// look for missing data owners.
// if the view change involves the removal of a data owner of a group in which we participate in, we should
// rename the backup the region accordingly, and remove the group from the list in which the current instance participates.
- if (!members.newMembers.containsAll(buddyGroupsIParticipateIn.keySet()))
+ Set<Address> toRemove = members.getDroppedNodes(buddyGroupsIParticipateIn.keySet());
+ if (log.isTraceEnabled()) log.trace("removed members are: " + toRemove);
+
+ for (Address a : toRemove)
{
- Set<Address> toRemove = new HashSet<Address>();
-
- for (Address a : buddyGroupsIParticipateIn.keySet())
+ if (log.isTraceEnabled()) log.trace("handleEnqueuedViewChange is removing: " + a);
+ BuddyGroup bg = buddyGroupsIParticipateIn.remove(a);
+ Fqn backupRootFqn = buddyFqnTransformer.getBackupRoot(bg.getDataOwner());
+ NodeSPI backupRoot = cache.getNode(backupRootFqn);
+ if (backupRoot != null)
{
- if (!members.newMembers.contains(a)) toRemove.add(a);
+ // could be a race condition where the backup region has been removed because we have been removed
+ // from the buddy group, but the buddyGroupsIParticipateIn map hasn't been updated.
+ migrateDefunctData(backupRoot, bg.getDataOwner());
}
-
- for (Address a : toRemove)
- {
- BuddyGroup bg = buddyGroupsIParticipateIn.remove(a);
- Fqn backupRootFqn = buddyFqnTransformer.getBackupRoot(bg.getDataOwner());
- NodeSPI backupRoot = cache.getNode(backupRootFqn);
- if (backupRoot != null)
- {
- // could be a race condition where the backup region has been removed because we have been removed
- // from the buddy group, but the buddyGroupsIParticipateIn map hasn't been updated.
- migrateDefunctData(backupRoot, bg.getDataOwner());
- }
-
- }
}
}
@@ -1287,18 +1301,11 @@
Vector<Address> newMembers = newView.getMembers();
// the whole 'oldMembers' concept is only used for buddy pool announcements.
- if (config.getBuddyPoolName() == null)
- {
- enqueueViewChange(new MembershipChange(null, new Vector<Address>(newMembers)));
- }
- else
- {
- MembershipChange mc = new MembershipChange(oldMembers == null ? null : new Vector<Address>(oldMembers), new Vector<Address>(newMembers));
- enqueueViewChange(mc);
- if (oldMembers == null) oldMembers = new Vector<Address>();
- oldMembers.clear();
- oldMembers.addAll(newMembers);
- }
+ MembershipChange mc = new MembershipChange(oldMembers == null ? null : new Vector<Address>(oldMembers), new Vector<Address>(newMembers));
+ enqueueViewChange(mc);
+ if (oldMembers == null) oldMembers = new Vector<Address>();
+ oldMembers.clear();
+ oldMembers.addAll(newMembers);
}
}
Modified: core/trunk/src/test/java/org/jboss/cache/UnitTestCacheFactory.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/UnitTestCacheFactory.java 2008-11-11 11:41:47 UTC (rev 7106)
+++ core/trunk/src/test/java/org/jboss/cache/UnitTestCacheFactory.java 2008-11-11 12:48:50 UTC (rev 7107)
@@ -220,25 +220,6 @@
*/
public void mangleConfiguration(Configuration configuration)
{
- StackTraceElement[] traceElements = Thread.getAllStackTraces().get(Thread.currentThread());
- Class clazz = null;
- for (StackTraceElement traceElement : traceElements)
- {
- String className = traceElement.getClassName();
- if (className.startsWith("java.lang.Thread")) continue;
- if (className.startsWith("org.jboss"))
- {
- try
- {
- clazz = Class.forName(traceElement.getClassName());
- } catch (ClassNotFoundException e)
- {
- throw new Error(traceElement.getClassName() + " should be in class path");
- }
- }
- }
- System.out.println("Test class is = " + clazz);
-
configuration.setClusterConfig(mangleClusterConfiguration(configuration.getClusterConfig()));
// Check if the cluster name contains thread id. If not, append.
// We can not just append the threadId, since some of the tests are crating instances
More information about the jbosscache-commits
mailing list