You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by ca...@apache.org on 2018/01/08 01:30:30 UTC

zookeeper git commit: ZOOKEEPER-2960: The dataDir and dataLogDir are used opposingly

Repository: zookeeper
Updated Branches:
  refs/heads/branch-3.4 d53e4ca2d -> fd25ee3d2


ZOOKEEPER-2960: The dataDir and dataLogDir are used opposingly

Previously a small refactoring has swapped the usage of dataDir and dataLogDir when QuorumPeerMain instantiates FileTxnSnapLog class.

This PR fixes it + adds unit test for verification.

Author: Andor Molnar <an...@cloudera.com>

Reviewers: Camille Fournier <ca...@apache.org>, Abraham Fine <af...@apache.org>

Closes #441 from anmolnar/ZOOKEEPER-2960


Project: http://git-wip-us.apache.org/repos/asf/zookeeper/repo
Commit: http://git-wip-us.apache.org/repos/asf/zookeeper/commit/fd25ee3d
Tree: http://git-wip-us.apache.org/repos/asf/zookeeper/tree/fd25ee3d
Diff: http://git-wip-us.apache.org/repos/asf/zookeeper/diff/fd25ee3d

Branch: refs/heads/branch-3.4
Commit: fd25ee3d2fb01c9cd488d00430e3635db2c2be02
Parents: d53e4ca
Author: Andor Molnar <an...@cloudera.com>
Authored: Sun Jan 7 20:30:13 2018 -0500
Committer: Camille Fournier <ca...@apache.org>
Committed: Sun Jan 7 20:30:13 2018 -0500

----------------------------------------------------------------------
 .../zookeeper/server/quorum/QuorumPeerMain.java |  4 +-
 .../server/quorum/QuorumPeerMainTest.java       | 71 +++++++++++++++-----
 2 files changed, 58 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zookeeper/blob/fd25ee3d/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java
----------------------------------------------------------------------
diff --git a/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java b/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java
index da0df52..156c439 100644
--- a/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java
+++ b/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java
@@ -137,8 +137,8 @@ public class QuorumPeerMain {
 
           quorumPeer.setQuorumPeers(config.getServers());
           quorumPeer.setTxnFactory(new FileTxnSnapLog(
-                  new File(config.getDataDir()),
-                  new File(config.getDataLogDir())));
+                  new File(config.getDataLogDir()),
+                  new File(config.getDataDir())));
           quorumPeer.setElectionType(config.getElectionAlg());
           quorumPeer.setMyid(config.getServerId());
           quorumPeer.setTickTime(config.getTickTime());

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/fd25ee3d/src/java/test/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java
----------------------------------------------------------------------
diff --git a/src/java/test/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java b/src/java/test/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java
index 4910917..2431683 100644
--- a/src/java/test/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java
+++ b/src/java/test/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java
@@ -19,6 +19,11 @@
 package org.apache.zookeeper.server.quorum;
 
 import static org.apache.zookeeper.test.ClientBase.CONNECTION_TIMEOUT;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doCallRealMethod;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
@@ -50,6 +55,7 @@ import org.apache.zookeeper.ZooDefs.Ids;
 import org.apache.zookeeper.ZooKeeper.States;
 import org.apache.zookeeper.common.Time;
 import org.apache.zookeeper.common.AtomicFileOutputStream;
+import org.apache.zookeeper.server.persistence.FileTxnSnapLog;
 import org.apache.zookeeper.server.quorum.Leader.Proposal;
 import org.apache.zookeeper.server.util.ZxidUtils;
 import org.apache.zookeeper.test.ClientBase;
