[jbosscache-commits] JBoss Cache SVN: r8149 - in core/trunk: src/main/java/org/jboss/cache/buddyreplication and 1 other directory.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Wed Aug 5 07:21:18 EDT 2009


Author: manik.surtani at jboss.com
Date: 2009-08-05 07:21:18 -0400 (Wed, 05 Aug 2009)
New Revision: 8149

Added:
   core/trunk/src/main/java/org/jboss/cache/buddyreplication/AddressLocator.java
   core/trunk/src/main/java/org/jboss/cache/buddyreplication/JGroups26AddressLocator.java
   core/trunk/src/main/java/org/jboss/cache/buddyreplication/JGroups28AddressLocator.java
Modified:
   core/trunk/pom.xml
   core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyManager.java
   core/trunk/src/main/java/org/jboss/cache/buddyreplication/NextMemberBuddyLocator.java
Log:
JBCACHE-1517 JGroups 2.8 compatibility

Modified: core/trunk/pom.xml
===================================================================
--- core/trunk/pom.xml	2009-08-05 10:54:02 UTC (rev 8148)
+++ core/trunk/pom.xml	2009-08-05 11:21:18 UTC (rev 8149)
@@ -27,7 +27,7 @@
         <dependency>
             <groupId>jgroups</groupId>
             <artifactId>jgroups</artifactId>
-            <version>2.6.7.GA</version>
+            <version>2.8.0.Beta2</version>
         </dependency>
 
         <!--
@@ -49,7 +49,7 @@
         <dependency>
             <groupId>org.jboss</groupId>
             <artifactId>jboss-common-core</artifactId>
-            <version>2.2.10.GA</version>
+            <version>2.2.14.GA</version>
         </dependency>
 
         <!-- optional dependencies -->

Added: core/trunk/src/main/java/org/jboss/cache/buddyreplication/AddressLocator.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/buddyreplication/AddressLocator.java	                        (rev 0)
+++ core/trunk/src/main/java/org/jboss/cache/buddyreplication/AddressLocator.java	2009-08-05 11:21:18 UTC (rev 8149)
@@ -0,0 +1,15 @@
+package org.jboss.cache.buddyreplication;
+
+import org.jgroups.Address;
+
+import java.net.InetAddress;
+
+/**
+ * Locates the InetAddress of an Address
+ *
+ * @author Manik Surtani
+ * @since 3.2.0
+ */
+public interface AddressLocator {   
+   InetAddress locate(Address a);
+}


Property changes on: core/trunk/src/main/java/org/jboss/cache/buddyreplication/AddressLocator.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyManager.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyManager.java	2009-08-05 10:54:02 UTC (rev 8148)
+++ core/trunk/src/main/java/org/jboss/cache/buddyreplication/BuddyManager.java	2009-08-05 11:21:18 UTC (rev 8149)
@@ -304,6 +304,12 @@
          }
          buddyGroup.setGroupName(buddyFqnTransformer.getGroupNameFromAddress(localAddress));
 
