summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEnrico Olivelli <eolivelli@apache.org>2023-03-08 14:07:17 +0100
committerGitHub <noreply@github.com>2023-03-08 14:07:17 +0100
commit16227468d64dd7e1744517a2e587099d5501c0c1 (patch)
treed58224a9e5a40176eb651521278e2f855780fbbd
parent14b936201b719ab5cf6346d1ed7dfc4ff382cbb7 (diff)
downloadzookeeper-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.java17
-rw-r--r--zookeeper-server/src/test/java/org/apache/zookeeper/test/ReadOnlyModeTest.java6
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");