@@ -116,7 +122,7 @@ public class QuorumPeerMainTest extends QuorumPeerTestBase {
         waitForOne(zk, States.CONNECTED);
         zk.create("/foo_q1", "foobar1".getBytes(), Ids.OPEN_ACL_UNSAFE,
                 CreateMode.PERSISTENT);
-        Assert.assertEquals(new String(zk.getData("/foo_q1", null, null)), "foobar1");
+        assertEquals(new String(zk.getData("/foo_q1", null, null)), "foobar1");
         zk.close();
 
         zk = new ZooKeeper("127.0.0.1:" + CLIENT_PORT_QP2,
@@ -124,7 +130,7 @@ public class QuorumPeerMainTest extends QuorumPeerTestBase {
         waitForOne(zk, States.CONNECTED);
         zk.create("/foo_q2", "foobar2".getBytes(), Ids.OPEN_ACL_UNSAFE,
                 CreateMode.PERSISTENT);
-        Assert.assertEquals(new String(zk.getData("/foo_q2", null, null)), "foobar2");
+        assertEquals(new String(zk.getData("/foo_q2", null, null)), "foobar2");
         zk.close();
 
         q1.shutdown();
@@ -308,7 +314,7 @@ public class QuorumPeerMainTest extends QuorumPeerTestBase {
         // validate that the old value is there and not the new one
         output = servers.zk[nonleader].getData(path+leader, false, null);
 
-        Assert.assertEquals(
+        assertEquals(
                 "Expecting old value 1 since 2 isn't committed yet",
                 output[0], 1);
 
@@ -324,13 +330,13 @@ public class QuorumPeerMainTest extends QuorumPeerTestBase {
 
         // make sure it doesn't have the new value that it alone had logged
         output = servers.zk[leader].getData(path+leader, false, null);
-        Assert.assertEquals(
+        assertEquals(
                 "Validating that the deposed leader has rolled back that change it had written",
                 output[0], 1);
         
         // make sure the leader has the subsequent changes that were made while it was offline
         output = servers.zk[leader].getData(path+nonleader, false, null);
-        Assert.assertEquals(
+        assertEquals(
                 "Validating that the deposed leader caught up on changes it missed",
                 output[0], 2);
     }
@@ -464,14 +470,14 @@ public class QuorumPeerMainTest extends QuorumPeerTestBase {
   	    return LaunchServers(numServers, null);
     }
 
-		/** * This is a helper function for launching a set of servers
-		 *
-		 * @param numServers* @param tickTime A ticktime to pass to MainThread
-		 * @return
-		 * @throws IOException
-		 * @throws InterruptedException
-		 */
-		private Servers LaunchServers(int numServers, Integer tickTime) throws IOException, InterruptedException {
+    /** * This is a helper function for launching a set of servers
+     *
+     * @param numServers* @param tickTime A ticktime to pass to MainThread
+     * @return
+     * @throws IOException
+     * @throws InterruptedException
+     */
+    private Servers LaunchServers(int numServers, Integer tickTime) throws IOException, InterruptedException {
   	    int SERVER_COUNT = numServers;
   	    Servers svrs = new Servers();
   	    final int clientPorts[] = new int[SERVER_COUNT];
@@ -826,7 +832,7 @@ public class QuorumPeerMainTest extends QuorumPeerTestBase {
         waitForOne(zk, States.CONNECTED);
         zk.create("/foo_q1", "foobar1".getBytes(), Ids.OPEN_ACL_UNSAFE,
                 CreateMode.PERSISTENT);
-        Assert.assertEquals(new String(zk.getData("/foo_q1", null, null)), "foobar1");
+        assertEquals(new String(zk.getData("/foo_q1", null, null)), "foobar1");
         zk.close();
         q1.shutdown();
         q2.shutdown();
@@ -981,7 +987,7 @@ public class QuorumPeerMainTest extends QuorumPeerTestBase {
                 new File(servers.mt[i].dataDir, "version-2"),
                 QuorumPeer.CURRENT_EPOCH_FILENAME);
             LOG.info("Validating current epoch: " + servers.mt[i].dataDir);
-            Assert.assertEquals("Current epoch should be 11.", 11,
+            assertEquals("Current epoch should be 11.", 11,
                                 readLongFromFile(currentEpochFile));
         }
 
@@ -1078,4 +1084,39 @@ public class QuorumPeerMainTest extends QuorumPeerTestBase {
         Assert.assertFalse(follower.mainFailed.await(10, TimeUnit.SECONDS));
         waitForAll(servers.zk, States.CONNECTED);
     }
+
+    @Test
+    public void testDataDirAndDataLogDir() throws Exception {
+        // Arrange
+        QuorumPeerConfig configMock = mock(QuorumPeerConfig.class);
+        when(configMock.getDataDir()).thenReturn("/tmp/zookeeper");
+        when(configMock.getDataLogDir()).thenReturn("/tmp/zookeeperLog");
+
+        QuorumPeer qpMock = mock(QuorumPeer.class);
+
+        doCallRealMethod().when(qpMock).setTxnFactory(any(FileTxnSnapLog.class));
+        when(qpMock.getTxnFactory()).thenCallRealMethod();
+        InjectableQuorumPeerMain qpMain = new InjectableQuorumPeerMain(qpMock);
+
+        // Act
+        qpMain.runFromConfig(configMock);
+
+        // Assert
+        FileTxnSnapLog txnFactory = qpMain.getQuorumPeer().getTxnFactory();
+        assertEquals("/tmp/zookeeperLog/version-2", txnFactory.getDataDir().getAbsolutePath());
+        assertEquals("/tmp/zookeeper/version-2", txnFactory.getSnapDir().getAbsolutePath());
+    }
+
+    private class InjectableQuorumPeerMain extends QuorumPeerMain {
+        QuorumPeer qp;
+
+        InjectableQuorumPeerMain(QuorumPeer qp) {
+            this.qp = qp;
+        }
+
+        @Override
+        protected QuorumPeer getQuorumPeer() {
+            return qp;
+        }
+    }
 }