[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