[infinispan-commits] Infinispan SVN: r879 - trunk/core/src/main/java/org/infinispan/distribution.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Tue Sep 29 06:23:10 EDT 2009


Author: manik.surtani at jboss.com
Date: 2009-09-29 06:23:10 -0400 (Tue, 29 Sep 2009)
New Revision: 879

Modified:
   trunk/core/src/main/java/org/infinispan/distribution/DistributionManagerImpl.java
Log:
Removed potential infinite loop

Modified: trunk/core/src/main/java/org/infinispan/distribution/DistributionManagerImpl.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/distribution/DistributionManagerImpl.java	2009-09-29 10:01:38 UTC (rev 878)
+++ trunk/core/src/main/java/org/infinispan/distribution/DistributionManagerImpl.java	2009-09-29 10:23:10 UTC (rev 879)
@@ -44,6 +44,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
 import java.util.concurrent.LinkedBlockingQueue;
@@ -51,7 +52,6 @@
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
-import java.util.concurrent.locks.LockSupport;
 
 /**
  * The default distribution manager implementation
@@ -92,11 +92,11 @@
    private DataContainer dataContainer;
    private InterceptorChain interceptorChain;
    private InvocationContextContainer icc;
-   private volatile boolean joinTaskSubmitted = false;
    @ManagedAttribute(description = "If true, the node has successfully joined the grid and is considered to hold state.  If false, the join process is still in progress.")
    volatile boolean joinComplete = false;
    final List<Address> leavers = new CopyOnWriteArrayList<Address>();
    volatile Future<Void> leaveTaskFuture;
+   final CountDownLatch startLatch = new CountDownLatch(1);
 
    @Inject
    public void init(Configuration configuration, RpcManager rpcManager, CacheManagerNotifier notifier, CommandsFactory cf,
@@ -126,7 +126,7 @@
       } else {
          joinComplete = true;
       }
-      joinTaskSubmitted = true;
+      startLatch.countDown();
    }
 
    @Stop(priority = 20)
@@ -315,8 +315,15 @@
    public class ViewChangeListener {
       @ViewChanged
       public void handleViewChange(ViewChangedEvent e) {
-         while (!joinTaskSubmitted) LockSupport.parkNanos(100 * 1000000);
-         rehash(e.getNewMembers(), e.getOldMembers());
+         boolean started = false;
+         // how long do we wait for a startup?
+         try {
+            started = startLatch.await(2, TimeUnit.MINUTES);
+            if (started) rehash(e.getNewMembers(), e.getOldMembers());
+            else log.warn("DistributionManager not started after waiting up to 2 minutes!  Not rehashing!");
+         } catch (InterruptedException ie) {
+            log.warn("View change interrupted; not rehashing!");
+         }
       }
    }
 



More information about the infinispan-commits mailing list