[infinispan-commits] Infinispan SVN: r1450 - in trunk/core/src/main/java/org/infinispan: distribution and 1 other directory.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Thu Feb 4 09:35:48 EST 2010


Author: manik.surtani at jboss.com
Date: 2010-02-04 09:35:48 -0500 (Thu, 04 Feb 2010)
New Revision: 1450

Modified:
   trunk/core/src/main/java/org/infinispan/config/Configuration.java
   trunk/core/src/main/java/org/infinispan/distribution/JoinTask.java
Log:
Better retry handling

Modified: trunk/core/src/main/java/org/infinispan/config/Configuration.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/config/Configuration.java	2010-02-04 14:28:44 UTC (rev 1449)
+++ trunk/core/src/main/java/org/infinispan/config/Configuration.java	2010-02-04 14:35:48 UTC (rev 1450)
@@ -45,6 +45,8 @@
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
+import static java.util.concurrent.TimeUnit.MINUTES;
+
 /**
  * Encapsulates the configuration of a Cache.
  * 
@@ -1467,10 +1469,10 @@
       protected Integer numOwners=2;
 
       /** @configRef desc="Future flag. Currenly unused." */
-      protected Long rehashWait=60000L;
+      protected Long rehashWait = MINUTES.toMillis(1);
 
       /** @configRef desc="Rehashing timeout" */
-      protected Long rehashRpcTimeout=60 * 1000 * 10L;
+      protected Long rehashRpcTimeout = MINUTES.toMillis(10);
 
       /** @configRef desc="If false, no rebalancing or rehashing will take place when a new node joins the cluster or 
        *             a node leaves." **/

Modified: trunk/core/src/main/java/org/infinispan/distribution/JoinTask.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/distribution/JoinTask.java	2010-02-04 14:28:44 UTC (rev 1449)
+++ trunk/core/src/main/java/org/infinispan/distribution/JoinTask.java	2010-02-04 14:35:48 UTC (rev 1450)
@@ -14,6 +14,7 @@
 import org.infinispan.remoting.rpc.RpcManager;
 import org.infinispan.remoting.transport.Address;
 import org.infinispan.util.Util;
+import org.infinispan.util.concurrent.TimeoutException;
 import org.infinispan.util.logging.Log;
 import org.infinispan.util.logging.LogFactory;
 
@@ -79,12 +80,20 @@
          long giveupTime = System.currentTimeMillis() + maxWaitTime;
          do {
             if (log.isTraceEnabled()) log.trace("Requesting old consistent hash from coordinator");
-            List<Response> resp = rpcManager.invokeRemotely(coordinator(),
-                                                            cf.buildRehashControlCommand(JOIN_REQ, self),
+            List<Response> resp;
+            List<Address> addresses;
+            try {
+               resp = rpcManager.invokeRemotely(coordinator(), cf.buildRehashControlCommand(JOIN_REQ, self),
                                                             SYNCHRONOUS, configuration.getRehashRpcTimeout(), true);
-            List<Address> addresses = parseResponses(resp);
+               addresses = parseResponses(resp);
+               if (log.isDebugEnabled()) log.debug("Retrieved old consistent hash address list {0}", addresses);
+            } catch (TimeoutException te) {
+               // timed out waiting for responses; retry!
+               resp = null;
+               addresses = null;
+               if (log.isDebugEnabled()) log.debug("Timed out waiting for responses.");
+            }
 
-            if (log.isDebugEnabled()) log.debug("Retrieved old consistent hash address list {0}", addresses);
             if (addresses == null) {
                long time = rand.nextInt((int) (maxSleepTime - minSleepTime) / 10);
                time = (time * 10) + minSleepTime;



More information about the infinispan-commits mailing list