Author: rgs
Date: Mon Jul 13 04:03:00 2015
New Revision: 1690565

URL: http://svn.apache.org/r1690565
Log:
ZOOKEEPER-1423: 4lw and jmx should expose the size of the datadir/datalogdir
(Edward Ribeiro via rgs)

Added:
    
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/command/DirsCommand.java
Modified:
    zookeeper/branches/branch-3.5/CHANGES.txt
    
zookeeper/branches/branch-3.5/src/docs/src/documentation/content/xdocs/zookeeperAdmin.xml
    
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ServerStats.java
    
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java
    
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java
    
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMXBean.java
    
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/admin/Commands.java
    
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/command/CommandExecutor.java
    
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/command/FourLetterCommands.java
    
zookeeper/branches/branch-3.5/src/java/test/org/apache/zookeeper/test/FourLetterWordsQuorumTest.java
    
zookeeper/branches/branch-3.5/src/java/test/org/apache/zookeeper/test/FourLetterWordsTest.java

Modified: zookeeper/branches/branch-3.5/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/zookeeper/branches/branch-3.5/CHANGES.txt?rev=1690565&r1=1690564&r2=1690565&view=diff
==============================================================================
--- zookeeper/branches/branch-3.5/CHANGES.txt (original)
+++ zookeeper/branches/branch-3.5/CHANGES.txt Mon Jul 13 04:03:00 2015
@@ -219,6 +219,9 @@ IMPROVEMENTS:
   ZOOKEEPER-2140: NettyServerCnxn and NIOServerCnxn code should be improved
   (Arshad Mohammad via rgs)
 
+  ZOOKEEPER-1423: 4lw and jmx should expose the size of the datadir/datalogdir
+  (Edward Ribeiro via rgs)
+
 Release 3.5.0 - 8/4/2014
 
 NEW FEATURES:

Modified: 
zookeeper/branches/branch-3.5/src/docs/src/documentation/content/xdocs/zookeeperAdmin.xml
URL: 
http://svn.apache.org/viewvc/zookeeper/branches/branch-3.5/src/docs/src/documentation/content/xdocs/zookeeperAdmin.xml?rev=1690565&r1=1690564&r2=1690565&view=diff
==============================================================================
--- 
zookeeper/branches/branch-3.5/src/docs/src/documentation/content/xdocs/zookeeperAdmin.xml
 (original)
+++ 
zookeeper/branches/branch-3.5/src/docs/src/documentation/content/xdocs/zookeeperAdmin.xml
 Mon Jul 13 04:03:00 2015
@@ -1639,6 +1639,16 @@ server.3=zoo3:2888:3888</programlisting>
           </varlistentry>
 
           <varlistentry>
+            <term>dirs</term>
+
+            <listitem>
+              <para><emphasis role="bold">New in 3.5.1:</emphasis>
+                Shows the total size of snapshot and log files in bytes
+              </para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
             <term>wchp</term>
 
             <listitem>

Modified: 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ServerStats.java
URL: 
http://svn.apache.org/viewvc/zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ServerStats.java?rev=1690565&r1=1690564&r2=1690565&view=diff
==============================================================================
--- 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ServerStats.java
 (original)
+++ 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ServerStats.java
 Mon Jul 13 04:03:00 2015
