Просмотр исходного кода

ZOOKEEPER-4349: delete the useless oraclePath directory generated by test suit

- when running the `QuorumOracleMajTest` and sub tests of `QuorumBase`(e.g: `MultiOpSessionUpgradeTest`), we generate lots of useless files which are not exempt from `Git`. we should delete them after the finish of one UT.
```
✗ tree zookeeper-server/tmp/
zookeeper-server/tmp/
└── oraclePath
    ├── 0
    │   └── mastership
    │       └── value
    └── 1
        └── mastership
            └── value
```
- fix a typo in the `zookeeperOracleQuorums.md `

Author: maoling <maoling@apache.org>

Reviewers: Ching-Chan Lee <leechingchankyo@gmail.com>

Closes #1742 from maoling/ZOOKEEPER-4349
maoling 3 лет назад
Родитель
Сommit
cb89916742

+ 1 - 1
zookeeper-docs/src/main/resources/markdown/zookeeperOracleQuorums.md

@@ -23,7 +23,7 @@ in a 2-instance configuration when the other instance is identified as faulty by
 Every instance shall access to a file which contains either 0 or 1 to indicate whether this instance is authorized by the Oracle.
 However, this design can be changed since the fail detector algorithms vary from each other. Therefore, ones can override the method of _askOracle()_ in _QuorumOracleMaj_ to adapt the preferred way of deciphering the message from the Oracle.
 
-## The deployment cotexts
+## The deployment contexts
 The Oracle is designed to increase the availability of a cluster of 2 ZooKeeper instances; thus, the size of the voting member is **2**.
 In other words, the Oracle solves the consensus problem of a possibility of faulty instance in a two-instance ensemble.
 

+ 54 - 43
zookeeper-server/src/test/java/org/apache/zookeeper/test/QuorumBase.java

@@ -49,11 +49,12 @@ public class QuorumBase extends ClientBase {
 
     private static final String LOCALADDR = "127.0.0.1";
 
-    private static final String oraclePath_0 = "./tmp/oraclePath/0/mastership/";
-    private static final String oraclePath_1 = "./tmp/oraclePath/1/mastership/";
-    private static final String oraclePath_2 = "./tmp/oraclePath/0/mastership/";
-    private static final String oraclePath_3 = "./tmp/oraclePath/1/mastership/";
-    private static final String oraclePath_4 = "./tmp/oraclePath/0/mastership/";
+    private File oracleDir;
+    private static final String oraclePath_0 = "/oraclePath/0/mastership/";
+    private static final String oraclePath_1 = "/oraclePath/1/mastership/";
+    private static final String oraclePath_2 = "/oraclePath/0/mastership/";
+    private static final String oraclePath_3 = "/oraclePath/1/mastership/";
+    private static final String oraclePath_4 = "/oraclePath/0/mastership/";
     private static final String mastership = "value";
 
     File s1dir, s2dir, s3dir, s4dir, s5dir;
@@ -137,42 +138,42 @@ public class QuorumBase extends ClientBase {
             LOG.info("Initial fdcount is: {}", osMbean.getOpenFileDescriptorCount());
         }
 
-        if (withOracle) {
-            File directory = new File(oraclePath_0);
-            directory.mkdirs();
-            FileWriter fw = new FileWriter(oraclePath_0 + mastership);
-            fw.write("1");
-            fw.close();
-
-            directory = new File(oraclePath_1);
-            directory.mkdirs();
-            fw = new FileWriter(oraclePath_1 + mastership);
-            fw.write("0");
-            fw.close();
-
-            directory = new File(oraclePath_2);
-            directory.mkdirs();
-            fw = new FileWriter(oraclePath_2 + mastership);
-            fw.write("0");
-            fw.close();
-
-            directory = new File(oraclePath_3);
-            directory.mkdirs();
-            fw = new FileWriter(oraclePath_3 + mastership);
-            fw.write("1");
-            fw.close();
-
-            directory = new File(oraclePath_4);
-            directory.mkdirs();
-            fw = new FileWriter(oraclePath_4 + mastership);
-            fw.write("0");
-            fw.close();
-        }
-
-
         LOG.info("Setup finished");
     }
 
