[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