@@ -40,6 +40,8 @@ public class ServerStats {
         public long getLastProcessedZxid();
         public String getState();
         public int getNumAliveConnections();
+        public long getDataDirSize();
+        public long getLogDirSize();
     }
     
     public ServerStats(Provider provider) {
@@ -69,6 +71,14 @@ public class ServerStats {
     public long getLastProcessedZxid(){
         return provider.getLastProcessedZxid();
     }
+
+    public long getDataDirSize() {
+        return provider.getDataDirSize();
+    }
+
+    public long getLogDirSize() {
+        return provider.getLogDirSize();
+    }
     
     synchronized public long getPacketsReceived() {
         return packetsReceived;

Modified: 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java
URL: 
http://svn.apache.org/viewvc/zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java?rev=1690565&r1=1690564&r2=1690565&view=diff
==============================================================================
--- 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java
 (original)
+++ 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java
 Mon Jul 13 04:03:00 2015
@@ -164,7 +164,6 @@ public class ZooKeeperServer implements
      * creates a zookeeperserver instance.
      * @param txnLogFactory the file transaction snapshot logging class
      * @param tickTime the ticktime for the server
-     * @param treeBuilder the datatree builder
      * @throws IOException
      */
     public ZooKeeperServer(FileTxnSnapLog txnLogFactory, int tickTime) throws 
IOException {
@@ -181,9 +180,13 @@ public class ZooKeeperServer implements
         pwriter.print("secureClientPort=");
         pwriter.println(getSecureClientPort());
         pwriter.print("dataDir=");
-        pwriter.println(zkDb.snapLog.getSnapDir().getAbsolutePath());
-        pwriter.print("dataLogDir=");
         pwriter.println(zkDb.snapLog.getDataDir().getAbsolutePath());
+        pwriter.print("dataDirSize=");
+        pwriter.println(getDataDirSize());
+        pwriter.print("dataLogDir=");
+        pwriter.println(zkDb.snapLog.getSnapDir().getAbsolutePath());
+        pwriter.print("dataLogSize=");
+        pwriter.println(getLogDirSize());
         pwriter.print("tickTime=");
         pwriter.println(getTickTime());
         pwriter.print("maxClientCnxns=");
@@ -304,6 +307,36 @@ public class ZooKeeperServer implements
         }
     }
 
+    @Override
+    public long getDataDirSize() {
+        if (zkDb == null) {
+            return 0L;
+        }
+        File path = zkDb.snapLog.getDataDir();
+        return getDirSize(path);
+    }
+
+    @Override
+    public long getLogDirSize() {
+        if (zkDb == null) {
+            return 0L;
+        }
+        File path = zkDb.snapLog.getSnapDir();
+        return getDirSize(path);
+    }
+
+    private long getDirSize(File file) {
+        long size = 0L;
+        if (file.isDirectory()) {
+            for (File f: file.listFiles()) {
+                size += getDirSize(f);
+            }
+        } else {
+            size = file.length();
+        }
+        return size;
+    }
+
     public long getZxid() {
         return hzxid.get();
     }
@@ -591,9 +624,9 @@ public class ZooKeeperServer implements
             int sessionTimeout) throws IOException {
         boolean rc = sessionTracker.touchSession(sessionId, sessionTimeout);
         if (LOG.isTraceEnabled()) {
-            ZooTrace.logTraceMessage(LOG,ZooTrace.SESSION_TRACE_MASK,
-                                     "Session 0x" + 
Long.toHexString(sessionId) +
-                    " is valid: " + rc);
+            ZooTrace.logTraceMessage(LOG, ZooTrace.SESSION_TRACE_MASK,
+                    "Session 0x" + Long.toHexString(sessionId) +
+                            " is valid: " + rc);
         }
         finishSessionInit(cnxn, rc);
     }

Modified: 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java
URL: 
http://svn.apache.org/viewvc/zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java?rev=1690565&r1=1690564&r2=1690565&view=diff
==============================================================================
--- 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java
 (original)
+++ 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java
 Mon Jul 13 04:03:00 2015
@@ -118,6 +118,13 @@ public class ZooKeeperServerBean impleme
         zks.setMaxSessionTimeout(max);
     }
 