+    private void createOraclePath() throws IOException {
+        oracleDir = ClientBase.createTmpDir();
+        File directory = new File(oracleDir, oraclePath_0);
+        directory.mkdirs();
+        FileWriter fw = new FileWriter(oracleDir.getAbsolutePath() + oraclePath_0 + mastership);
+        fw.write("1");
+        fw.close();
+
+        directory = new File(oracleDir, oraclePath_1);
+        directory.mkdirs();
+        fw = new FileWriter(oracleDir.getAbsolutePath() + oraclePath_1 + mastership);
+        fw.write("0");
+        fw.close();
+
+        directory = new File(oracleDir, oraclePath_2);
+        directory.mkdirs();
+        fw = new FileWriter(oracleDir.getAbsolutePath() + oraclePath_2 + mastership);
+        fw.write("0");
+        fw.close();
+
+        directory = new File(oracleDir, oraclePath_3);
+        directory.mkdirs();
+        fw = new FileWriter(oracleDir.getAbsolutePath() + oraclePath_3 + mastership);
+        fw.write("1");
+        fw.close();
+
+        directory = new File(oracleDir, oraclePath_4);
+        directory.mkdirs();
+        fw = new FileWriter(oracleDir.getAbsolutePath()  + oraclePath_4 + mastership);
+        fw.write("0");
+        fw.close();
+    }
+
     void startServers() throws Exception {
         startServers(false, true);
     }
@@ -211,20 +212,27 @@ public class QuorumBase extends ClientBase {
             s5 = new QuorumPeer(peers, s5dir, s5dir, portClient5, 3, 5, tickTime, initLimit, syncLimit, connectToLearnerMasterLimit);
             assertEquals(portClient5, s5.getClientPort());
         } else {
+            createOraclePath();
+
             LOG.info("creating QuorumPeer 1 port {}", portClient1);
-            s1 = new QuorumPeer(peers, s1dir, s1dir, portClient1, 3, 1, tickTime, initLimit, syncLimit, connectToLearnerMasterLimit, oraclePath_0 + mastership);
+            s1 = new QuorumPeer(peers, s1dir, s1dir, portClient1, 3, 1, tickTime, initLimit, syncLimit, connectToLearnerMasterLimit, oracleDir
+                    .getAbsolutePath()  + oraclePath_0 + mastership);
             assertEquals(portClient1, s1.getClientPort());
             LOG.info("creating QuorumPeer 2 port {}", portClient2);
-            s2 = new QuorumPeer(peers, s2dir, s2dir, portClient2, 3, 2, tickTime, initLimit, syncLimit, connectToLearnerMasterLimit, oraclePath_1 + mastership);
+            s2 = new QuorumPeer(peers, s2dir, s2dir, portClient2, 3, 2, tickTime, initLimit, syncLimit, connectToLearnerMasterLimit, oracleDir
+                    .getAbsolutePath()  + oraclePath_1 + mastership);
             assertEquals(portClient2, s2.getClientPort());
             LOG.info("creating QuorumPeer 3 port {}", portClient3);
-            s3 = new QuorumPeer(peers, s3dir, s3dir, portClient3, 3, 3, tickTime, initLimit, syncLimit, connectToLearnerMasterLimit, oraclePath_2 + mastership);
+            s3 = new QuorumPeer(peers, s3dir, s3dir, portClient3, 3, 3, tickTime, initLimit, syncLimit, connectToLearnerMasterLimit, oracleDir
+                    .getAbsolutePath()  + oraclePath_2 + mastership);
             assertEquals(portClient3, s3.getClientPort());
             LOG.info("creating QuorumPeer 4 port {}", portClient4);
-            s4 = new QuorumPeer(peers, s4dir, s4dir, portClient4, 3, 4, tickTime, initLimit, syncLimit, connectToLearnerMasterLimit, oraclePath_3 + mastership);
+            s4 = new QuorumPeer(peers, s4dir, s4dir, portClient4, 3, 4, tickTime, initLimit, syncLimit, connectToLearnerMasterLimit, oracleDir
+                    .getAbsolutePath()  + oraclePath_3 + mastership);
             assertEquals(portClient4, s4.getClientPort());
             LOG.info("creating QuorumPeer 5 port {}", portClient5);
-            s5 = new QuorumPeer(peers, s5dir, s5dir, portClient5, 3, 5, tickTime, initLimit, syncLimit, connectToLearnerMasterLimit, oraclePath_4 + mastership);
+            s5 = new QuorumPeer(peers, s5dir, s5dir, portClient5, 3, 5, tickTime, initLimit, syncLimit, connectToLearnerMasterLimit, oracleDir
+                    .getAbsolutePath()  + oraclePath_4 + mastership);
             assertEquals(portClient5, s5.getClientPort());
         }
 
