Browse Source

[ZOOKEEPER-4676] ReadOnlyModeTest doesn't not compile on JDK20 (Thread.suspend has been removed) (#1985)

* checkstyle
Enrico Olivelli 2 năm trước cách đây
mục cha
commit
16227468d6

+ 17 - 0
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);

+ 4 - 2
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");