+    public long getDataDirSize() {
+        return zks.getDataDirSize();
+    }
+
+    public long getLogDirSize() {
+        return zks.getLogDirSize();
+    }
     
     public long getPacketsReceived() {
         return zks.serverStats().getPacketsReceived();

Modified: 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMXBean.java
URL: 
http://svn.apache.org/viewvc/zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMXBean.java?rev=1690565&r1=1690564&r2=1690565&view=diff
==============================================================================
--- 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMXBean.java
 (original)
+++ 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMXBean.java
 Mon Jul 13 04:03:00 2015
@@ -107,4 +107,13 @@ public interface ZooKeeperServerMXBean {
      * @return number of alive client connections
      */
     public long getNumAliveConnections();
+
+    /**
+     * @return estimated size of data directory in bytes
+    */
+    public long getDataDirSize();
+    /**
+     * @return estimated size of log directory in bytes
+     */
+    public long getLogDirSize();
 }

Modified: 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/admin/Commands.java
URL: 
http://svn.apache.org/viewvc/zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/admin/Commands.java?rev=1690565&r1=1690564&r2=1690565&view=diff
==============================================================================
--- 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/admin/Commands.java
 (original)
+++ 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/admin/Commands.java
 Mon Jul 13 04:03:00 2015
@@ -111,6 +111,7 @@ public class Commands {
         registerCommand(new CnxnStatResetCommand());
         registerCommand(new ConfCommand());
         registerCommand(new ConsCommand());
+        registerCommand(new DirsCommand());
         registerCommand(new DumpCommand());
         registerCommand(new EnvCommand());
         registerCommand(new GetTraceMaskCommand());
@@ -177,6 +178,23 @@ public class Commands {
             return response;
         }
     }
+
+    /**
+     * Information on ZK datadir and snapdir size in bytes
+     */
+    public static class DirsCommand extends CommandBase {
+        public DirsCommand() {
+            super(Arrays.asList("dirs"));
+        }
+
+        @Override
+        public CommandResponse run(ZooKeeperServer zkServer, Map<String, 
String> kwargs) {
+            CommandResponse response = initializeResponse();
+            response.put("datadir_size", zkServer.getDataDirSize());
+            response.put("logdir_size", zkServer.getLogDirSize());
+            return response;
+        }
+    }
 
     /**
      * Information on session expirations and ephemerals. Returned map 
contains:

Modified: 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/command/CommandExecutor.java
URL: 
http://svn.apache.org/viewvc/zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/command/CommandExecutor.java?rev=1690565&r1=1690564&r2=1690565&view=diff
==============================================================================
--- 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/command/CommandExecutor.java
 (original)
+++ 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/command/CommandExecutor.java
 Mon Jul 13 04:03:00 2015
@@ -57,6 +57,8 @@ public class CommandExecutor {
             command = new StatResetCommand(pwriter, serverCnxn);
         } else if (commandCode == FourLetterCommands.crstCmd) {
             command = new CnxnStatResetCommand(pwriter, serverCnxn);
+        } else if (commandCode == FourLetterCommands.dirsCmd) {
+            command = new DirsCommand(pwriter, serverCnxn);
         } else if (commandCode == FourLetterCommands.dumpCmd) {
             command = new DumpCommand(pwriter, serverCnxn);
         } else if (commandCode == FourLetterCommands.statCmd

Added: 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/command/DirsCommand.java
URL: 
http://svn.apache.org/viewvc/zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/command/DirsCommand.java?rev=1690565&view=auto
==============================================================================
--- 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/command/DirsCommand.java
 (added)
+++ 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/command/DirsCommand.java
 Mon Jul 13 04:03:00 2015
@@ -0,0 +1,41 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.zookeeper.server.command;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import org.apache.zookeeper.server.ServerCnxn;
+
+public class DirsCommand extends AbstractFourLetterCommand {
+
+    public DirsCommand(PrintWriter pw, ServerCnxn serverCnxn) {
+        super(pw, serverCnxn);
+    }
+
+    @Override
+    public void commandRun() throws IOException {
+        if (zkServer == null) {
+            pw.println(ZK_NOT_SERVING);
+            return;
+        }
+        pw.println("datadir_size: " + zkServer.getDataDirSize());
+        pw.println("logdir_size: " + zkServer.getLogDirSize());
+    }
+}

Modified: 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/command/FourLetterCommands.java
URL: 
http://svn.apache.org/viewvc/zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/command/FourLetterCommands.java?rev=1690565&r1=1690564&r2=1690565&view=diff
==============================================================================
--- 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/command/FourLetterCommands.java
 (original)
+++ 
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/command/FourLetterCommands.java
 Mon Jul 13 04:03:00 2015
@@ -50,6 +50,13 @@ public class FourLetterCommands {
      * See <a 
href="{@docRoot}/../../../docs/zookeeperAdmin.html#sc_zkCommands">
      * Zk Admin</a>. this link is for all the commands.
      */
+    public final static int dirsCmd =
+        ByteBuffer.wrap("dirs".getBytes()).getInt();
+
+    /*
+     * See <a 
href="{@docRoot}/../../../docs/zookeeperAdmin.html#sc_zkCommands">
+     * Zk Admin</a>. this link is for all the commands.
+     */
     public final static int dumpCmd =
         ByteBuffer.wrap("dump".getBytes()).getInt();
 
@@ -152,6 +159,7 @@ public class FourLetterCommands {
         cmd2String.put(confCmd, "conf");
         cmd2String.put(consCmd, "cons");
         cmd2String.put(crstCmd, "crst");
+        cmd2String.put(dirsCmd, "dirs");
         cmd2String.put(dumpCmd, "dump");
         cmd2String.put(enviCmd, "envi");
         cmd2String.put(getTraceMaskCmd, "gtmk");

Modified: 
zookeeper/branches/branch-3.5/src/java/test/org/apache/zookeeper/test/FourLetterWordsQuorumTest.java
URL: 
http://svn.apache.org/viewvc/zookeeper/branches/branch-3.5/src/java/test/org/apache/zookeeper/test/FourLetterWordsQuorumTest.java?rev=1690565&r1=1690564&r2=1690565&view=diff
==============================================================================
--- 
zookeeper/branches/branch-3.5/src/java/test/org/apache/zookeeper/test/FourLetterWordsQuorumTest.java
 (original)
+++ 
zookeeper/branches/branch-3.5/src/java/test/org/apache/zookeeper/test/FourLetterWordsQuorumTest.java
 Mon Jul 13 04:03:00 2015
@@ -64,6 +64,7 @@ public class FourLetterWordsQuorumTest e
             verify(hp, "srvr", "Outstanding");
             verify(hp, "cons", sid);
             verify(hp, "dump", sid);
+            verify(hp, "dirs", "size");
 
             zk.getData("/", true, null);
 
@@ -74,6 +75,7 @@ public class FourLetterWordsQuorumTest e
             verify(hp, "wchs", "watching 1");
             verify(hp, "wchp", sid);
             verify(hp, "wchc", sid);
+            verify(hp, "dirs", "size");
 
             zk.close();
 
@@ -87,6 +89,7 @@ public class FourLetterWordsQuorumTest e
             verify(hp, "wchs", "watch");
             verify(hp, "wchp", "");
             verify(hp, "wchc", "");
+            verify(hp, "dirs", "size");
 
             verify(hp, "srst", "reset");
             verify(hp, "crst", "reset");

Modified: 
zookeeper/branches/branch-3.5/src/java/test/org/apache/zookeeper/test/FourLetterWordsTest.java
URL: 
http://svn.apache.org/viewvc/zookeeper/branches/branch-3.5/src/java/test/org/apache/zookeeper/test/FourLetterWordsTest.java?rev=1690565&r1=1690564&r2=1690565&view=diff
==============================================================================
--- 
zookeeper/branches/branch-3.5/src/java/test/org/apache/zookeeper/test/FourLetterWordsTest.java
 (original)
+++ 
zookeeper/branches/branch-3.5/src/java/test/org/apache/zookeeper/test/FourLetterWordsTest.java
 Mon Jul 13 04:03:00 2015
@@ -68,6 +68,7 @@ public class FourLetterWordsTest extends
         verify("srvr", "Outstanding");
         verify("cons", sid);
         verify("dump", sid);
+        verify("dirs", "size");
 
         zk.getData("/", true, null);
 
@@ -79,6 +80,7 @@ public class FourLetterWordsTest extends
         verify("wchs", "watching 1");
         verify("wchp", sid);
         verify("wchc", sid);
+        verify("dirs", "size");
         zk.close();
 
         verify("ruok", "imok");
@@ -102,6 +104,7 @@ public class FourLetterWordsTest extends
         verify("mntr", "num_alive_connections");
         verify("stat", "Connections");
         verify("srvr", "Connections");
+        verify("dirs", "size");
     }
 
     private String sendRequest(String cmd) throws IOException, 
SSLContextException {


Reply via email to