[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