diff options
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.java | 17 |
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); |