+         // make sure the NextMemberBuddyLocator has a ref to the Channel, to be able to convert a LogicalAddress to a PhysicalAddress.
+         if (buddyLocator instanceof NextMemberBuddyLocator)
+         {
+            ((NextMemberBuddyLocator) buddyLocator).setChannel(rpcManager.getChannel());
+         }
+
          if (config.getBuddyPoolName() != null)
          {
             buddyPool.put(buddyGroup.getDataOwner(), config.getBuddyPoolName());

Added: core/trunk/src/main/java/org/jboss/cache/buddyreplication/JGroups26AddressLocator.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/buddyreplication/JGroups26AddressLocator.java	                        (rev 0)
+++ core/trunk/src/main/java/org/jboss/cache/buddyreplication/JGroups26AddressLocator.java	2009-08-05 11:21:18 UTC (rev 8149)
@@ -0,0 +1,27 @@
+package org.jboss.cache.buddyreplication;
+
+import org.jgroups.Address;
+import org.jgroups.stack.IpAddress;
+
+import java.net.InetAddress;
+
+/**
+ * Address locator that has no knowledge of the new JGroups PhysicalAddress interface
+ *
+ * @author Manik Surtani
+ * @since 3.2.0
+ */
+public class JGroups26AddressLocator implements AddressLocator
+{
+   public InetAddress locate(Address a)
+   {
+      if (a instanceof IpAddress)
+      {
+         return ((IpAddress) a).getIpAddress();
+      }
+      else
+      {
+         throw new RuntimeException("Expected Address to be of type IpAddress.  Instead, was " + a.getClass() + "!  Don't know how to handle, giving up!");
+      }
+   }
+}


Property changes on: core/trunk/src/main/java/org/jboss/cache/buddyreplication/JGroups26AddressLocator.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: core/trunk/src/main/java/org/jboss/cache/buddyreplication/JGroups28AddressLocator.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/buddyreplication/JGroups28AddressLocator.java	                        (rev 0)
+++ core/trunk/src/main/java/org/jboss/cache/buddyreplication/JGroups28AddressLocator.java	2009-08-05 11:21:18 UTC (rev 8149)
@@ -0,0 +1,40 @@
+package org.jboss.cache.buddyreplication;
+
+import org.jgroups.Address;
+import org.jgroups.Channel;
+import org.jgroups.Event;
+import org.jgroups.PhysicalAddress;
+import org.jgroups.stack.IpAddress;
+
+import java.net.InetAddress;
+
+/**
+ * An address locator that is able to deal with the JGroups 2.8 PhysicalAddress interface
+ *
+ * @author Manik Surtani
+ * @since 3.2.0
+ */
+public class JGroups28AddressLocator extends JGroups26AddressLocator
+{
+   private Channel channel;
+
+   public JGroups28AddressLocator(Channel channel)
+   {
+      this.channel = channel;
+   }
+
+   @Override
+   public InetAddress locate(Address a)
+   {
+      if (a instanceof IpAddress)
+      {
+         return super.locate(a);
+      }
+      else
+      {
+         PhysicalAddress pa; // physical address (interface)
+         pa = (PhysicalAddress) channel.downcall(new Event(Event.GET_PHYSICAL_ADDRESS, a));
+         return super.locate(pa);
+      }
+   }
+}


Property changes on: core/trunk/src/main/java/org/jboss/cache/buddyreplication/JGroups28AddressLocator.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: core/trunk/src/main/java/org/jboss/cache/buddyreplication/NextMemberBuddyLocator.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/buddyreplication/NextMemberBuddyLocator.java	2009-08-05 10:54:02 UTC (rev 8148)
+++ core/trunk/src/main/java/org/jboss/cache/buddyreplication/NextMemberBuddyLocator.java	2009-08-05 11:21:18 UTC (rev 8149)
@@ -26,7 +26,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.jboss.cache.config.BuddyReplicationConfig.BuddyLocatorConfig;
 import org.jgroups.Address;
-import org.jgroups.stack.IpAddress;
+import org.jgroups.Channel;
 
 import java.net.InetAddress;
 import java.net.NetworkInterface;
@@ -56,12 +56,19 @@
    private final Log log = LogFactory.getLog(NextMemberBuddyLocator.class);
 
    private NextMemberBuddyLocatorConfig config = new NextMemberBuddyLocatorConfig();
+   private AddressLocator addressLocator;
+   private Channel channel;
 
    public BuddyLocatorConfig getConfig()
    {
       return config;
    }
 
+   public void setChannel(Channel channel)
+   {
+      this.channel = channel;
+   }
+
    public void init(BuddyLocatorConfig buddyLocatorConfig)
    {
       if (buddyLocatorConfig instanceof NextMemberBuddyLocatorConfig)
@@ -77,6 +84,18 @@
          // We were passed null; just use a default config
          this.config = new NextMemberBuddyLocatorConfig();
       }
+
+      // test if JGroups 2.8 is in use!
+      try
+      {
+         getClass().getClassLoader().loadClass("org.jgroups.PhysicalAddress"); // this is new in JG 2.8
+         addressLocator = new JGroups28AddressLocator(channel);
+      }
+      catch (ClassNotFoundException e)
+      {
+         // fall back to JGroups 2.6
+         addressLocator = new JGroups26AddressLocator();
+      }
    }
 
    public List<Address> locateBuddies(Map<Address, String> buddyPoolMap, List<Address> currentMembership, Address dataOwner)
@@ -151,7 +170,7 @@
       return buddies;
    }
 
-   private boolean isInSameBuddyPool(Map<Address, String> buddyPoolMap, Address candidate, Address dataOwner)
+   protected boolean isInSameBuddyPool(Map<Address, String> buddyPoolMap, Address candidate, Address dataOwner)
    {
       if (buddyPoolMap == null) return true;
       Object ownerPoolName = buddyPoolMap.get(dataOwner);
@@ -159,11 +178,10 @@
       return !(ownerPoolName == null || candidatePoolName == null) && ownerPoolName.equals(candidatePoolName);
    }
 
-   private boolean isColocated(Address candidate, Address dataOwner)
+   protected boolean isColocated(Address candidate, Address dataOwner)
    {
-      // assume they're both IpAddresses??
-      InetAddress inetC = ((IpAddress) candidate).getIpAddress();
-      InetAddress inetD = ((IpAddress) dataOwner).getIpAddress();
+      InetAddress inetC = addressLocator.locate(candidate);
+      InetAddress inetD = addressLocator.locate(dataOwner);
 
       if (inetC.equals(inetD)) return true;
 



More information about the jbosscache-commits mailing list