|
@@ -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);
|