[jbosscache-commits] JBoss Cache SVN: r7774 - core/trunk/src/main/java/org/jboss/cache.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Tue Feb 24 10:42:55 EST 2009


Author: manik.surtani at jboss.com
Date: 2009-02-24 10:42:55 -0500 (Tue, 24 Feb 2009)
New Revision: 7774

Modified:
   core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java
Log:
Better sanity check

Modified: core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java	2009-02-24 15:26:32 UTC (rev 7773)
+++ core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java	2009-02-24 15:42:55 UTC (rev 7774)
@@ -63,6 +63,7 @@
 import org.jgroups.blocks.GroupRequest;
 import org.jgroups.blocks.RspFilter;
 import org.jgroups.protocols.TP;
+import org.jgroups.protocols.pbcast.STREAMING_STATE_TRANSFER;
 import org.jgroups.stack.ProtocolStack;
 import org.jgroups.util.Rsp;
 import org.jgroups.util.RspList;
@@ -321,7 +322,7 @@
             sanityCheckConfiguration(nonBlocking, fetchState);
 
             this.flushTracker = nonBlocking ? new NonBlockingFlushTracker() : new StandardFlushTracker();
-            initialiseChannelAndRpcDispatcher(fetchState && !nonBlocking);
+            initialiseChannelAndRpcDispatcher(fetchState && !nonBlocking, nonBlocking);
 
             if (!fetchState || nonBlocking)
             {
@@ -387,10 +388,6 @@
 
       if (isUsingBuddyReplication)
          throw new ConfigurationException("Non-blocking state transfer cannot be used with buddy replication at this time.  Please disable either buddy replication or non-blocking state transfer.");
-
-      // Make sure Streaming state transfer is enabled in JGroups!
-      if (!configuration.getClusterConfig().contains("STREAMING_STATE_TRANSFER"))
-         throw new ConfigurationException("Non-blocking state transfer requires the STREAMING_STATE_TRANSFER protocol in JGroups.  Please make sure this is available, or else disable non-blocking state transfer.");
    }
    
    private void startNonBlockStateTransfer(List<Address> members)
@@ -501,7 +498,7 @@
    }
 
    @SuppressWarnings("deprecation")
-   private void initialiseChannelAndRpcDispatcher(boolean fetchState) throws CacheException
+   private void initialiseChannelAndRpcDispatcher(boolean fetchStateWithoutNBST, boolean nbst) throws CacheException
    {
       channel = configuration.getRuntimeConfig().getChannel();
       if (channel == null)
@@ -545,11 +542,15 @@
          configuration.getRuntimeConfig().setChannel(channel);
       }
 
+
+      if (nbst && ((JChannel) channel).getProtocolStack().findProtocol(STREAMING_STATE_TRANSFER.class) == null)
+            throw new ConfigurationException("JGroups channel does not use STREAMING_STATE_TRANSFER!  This is a requirement for non-blocking state transfer.  Either make sure your JGroups configuration uses STREAMING_STATE_TRANSFER or disable non-blocking state transfer.");
+
       // Channel.LOCAL *must* be set to false so we don't see our own messages - otherwise invalidations targeted at
       // remote instances will be received by self.
       channel.setOpt(Channel.LOCAL, false);
       channel.setOpt(Channel.AUTO_RECONNECT, true);
-      channel.setOpt(Channel.AUTO_GETSTATE, fetchState);
+      channel.setOpt(Channel.AUTO_GETSTATE, fetchStateWithoutNBST);
       channel.setOpt(Channel.BLOCK, true);
 
       if (configuration.isUseRegionBasedMarshalling())




More information about the jbosscache-commits mailing list