summaryrefslogtreecommitdiff
path: root/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java
diff options
context:
space:
mode:
Diffstat (limited to 'zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java')
-rw-r--r--zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java17
1 files changed, 17 insertions, 0 deletions
diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java
index f5931fb97..6fc3ee200 100644
--- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java
+++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java
@@ -43,6 +43,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;
@@ -144,6 +145,8 @@ public class QuorumPeer extends ZooKeeperThread implements QuorumStats.Provider
private JvmPauseMonitor jvmPauseMonitor;
+ private final AtomicBoolean suspended = new AtomicBoolean(false);
+
public static final class AddressTuple {
public final MultipleAddresses quorumAddr;
@@ -1408,6 +1411,19 @@ public class QuorumPeer extends ZooKeeperThread implements QuorumStats.Provider
boolean shuttingDownLE = false;
+ public void setSuspended(boolean suspended) {
+ this.suspended.set(suspended);
+ }
+ private void checkSuspended() {
+ try {
+ while (suspended.get()) {
+ Thread.sleep(10);
+ }
+ } catch (InterruptedException err) {
+ Thread.currentThread().interrupt();
+ }
+ }
+
@Override
public void run() {
updateThreadName();
@@ -1490,6 +1506,7 @@ public class QuorumPeer extends ZooKeeperThread implements QuorumStats.Provider
startLeaderElection();
}
setCurrentVote(makeLEStrategy().lookForLeader());
+ checkSuspended();
} catch (Exception e) {
LOG.warn("Unexpected exception", e);
setPeerState(ServerState.LOOKING);