You are viewing a plain text version of this content. The canonical link for it is here.
Posted to s4-commits@incubator.apache.org by mm...@apache.org on 2012/03/29 15:12:43 UTC

[2/6] git commit: improved s4 command parameters parsing

improved s4 command parameters parsing


Project: http://git-wip-us.apache.org/repos/asf/incubator-s4/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-s4/commit/4878cbab
Tree: http://git-wip-us.apache.org/repos/asf/incubator-s4/tree/4878cbab
Diff: http://git-wip-us.apache.org/repos/asf/incubator-s4/diff/4878cbab

Branch: refs/heads/S4-22
Commit: 4878cbab0cff1f2239529d49de8259d7ab1d34f9
Parents: f416374
Author: Matthieu Morel <mm...@apache.org>
Authored: Thu Mar 29 16:36:36 2012 +0200
Committer: Matthieu Morel <mm...@apache.org>
Committed: Thu Mar 29 16:36:36 2012 +0200

----------------------------------------------------------------------
 s4                                                 |   27 +++++++------
 .../java/org/apache/s4/tools/DefineCluster.java    |   17 +-------
 .../src/main/java/org/apache/s4/tools/Deploy.java  |   30 ++++++---------
 .../main/java/org/apache/s4/tools/S4ArgsBase.java  |   10 +++++
 .../src/main/java/org/apache/s4/tools/Tools.java   |   21 ++++++++++
 .../main/java/org/apache/s4/tools/ZKServer.java    |   16 +------
 6 files changed, 63 insertions(+), 58 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/4878cbab/s4
----------------------------------------------------------------------
diff --git a/s4 b/s4
index a958cc2..56745a2 100755
--- a/s4
+++ b/s4
@@ -2,16 +2,10 @@
 
 # NOTE: "./gradlew s4-tools:installApp" will prepare/update the tools subproject and related startup scripts
 
-echo $0
-echo $1
-
 GRADLE=`pwd`/gradlew
 
 case "$1" in
 "deploy")
-# examples:
-# ./s4 deploy -appName=twitter-counter -buildFile=<s4-dir>/test-apps/twitter-counter/build.gradle -cluster=s4-test-cluster
-# ./s4 deploy -appName=twitter-adapter -buildFile=<s4-dir>/test-apps/twitter-adapter/build.gradle -cluster=s4-adapter-cluster
 	shift
     subprojects/s4-tools/build/install/s4-tools/bin/s4-tools org.apache.s4.tools.Deploy -gradle=$GRADLE $@
 ;;
@@ -20,25 +14,32 @@ case "$1" in
     subprojects/s4-tools/build/install/s4-tools/bin/s4-tools org.apache.s4.tools.ZKServer $@
 ;;
 "newCluster")
-# examples:
-#./s4 newCluster -name=s4-test-cluster -firstListeningPort=11000 -nbTasks=2 ; ./s4 newCluster -name=s4-adapter-cluster -firstListeningPort=13000 -nbTasks=1
 	shift
     subprojects/s4-tools/build/install/s4-tools/bin/s4-tools org.apache.s4.tools.DefineCluster $@
 ;;
 "appNode")
-# example:
-# ./s4 appNode <s4-dir>/subprojects/s4-core/src/test/resources/default.s4.properties
 	shift
   	subprojects/s4-tools/build/install/s4-tools/bin/s4-tools org.apache.s4.core.Main $@
 ;;
 "adapterNode")
-# example:
-# ./s4 adapterNode -s4Properties=<s4-dir>/test-apps/twitter-adapter/src/main/resources/s4.properties
 	shift
   	subprojects/s4-tools/build/install/s4-tools/bin/s4-tools org.apache.s4.core.adapter.AdapterMain $@
 ;;
 
+esac
 
+# EXAMPLES
+# deploy:
+# ./s4 deploy -appName=twitter-counter -buildFile=test-apps/twitter-counter/build.gradle -cluster=s4-test-cluster
+# ./s4 deploy -appName=twitter-adapter -buildFile=test-apps/twitter-adapter/build.gradle -cluster=s4-adapter-cluster
 
-esac
+# newCluster:
+# # examples:
+#./s4 newCluster -name=s4-test-cluster -firstListeningPort=11000 -nbTasks=2 ; ./s4 newCluster -name=s4-adapter-cluster -firstListeningPort=13000 -nbTasks=1
+
+# appNode:
+# ./s4 appNode subprojects/s4-core/src/test/resources/default.s4.properties
+
+# adapterNode:
+# ./s4 adapterNode -s4Properties=test-apps/twitter-adapter/src/main/resources/s4.properties
 

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/4878cbab/subprojects/s4-tools/src/main/java/org/apache/s4/tools/DefineCluster.java
----------------------------------------------------------------------
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/DefineCluster.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/DefineCluster.java
index 4fc09f0..48f65c5 100644
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/DefineCluster.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/DefineCluster.java
@@ -1,14 +1,11 @@
 package org.apache.s4.tools;
 
