diff options
author | Enrico Olivelli <eolivelli@apache.org> | 2023-03-08 14:07:17 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-08 14:07:17 +0100 |
commit | 16227468d64dd7e1744517a2e587099d5501c0c1 (patch) | |
tree | d58224a9e5a40176eb651521278e2f855780fbbd | |
parent | 14b936201b719ab5cf6346d1ed7dfc4ff382cbb7 (diff) | |
download | zookeeper-16227468d64dd7e1744517a2e587099d5501c0c1.tar.gz |
[ZOOKEEPER-4676] ReadOnlyModeTest doesn't not compile on JDK20 (Thread.suspend has been removed) (#1985)
* checkstyle
-rw-r--r-- | zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java | 17 | ||||
-rw-r--r-- | zookeeper-server/src/test/java/org/apache/zookeeper/test/ReadOnlyModeTest.java | 6 |
2 files changed, 21 insertions, 2 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); diff --git a/zookeeper-server/src/test/java/org/apache/zookeeper/test/ReadOnlyModeTest.java b/zookeeper-server/src/test/java/org/apache/zookeeper/test/ReadOnlyModeTest.java index c8f4ac42c..49f871c1c 100644 --- a/zookeeper-server/src/test/java/org/apache/zookeeper/test/ReadOnlyModeTest.java +++ b/zookeeper-server/src/test/java/org/apache/zookeeper/test/ReadOnlyModeTest.java @@ -300,7 +300,8 @@ public class ReadOnlyModeTest extends ZKTestCase { watcher.waitForConnected(CONNECTION_TIMEOUT); // if we don't suspend a peer it will rejoin a quorum - qu.getPeer(1).peer.suspend(); + qu.getPeer(1).peer + .setSuspended(true); // start two servers to form a quorum; client should detect this and // connect to one of them @@ -312,7 +313,8 @@ public class ReadOnlyModeTest extends ZKTestCase { zk.create("/test", "test".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); // resume poor fellow - qu.getPeer(1).peer.resume(); + qu.getPeer(1).peer + .setSuspended(false); String log = os.toString(); assertFalse(StringUtils.isEmpty(log), "OutputStream doesn't have any log messages"); |