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";