-import java.util.Arrays;
-
 import org.apache.log4j.BasicConfigurator;
 import org.apache.log4j.Level;
 import org.apache.s4.comm.tools.TaskSetup;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.beust.jcommander.JCommander;
 import com.beust.jcommander.Parameter;
 import com.beust.jcommander.Parameters;
 
@@ -23,15 +20,7 @@ public class DefineCluster {
         org.apache.log4j.Logger.getLogger("org.I0Itec").setLevel(Level.ERROR);
 
         ZKServerArgs clusterArgs = new ZKServerArgs();
-        JCommander jc = new JCommander(clusterArgs);
-        try {
-            jc.parse(args);
-        } catch (Exception e) {
-            System.out.println(Arrays.toString(args));
-            e.printStackTrace();
-            jc.usage();
-            System.exit(-1);
-        }
+        Tools.parseArgs(clusterArgs, args);
         try {
 
             logger.info("preparing new cluster [{}] with [{}] node(s)", clusterArgs.clusterName, clusterArgs.nbTasks);
@@ -46,8 +35,8 @@ public class DefineCluster {
 
     }
 
-    @Parameters(separators = "=", commandDescription = "Setup new S4 logical cluster")
-    static class ZKServerArgs {
+    @Parameters(commandNames = "s4 newCluster", separators = "=", commandDescription = "Setup new S4 logical cluster")
+    static class ZKServerArgs extends S4ArgsBase {
 
         @Parameter(names = "-name", description = "S4 cluster name", required = true)
         String clusterName = "s4-test-cluster";

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/4878cbab/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java
----------------------------------------------------------------------
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java
index 6b6820c..6573e8f 100644
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Deploy.java
@@ -20,7 +20,6 @@ import org.apache.s4.deploy.DistributedDeploymentManager;
 import org.apache.zookeeper.CreateMode;
 import org.slf4j.LoggerFactory;
 
-import com.beust.jcommander.JCommander;
 import com.beust.jcommander.Parameter;
 import com.beust.jcommander.Parameters;
 import com.google.common.io.ByteStreams;
@@ -36,22 +35,16 @@ public class Deploy {
      */
     public static void main(String[] args) {
 
-        DeployAppArgs appArgs = new DeployAppArgs();
-        JCommander jc = new JCommander(appArgs);
+        DeployAppArgs deployArgs = new DeployAppArgs();
+
+        Tools.parseArgs(deployArgs, args);
         // configure log4j for Zookeeper
         BasicConfigurator.configure();
         Logger.getLogger("org.apache.zookeeper").setLevel(Level.ERROR);
         Logger.getLogger("org.I0Itec").setLevel(Level.ERROR);
 
         try {
-            jc.parse(args);
-        } catch (Exception e) {
-            e.printStackTrace();
-            jc.usage();
-            System.exit(-1);
-        }
-        try {
-            ZkClient zkClient = new ZkClient(appArgs.zkConnectionString, appArgs.timeout);
+            ZkClient zkClient = new ZkClient(deployArgs.zkConnectionString, deployArgs.timeout);
             zkClient.setZkSerializer(new ZNRecordSerializer());
 
             tmpAppsDir = Files.createTempDir();
@@ -60,9 +53,9 @@ public class Deploy {
 
             String generatedS4RPath = null;
 
-            ExecGradle.exec(appArgs.gradleExecPath, appArgs.gradleBuildFilePath, "installS4R", new String[] {
-                    "appsDir=" + tmpAppsDir.getAbsolutePath(), "appName=" + appArgs.appName });
-            generatedS4RPath = tmpAppsDir.getAbsolutePath() + "/" + appArgs.appName + ".s4r";
+            ExecGradle.exec(deployArgs.gradleExecPath, deployArgs.gradleBuildFilePath, "installS4R", new String[] {
+                    "appsDir=" + tmpAppsDir.getAbsolutePath(), "appName=" + deployArgs.appName });
+            generatedS4RPath = tmpAppsDir.getAbsolutePath() + "/" + deployArgs.appName + ".s4r";
 
             Assert.assertTrue(ByteStreams.copy(Files.newInputStreamSupplier(new File(generatedS4RPath)),
                     Files.newOutputStreamSupplier(s4rToDeploy)) > 0);
@@ -70,9 +63,10 @@ public class Deploy {
             final String uri = s4rToDeploy.toURI().toString();
             ZNRecord record = new ZNRecord(String.valueOf(System.currentTimeMillis()));
             record.putSimpleField(DistributedDeploymentManager.S4R_URI, uri);
-            zkClient.create("/" + appArgs.clusterName + "/apps/" + appArgs.appName, record, CreateMode.PERSISTENT);
+            zkClient.create("/" + deployArgs.clusterName + "/apps/" + deployArgs.appName, record, CreateMode.PERSISTENT);
             logger.info("uploaded application [{}] to cluster [{}], using zookeeper znode [{}]", new String[] {
-                    appArgs.appName, appArgs.clusterName, "/" + appArgs.clusterName + "/apps/" + appArgs.appName });
+                    deployArgs.appName, deployArgs.clusterName,
+                    "/" + deployArgs.clusterName + "/apps/" + deployArgs.appName });
 
         } catch (Exception e) {
             LoggerFactory.getLogger(Deploy.class).error("Cannot deploy app", e);
@@ -80,8 +74,8 @@ public class Deploy {
 
     }
 
-    @Parameters(separators = "=")
-    static class DeployAppArgs {
+    @Parameters(commandNames = "s4 deploy", commandDescription = "Package and deploy application to S4 cluster", separators = "=")
+    static class DeployAppArgs extends S4ArgsBase {
 
         @Parameter(names = "-gradle", description = "path to gradle/gradlew executable", required = true)
         String gradleExecPath;

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/4878cbab/subprojects/s4-tools/src/main/java/org/apache/s4/tools/S4ArgsBase.java
----------------------------------------------------------------------
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/S4ArgsBase.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/S4ArgsBase.java
new file mode 100644
index 0000000..6ca7d01
--- /dev/null
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/S4ArgsBase.java
@@ -0,0 +1,10 @@
+package org.apache.s4.tools;
+
+import com.beust.jcommander.Parameter;
+
+public abstract class S4ArgsBase {
+
+    @Parameter(names = "-help", description = "usage")
+    boolean help = false;
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/4878cbab/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Tools.java
----------------------------------------------------------------------
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Tools.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Tools.java
index ae53cb6..b7c06a6 100644
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Tools.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/Tools.java
@@ -3,6 +3,10 @@ package org.apache.s4.tools;
 import java.lang.reflect.Method;
 import java.util.Arrays;
 
+import com.beust.jcommander.JCommander;
+import com.beust.jcommander.Parameters;
+import com.google.common.collect.Sets;
+
 public class Tools {
 
     public static void main(String[] args) {
@@ -19,4 +23,21 @@ public class Tools {
             e.printStackTrace();
         }
     }
+
+    public static void parseArgs(Object jcArgs, String[] cliArgs) {
+        JCommander jc = new JCommander(jcArgs);
+        try {
+            if (Sets.newHashSet(cliArgs).contains("-help")) {
+                Parameters parametersAnnotation = jcArgs.getClass().getAnnotation(Parameters.class);
+                jc.addCommand(parametersAnnotation.commandNames()[0], jcArgs);
+                jc.usage(parametersAnnotation.commandNames()[0]);
+                System.exit(0);
+            }
+            jc.parse(cliArgs);
+        } catch (Exception e) {
+            JCommander.getConsole().println("Cannot parse arguments: " + e.getMessage());
+            jc.usage();
+            System.exit(-1);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-s4/blob/4878cbab/subprojects/s4-tools/src/main/java/org/apache/s4/tools/ZKServer.java
----------------------------------------------------------------------
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/ZKServer.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/ZKServer.java
index cb4c85c..093d3ad 100644
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/ZKServer.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/ZKServer.java
@@ -1,7 +1,6 @@
 package org.apache.s4.tools;
 
 import java.io.File;
-import java.util.Arrays;
 
 import org.I0Itec.zkclient.IDefaultNameSpace;
 import org.I0Itec.zkclient.ZkClient;
@@ -10,7 +9,6 @@ import org.apache.commons.io.FileUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.beust.jcommander.JCommander;
 import com.beust.jcommander.Parameter;
 import com.beust.jcommander.Parameters;
 
@@ -20,15 +18,7 @@ public class ZKServer {
 
     public static void main(String[] args) {
         ZKServerArgs zkArgs = new ZKServerArgs();
-        JCommander jc = new JCommander(zkArgs);
-        try {
-            jc.parse(args);
-        } catch (Exception e) {
-            System.out.println(Arrays.toString(args));
-            e.printStackTrace();
-            jc.usage();
-            System.exit(-1);
-        }
+        Tools.parseArgs(zkArgs, args);
         try {
 
             logger.info("Starting zookeeper server on port [{}]", zkArgs.zkPort);
@@ -53,8 +43,8 @@ public class ZKServer {
         }
     }
 
-    @Parameters(separators = "=", commandDescription = "Start Zookeeper server")
-    static class ZKServerArgs {
+    @Parameters(commandNames = "s4 zkServer", separators = "=", commandDescription = "Start Zookeeper server")
+    static class ZKServerArgs extends S4ArgsBase {
 
         @Parameter(names = "-port", description = "Zookeeper port")
         String zkPort = "2181";