[infinispan-commits] Infinispan SVN: r1230 - in trunk/core/src: main/java/org/infinispan/remoting and 1 other directories.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Fri Nov 27 11:29:36 EST 2009
Author: manik.surtani at jboss.com
Date: 2009-11-27 11:29:36 -0500 (Fri, 27 Nov 2009)
New Revision: 1230
Added:
trunk/core/src/main/java/org/infinispan/remoting/MembershipArithmetic.java
Removed:
trunk/core/src/test/java/org/infinispan/distribution/DistributionManagerUnitTest.java
Modified:
trunk/core/src/main/java/org/infinispan/distribution/DistributionManagerImpl.java
Log:
Extracted membership list arithmetic
Modified: trunk/core/src/main/java/org/infinispan/distribution/DistributionManagerImpl.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/distribution/DistributionManagerImpl.java 2009-11-27 16:28:19 UTC (rev 1229)
+++ trunk/core/src/main/java/org/infinispan/distribution/DistributionManagerImpl.java 2009-11-27 16:29:36 UTC (rev 1230)
@@ -34,6 +34,7 @@
import org.infinispan.remoting.rpc.ResponseMode;
import org.infinispan.remoting.rpc.RpcManager;
import org.infinispan.remoting.transport.Address;
+import org.infinispan.remoting.MembershipArithmetic;
import org.infinispan.util.Util;
import org.infinispan.util.logging.Log;
import org.infinispan.util.logging.LogFactory;
@@ -145,31 +146,16 @@
joinComplete = false;
}
- final List<Address> diffAll(List<Address> l1, List<Address> l2) {
- List<Address> largerList = l1.size() > l2.size() ? l1 : l2;
- List<Address> smallerList = largerList == l1 ? l2 : l1;
-
- List<Address> list = new ArrayList<Address>(largerList);
- list.removeAll(smallerList);
- return list;
- }
-
- final Address diff(List<Address> l1, List<Address> l2) {
- List<Address> l = diffAll(l1, l2);
- return l.isEmpty() ? null : l.get(0);
- }
-
-
public void rehash(List<Address> newMembers, List<Address> oldMembers) {
boolean join = oldMembers.size() < newMembers.size();
// on view change, we should update our view
log.info("Detected a veiw change. Member list changed from {0} to {1}", oldMembers, newMembers);
if (join) {
- Address joiner = diff(newMembers, oldMembers);
+ Address joiner = MembershipArithmetic.getMemberJoined(oldMembers, newMembers);
log.info("This is a JOIN event! Wait for notification from new joiner " + joiner);
} else {
- Address leaver = diff(newMembers, oldMembers);
+ Address leaver = MembershipArithmetic.getMemberLeft(oldMembers, newMembers);
log.info("This is a LEAVE event! Node {0} has just left", leaver);
boolean willReceiveLeaverState = willReceiveLeaverState(leaver);
Added: trunk/core/src/main/java/org/infinispan/remoting/MembershipArithmetic.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/remoting/MembershipArithmetic.java (rev 0)
+++ trunk/core/src/main/java/org/infinispan/remoting/MembershipArithmetic.java 2009-11-27 16:29:36 UTC (rev 1230)
@@ -0,0 +1,40 @@
+package org.infinispan.remoting;
+
+import org.infinispan.remoting.transport.Address;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * A helper to perform common arithmetic functions with membership lists
+ *
+ * @author Manik Surtani
+ * @since 4.0
+ */
+public class MembershipArithmetic {
+ public static List<Address> getMembersJoined(List<Address> oldList, List<Address> newList) {
+ Set<Address> tmp = new HashSet<Address>(newList);
+ tmp.removeAll(oldList);
+ return new ArrayList<Address>(tmp);
+ }
+
+ public static List<Address> getMembersLeft(List<Address> oldList, List<Address> newList) {
+ Set<Address> tmp = new HashSet<Address>(oldList);
+ tmp.removeAll(newList);
+ return new ArrayList<Address>(tmp);
+ }
+
+ public static Address getMemberJoined(List<Address> oldList, List<Address> newList) {
+ Set<Address> tmp = new HashSet<Address>(newList);
+ tmp.removeAll(oldList);
+ return tmp.isEmpty() ? null : tmp.iterator().next();
+ }
+
+ public static Address getMemberLeft(List<Address> oldList, List<Address> newList) {
+ Set<Address> tmp = new HashSet<Address>(oldList);
+ tmp.removeAll(newList);
+ return tmp.isEmpty() ? null : tmp.iterator().next();
+ }
+}
Property changes on: trunk/core/src/main/java/org/infinispan/remoting/MembershipArithmetic.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Deleted: trunk/core/src/test/java/org/infinispan/distribution/DistributionManagerUnitTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/DistributionManagerUnitTest.java 2009-11-27 16:28:19 UTC (rev 1229)
+++ trunk/core/src/test/java/org/infinispan/distribution/DistributionManagerUnitTest.java 2009-11-27 16:29:36 UTC (rev 1230)
@@ -1,47 +0,0 @@
-package org.infinispan.distribution;
-
-import org.easymock.EasyMock;
-import org.infinispan.remoting.transport.Address;
-import org.infinispan.test.AbstractInfinispanTest;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-
-/**
- * Tests helper functions on the DistManager
- *
- * @author Manik Surtani
- * @since 4.0
- */
- at Test(groups = "unit", testName = "distribution.DistributionManagerUnitTest")
-public class DistributionManagerUnitTest extends AbstractInfinispanTest {
- DistributionManagerImpl dmi = new DistributionManagerImpl();
-
- public void testDeterminingLeaversAndJoiners() {
- Address a1 = EasyMock.createNiceMock(Address.class);
- Address a2 = EasyMock.createNiceMock(Address.class);
- Address a3 = EasyMock.createNiceMock(Address.class);
- Address a4 = EasyMock.createNiceMock(Address.class);
- Address a5 = EasyMock.createNiceMock(Address.class);
-
- Address newAddress = dmi.diff(Arrays.asList(a1, a2, a3, a4),
- Arrays.asList(a1, a2, a3, a4, a5));
-
- assert newAddress == a5 : "Expecting " + a5 + " but was " + newAddress;
-
- newAddress = dmi.diff(Arrays.asList(a1, a2, a3, a4),
- Arrays.asList(a5, a4, a3, a2, a1));
-
- assert newAddress == a5 : "Expecting " + a5 + " but was " + newAddress;
-
- newAddress = dmi.diff(Arrays.asList(a1, a2, a3, a4, a5),
- Arrays.asList(a1, a2, a3, a4));
-
- assert newAddress == a5 : "Expecting " + a5 + " but was " + newAddress;
-
- newAddress = dmi.diff(Arrays.asList(a5, a4, a3, a2, a1),
- Arrays.asList(a1, a2, a3, a4));
-
- assert newAddress == a5 : "Expecting " + a5 + " but was " + newAddress;
- }
-}
More information about the infinispan-commits
mailing list