@@ -451,6 +459,9 @@ public class QuorumBase extends ClientBase {
     @Override
     public void tearDown() throws Exception {
         LOG.info("TearDown started");
+        if (oracleDir != null) {
+            ClientBase.recursiveDelete(oracleDir);
+        }
 
         OSMXBean osMbean = new OSMXBean();
         if (osMbean.getUnix()) {

+ 21 - 11
zookeeper-server/src/test/java/org/apache/zookeeper/test/QuorumBaseOracle_2Nodes.java

@@ -47,8 +47,9 @@ public class QuorumBaseOracle_2Nodes extends ClientBase{
 
     private static final String LOCALADDR = "127.0.0.1";
 
-    private static final String oraclePath_0 = "./tmp/oraclePath/0/mastership/";
-    private static final String oraclePath_1 = "./tmp/oraclePath/1/mastership/";
+    private File oracleDir;
+    private static String oraclePath_0 = "/oraclePath/0/mastership/";
+    private static String oraclePath_1 = "/oraclePath/1/mastership/";
 
     private static final String mastership = "value";
 
@@ -96,6 +97,8 @@ public class QuorumBaseOracle_2Nodes extends ClientBase{
         s1dir = ClientBase.createTmpDir();
         s2dir = ClientBase.createTmpDir();
 
+        createOraclePath();
+
         startServers();
 
         OSMXBean osMbean = new OSMXBean();
@@ -103,20 +106,22 @@ public class QuorumBaseOracle_2Nodes extends ClientBase{
             LOG.info("Initial fdcount is: {}", osMbean.getOpenFileDescriptorCount());
         }
 
-        File directory = new File(oraclePath_0);
+        LOG.info("Setup finished");
+    }
+
+    private void createOraclePath() throws IOException {
+        oracleDir = ClientBase.createTmpDir();
+        File directory = new File(oracleDir, oraclePath_0);
         directory.mkdirs();
-        FileWriter fw = new FileWriter(oraclePath_0 + mastership);
+        FileWriter fw = new FileWriter(oracleDir.getAbsolutePath() + oraclePath_0 + mastership);
         fw.write("0");
         fw.close();
 
-        directory = new File(oraclePath_1);
+        directory = new File(oracleDir, oraclePath_1);
         directory.mkdirs();
-        fw = new FileWriter(oraclePath_1 + mastership);
+        fw = new FileWriter(oracleDir.getAbsolutePath() + oraclePath_1 + mastership);
         fw.write("1");
         fw.close();
-
-
-        LOG.info("Setup finished");
     }
 
     void startServers() throws Exception {
@@ -129,10 +134,12 @@ public class QuorumBaseOracle_2Nodes extends ClientBase{
         peers.put(Long.valueOf(2), new QuorumPeer.QuorumServer(2, new InetSocketAddress(LOCALADDR, port2), new InetSocketAddress(LOCALADDR, portLE2), new InetSocketAddress(LOCALADDR, portClient2), QuorumPeer.LearnerType.PARTICIPANT));
 
         LOG.info("creating QuorumPeer 1 port {}", portClient1);
-        s1 = new QuorumPeer(peers, s1dir, s1dir, portClient1, 3, 1, tickTime, initLimit, syncLimit, connectToLearnerMasterLimit, oraclePath_0 + mastership);
+        s1 = new QuorumPeer(peers, s1dir, s1dir, portClient1, 3, 1, tickTime, initLimit, syncLimit, connectToLearnerMasterLimit, oracleDir
+                .getAbsolutePath() + oraclePath_0 + mastership);
         assertEquals(portClient1, s1.getClientPort());
         LOG.info("creating QuorumPeer 2 port {}", portClient2);
-        s2 = new QuorumPeer(peers, s2dir, s2dir, portClient2, 3, 2, tickTime, initLimit, syncLimit, connectToLearnerMasterLimit, oraclePath_1 + mastership);
+        s2 = new QuorumPeer(peers, s2dir, s2dir, portClient2, 3, 2, tickTime, initLimit, syncLimit, connectToLearnerMasterLimit, oracleDir
+                .getAbsolutePath() + oraclePath_1 + mastership);
         assertEquals(portClient2, s2.getClientPort());
 
 
@@ -286,6 +293,9 @@ public class QuorumBaseOracle_2Nodes extends ClientBase{
     @Override
     public void tearDown() throws Exception {
         LOG.info("TearDown started");
+        if (oracleDir != null) {
+            ClientBase.recursiveDelete(oracleDir);
+        }
 
         OSMXBean osMbean = new OSMXBean();
         if (osMbean.getUnix()) {

+ 1 - 0
zookeeper-server/src/test/java/org/apache/zookeeper/test/QuorumOracleMajTest.java

@@ -56,6 +56,7 @@ public class QuorumOracleMajTest extends QuorumBaseOracle_2Nodes {
             assertTrue(electionTimeTaken >= 0, "Wrong electionTimeTaken value!");
         }
 
+        tearDown();
         //setup servers 1-2 to be followers
         // id=1, oracle is false; id=2, oracle is true
         setUp();