This is an automated email from the ASF dual-hosted git repository.
tison pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zookeeper.git
The following commit(s) were added to refs/heads/master by this push:
new dc99bd75f ZOOKEEPER-2623: [ADDENDUM] Fix flaky CheckTest::testCluster
(#2067)
dc99bd75f is described below
commit dc99bd75fe495c9ef2718fb1a10e175a23fb38d4
Author: Kezhu Wang <[email protected]>
AuthorDate: Tue Oct 17 13:06:10 2023 +0800
ZOOKEEPER-2623: [ADDENDUM] Fix flaky CheckTest::testCluster (#2067)
---
.../java/org/apache/zookeeper/test/CheckTest.java | 54 ++++++++++++++++++----
.../java/org/apache/zookeeper/test/QuorumBase.java | 15 ++++++
2 files changed, 59 insertions(+), 10 deletions(-)
diff --git
a/zookeeper-server/src/test/java/org/apache/zookeeper/test/CheckTest.java
b/zookeeper-server/src/test/java/org/apache/zookeeper/test/CheckTest.java
index 4b7e33204..e81313273 100644
--- a/zookeeper-server/src/test/java/org/apache/zookeeper/test/CheckTest.java
+++ b/zookeeper-server/src/test/java/org/apache/zookeeper/test/CheckTest.java
@@ -19,13 +19,17 @@
package org.apache.zookeeper.test;
import static org.junit.jupiter.api.Assertions.assertThrows;
+import java.io.File;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.TestableZooKeeper;
import org.apache.zookeeper.ZooDefs;
+import org.apache.zookeeper.client.ZKClientConfig;
import org.apache.zookeeper.data.Stat;
import org.apache.zookeeper.proto.CheckVersionRequest;
import org.apache.zookeeper.proto.ReplyHeader;
import org.apache.zookeeper.proto.RequestHeader;
+import org.apache.zookeeper.server.ZKDatabase;
+import org.apache.zookeeper.server.persistence.FileTxnSnapLog;
import org.apache.zookeeper.server.quorum.QuorumPeer;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
@@ -36,6 +40,7 @@ public class CheckTest extends ClientBase {
@BeforeEach
public void setUp(TestInfo testInfo) throws Exception {
+ System.setProperty(ZKClientConfig.ZOOKEEPER_REQUEST_TIMEOUT, "2000");
if (testInfo.getDisplayName().contains("Cluster")) {
return;
}
@@ -44,6 +49,7 @@ public class CheckTest extends ClientBase {
@AfterEach
public void tearDown(TestInfo testInfo) throws Exception {
+ System.clearProperty(ZKClientConfig.ZOOKEEPER_REQUEST_TIMEOUT);
if (testInfo.getDisplayName().contains("Cluster")) {
return;
}
@@ -83,11 +89,18 @@ public class CheckTest extends ClientBase {
@Test
public void testStandalone() throws Exception {
- TestableZooKeeper zk = createClient();
- testOperations(zk);
+ testOperations(createClient());
+ }
+
+ @Test
+ public void testStandaloneDatabaseReloadAfterCheck() throws Exception {
+ try {
+ testOperations(createClient());
+ } catch (Exception ignored) {
+ // Ignore to test database reload after check
+ }
stopServer();
startServer();
- createClient();
}
@Test
@@ -98,13 +111,34 @@ public class CheckTest extends ClientBase {
testOperations(qb.createClient(new CountdownWatcher(),
QuorumPeer.ServerState.OBSERVING));
testOperations(qb.createClient(new CountdownWatcher(),
QuorumPeer.ServerState.FOLLOWING));
testOperations(qb.createClient(new CountdownWatcher(),
QuorumPeer.ServerState.LEADING));
- int leaderIndex = qb.getLeaderIndex();
- int leaderPort = qb.getLeaderClientPort();
- qb.shutdown(qb.getLeaderQuorumPeer());
- qb.setupServer(leaderIndex + 1);
- QuorumPeer quorumPeer = qb.getPeerList().get(leaderIndex);
- quorumPeer.start();
- qb.createClient("localhost:" + leaderPort, 2 * CONNECTION_TIMEOUT);
+ } finally {
+ try {
+ qb.tearDown();
+ } catch (Exception ignored) {}
+ }
+ }
+
+ @Test
+ public void testClusterDatabaseReloadAfterCheck() throws Exception {
+ QuorumBase qb = new QuorumBase();
+ try {
+ qb.setUp(true, true);
+
+ // Get leader before possible damaging operations to
+ // reduce chance of leader migration and log truncation.
+ File dataDir = qb.getLeaderDataDir();
+ QuorumPeer leader = qb.getLeaderQuorumPeer();
+
+ try {
+ testOperations(qb.createClient(new CountdownWatcher(),
QuorumPeer.ServerState.LEADING));
+ } catch (Exception ignored) {
+ // Ignore to test database reload after check
+ }
+ qb.shutdown(leader);
+
+ FileTxnSnapLog txnSnapLog = new FileTxnSnapLog(dataDir, dataDir);
+ ZKDatabase database = new ZKDatabase(txnSnapLog);
+ database.loadDataBase();
} finally {
try {
qb.tearDown();
diff --git
a/zookeeper-server/src/test/java/org/apache/zookeeper/test/QuorumBase.java
b/zookeeper-server/src/test/java/org/apache/zookeeper/test/QuorumBase.java
index 42740f897..46f14d749 100644
--- a/zookeeper-server/src/test/java/org/apache/zookeeper/test/QuorumBase.java
+++ b/zookeeper-server/src/test/java/org/apache/zookeeper/test/QuorumBase.java
@@ -342,6 +342,21 @@ public class QuorumBase extends ClientBase {
return null;
}
+ public File getLeaderDataDir() {
+ if (s1.getPeerState() == ServerState.LEADING) {
+ return s1dir;
+ } else if (s2.getPeerState() == ServerState.LEADING) {
+ return s2dir;
+ } else if (s3.getPeerState() == ServerState.LEADING) {
+ return s3dir;
+ } else if (s4.getPeerState() == ServerState.LEADING) {
+ return s4dir;
+ } else if (s5.getPeerState() == ServerState.LEADING) {
+ return s5dir;
+ }
+ return null;
+ }
+
public QuorumPeer getFirstObserver() {
if (s1.getLearnerType() == LearnerType.OBSERVER) {
return s1;