This is an automated email from the ASF dual-hosted git repository.

govind pushed a commit to branch 2.1.x-branch
in repository https://gitbox.apache.org/repos/asf/storm.git


The following commit(s) were added to refs/heads/2.1.x-branch by this push:
     new a6b7cf9  STORM-3515: Fixes config override flag parsing in Storm CLI
a6b7cf9 is described below

commit a6b7cf994d48371cea55e2aba0c06937ddffa713
Author: Govind Menon <[email protected]>
AuthorDate: Fri Oct 4 13:40:51 2019 -0500

    STORM-3515: Fixes config override flag parsing in Storm CLI
---
 bin/storm.py                           | 61 ++++++++++++++++------------------
 storm-client/test/py/test_storm_cli.py |  5 +--
 2 files changed, 31 insertions(+), 35 deletions(-)

diff --git a/bin/storm.py b/bin/storm.py
index e1b47f6..1aa2993 100755
--- a/bin/storm.py
+++ b/bin/storm.py
@@ -278,7 +278,7 @@ def run_client_jar(klass, args, daemon=False, client=True, 
extrajvmopts=[]):
         klass, args.storm_config_opts,
         jvmtype="-client",
         extrajars=extra_jars,
-        args=args.topology_main_args,
+        args=args.main_args,
         daemon=False,
         jvmopts=JAR_JVM_OPTS + extrajvmopts + ["-Dstorm.jar=" + jarfile] +
                 ["-Dstorm.dependency.jars=" + ",".join(local_jars)] +
@@ -295,7 +295,6 @@ def print_remoteconfvalue(args):
 
 def initialize_main_command():
     main_parser = argparse.ArgumentParser(prog="storm", 
formatter_class=SortingHelpFormatter)
-    add_common_options(main_parser)
 
     subparsers = main_parser.add_subparsers(help="")
 
@@ -360,12 +359,17 @@ def initialize_remoteconfvalue_subcommand(subparsers):
     add_common_options(sub_parser)
 
 
-def add_common_options(parser):
+def add_common_options(parser, main_args=True):
     parser.add_argument("--config", default=None, help="Override default storm 
conf file")
     parser.add_argument(
         "-storm_config_opts", "-c", action="append", default=[],
         help="Override storm conf properties , e.g. nimbus.ui.port=4443"
     )
+    if main_args:
+        parser.add_argument(
+            "main_args", metavar="main_args",
+            nargs='*', help="Runs the main method with the specified 
arguments."
+        )
 
 def add_topology_jar_options(parser):
     parser.add_argument(
@@ -376,10 +380,6 @@ def add_topology_jar_options(parser):
         "topology_main_class", metavar="topology-main-class",
     help="main class of the topology jar being submitted"
     )
-    parser.add_argument(
-        "topology_main_args", metavar="topology_main_args",
-        nargs='*', help="Runs the main method with the specified arguments."
-    )
 
 
 def add_client_jar_options(parser):
@@ -510,12 +510,6 @@ def check_positive(value):
         raise argparse.ArgumentTypeError("%s is not a positive integer" % 
value)
     return ivalue
 
-def check_even_list(cred_list):
-    if not (len(cred_list) % 2):
-        raise argparse.ArgumentTypeError("please provide a list of cred key 
and value pairs")
-    return cred_list
-
-
 def initialize_upload_credentials_subcommand(subparsers):
     command_help = """Uploads a new set of credentials to a running 
topology."""
     sub_parser = subparsers.add_parser("upload-credentials", 
help=command_help, formatter_class=SortingHelpFormatter)
@@ -533,8 +527,7 @@ def initialize_upload_credentials_subcommand(subparsers):
     )
 
     sub_parser.add_argument(
-        "cred_list", nargs='*', help="List of credkeys and their values 
[credkey credvalue]*",
-        type=check_even_list
+        "cred_list", nargs='*', help="List of credkeys and their values 
[credkey credvalue]*"
     )
 
     sub_parser.set_defaults(func=upload_credentials)
@@ -563,7 +556,7 @@ def initialize_sql_subcommand(subparsers):
     group.add_argument("--explain", action="store_true", help="activate 
explain mode")
 
     sub_parser.set_defaults(func=sql)
-    add_common_options(sub_parser)
+    add_common_options(sub_parser, main_args=False)
 
 
 def initialize_blobstore_subcommand(subparsers):
@@ -581,7 +574,7 @@ def initialize_blobstore_subcommand(subparsers):
     )
     list_parser.add_argument(
         "keys", nargs='+')
-    add_common_options(list_parser)
+    add_common_options(list_parser, main_args=False)
 
     cat_parser = sub_sub_parsers.add_parser(
         "cat", help="read a blob and then either write it to a file, or STDOUT 
(requires read access).", formatter_class=SortingHelpFormatter
@@ -892,7 +885,7 @@ def initialize_shell_subcommand(subparsers):
     sub_parser.add_argument("args", nargs='*', default=[])
 
     sub_parser.set_defaults(func=shell)
-    add_common_options(sub_parser)
+    add_common_options(sub_parser, main_args=False)
 
 
 def initialize_repl_subcommand(subparsers):
@@ -987,7 +980,7 @@ def initialize_drpc_client_subcommand(subparsers):
     sub_parser.add_argument("function_arguments", nargs='*', default=[])
 
     sub_parser.set_defaults(func=drpc_client)
-    add_common_options(sub_parser)
+    add_common_options(sub_parser, main_args=False)
 
 
 def initialize_drpc_subcommand(subparsers):
@@ -1061,7 +1054,7 @@ def local(args):
     extrajvmopts = ["-Dstorm.local.sleeptime=" + args.local_ttl]
     if args.java_debug:
         extrajvmopts += ["-agentlib:jdwp=" + args.java_debug]
-    args.topology_main_args = [args.topology_main_class] + 
args.topology_main_args
+    args.main_args = [args.topology_main_class] + args.main_args
     run_client_jar(
         "org.apache.storm.LocalCluster", args,
         client=False, daemon=False, extrajvmopts=extrajvmopts)
@@ -1107,15 +1100,17 @@ def sql(args):
 def kill(args):
     exec_storm_class(
         "org.apache.storm.command.KillTopology",
-        args=sys.argv[2:], storm_config_opts=args.storm_config_opts,
+        args=args.main_args, storm_config_opts=args.storm_config_opts,
         jvmtype="-client",
         extrajars=[USER_CONF_DIR, STORM_BIN_DIR])
 
 
 def upload_credentials(args):
+    if (len(args.cred_list) %2 != 0):
+        raise argparse.ArgumentTypeError("please provide a list of cred key 
and value pairs " + cred_list)
     exec_storm_class(
         "org.apache.storm.command.UploadCredentials",
-        args=sys.argv[2:], storm_config_opts=args.storm_config_opts,
+        args=args.main_args, storm_config_opts=args.storm_config_opts,
         jvmtype="-client",
         extrajars=[USER_CONF_DIR, STORM_BIN_DIR])
 
@@ -1125,7 +1120,7 @@ def blob(args):
         raise argparse.ArgumentTypeError("Replication factor needed when doing 
blob update")
     exec_storm_class(
         "org.apache.storm.command.Blobstore",
-        args=sys.argv[2:], storm_config_opts=args.storm_config_opts,
+        args=args.main_args, storm_config_opts=args.storm_config_opts,
         jvmtype="-client",
         extrajars=[USER_CONF_DIR, STORM_BIN_DIR])
 
@@ -1133,7 +1128,7 @@ def blob(args):
 def heartbeats(args):
     exec_storm_class(
         "org.apache.storm.command.Heartbeats",
-        args=sys.argv[2:], storm_config_opts=args.storm_config_opts,
+        args=args.main_args, storm_config_opts=args.storm_config_opts,
         jvmtype="-client",
         extrajars=[USER_CONF_DIR, STORM_BIN_DIR])
 
@@ -1141,14 +1136,14 @@ def heartbeats(args):
 def activate(args):
     exec_storm_class(
         "org.apache.storm.command.Activate",
-        args=sys.argv[2:], storm_config_opts=args.storm_config_opts,
+        args=args.main_args, storm_config_opts=args.storm_config_opts,
         jvmtype="-client",
         extrajars=[USER_CONF_DIR, STORM_BIN_DIR])
 
 def listtopos(args):
     exec_storm_class(
         "org.apache.storm.command.ListTopologies",
-        args=sys.argv[2:], storm_config_opts=args.storm_config_opts,
+        args=args.main_args, storm_config_opts=args.storm_config_opts,
         jvmtype="-client",
         extrajars=[USER_CONF_DIR, STORM_BIN_DIR])
 
@@ -1163,14 +1158,14 @@ def set_log_level(args):
             raise argparse.ArgumentTypeError("Should be in the form[logger 
name]=[log level][:optional timeout]")
     exec_storm_class(
         "org.apache.storm.command.SetLogLevel",
-        args=sys.argv[2:], storm_config_opts=args.storm_config_opts,
+        args=args.main_args, storm_config_opts=args.storm_config_opts,
         jvmtype="-client",
         extrajars=[USER_CONF_DIR, STORM_BIN_DIR])
 
 def deactivate(args):
     exec_storm_class(
         "org.apache.storm.command.Deactivate",
-        args=sys.argv[2:], storm_config_opts=args.storm_config_opts,
+        args=args.main_args, storm_config_opts=args.storm_config_opts,
         jvmtype="-client",
         extrajars=[USER_CONF_DIR, STORM_BIN_DIR])
 
@@ -1186,7 +1181,7 @@ def rebalance(args):
             raise argparse.ArgumentTypeError("Should be in the form 
component_name:new_executor_count")
     exec_storm_class(
         "org.apache.storm.command.Rebalance",
-        args=sys.argv[2:], storm_config_opts=args.storm_config_opts,
+        args=args.main_args, storm_config_opts=args.storm_config_opts,
         jvmtype="-client",
         extrajars=[USER_CONF_DIR, STORM_BIN_DIR])
 
@@ -1194,7 +1189,7 @@ def rebalance(args):
 def get_errors(args):
     exec_storm_class(
         "org.apache.storm.command.GetErrors",
-        args=sys.argv[2:], storm_config_opts=args.storm_config_opts,
+        args=args.main_args, storm_config_opts=args.storm_config_opts,
         jvmtype="-client",
         extrajars=[USER_CONF_DIR, STORM_BIN_DIR])
 
@@ -1202,7 +1197,7 @@ def get_errors(args):
 def healthcheck(args):
     exec_storm_class(
         "org.apache.storm.command.HealthCheck",
-        args=sys.argv[2:], storm_config_opts=args.storm_config_opts,
+        args=args.main_args, storm_config_opts=args.storm_config_opts,
         jvmtype="-client",
         extrajars=[USER_CONF_DIR, STORM_BIN_DIR])
 
@@ -1210,7 +1205,7 @@ def healthcheck(args):
 def kill_workers(args):
     exec_storm_class(
         "org.apache.storm.command.KillWorkers",
-        args=sys.argv[2:], storm_config_opts=args.storm_config_opts,
+        args=args.main_args, storm_config_opts=args.storm_config_opts,
         jvmtype="-client",
         extrajars=[USER_CONF_DIR, STORM_BIN_DIR])
 
@@ -1218,7 +1213,7 @@ def kill_workers(args):
 def admin(args):
     exec_storm_class(
         "org.apache.storm.command.AdminCommands",
-        args=sys.argv[2:], storm_config_opts=args.storm_config_opts,
+        args=args.main_args, storm_config_opts=args.storm_config_opts,
         jvmtype="-client",
         extrajars=[USER_CONF_DIR, STORM_BIN_DIR])
 
diff --git a/storm-client/test/py/test_storm_cli.py 
b/storm-client/test/py/test_storm_cli.py
index 1069a6b..20eb589 100644
--- a/storm-client/test/py/test_storm_cli.py
+++ b/storm-client/test/py/test_storm_cli.py
@@ -42,6 +42,7 @@ class TestStormCli(TestCase):
         )
 
     def base_test(self, command_invocation, mock_shell_interface, 
expected_output):
+        print(command_invocation)
         with mock.patch.object(sys, "argv", command_invocation):
             self.cli_main()
         if expected_output not in mock_shell_interface.call_args_list:
@@ -146,7 +147,7 @@ class TestStormCli(TestCase):
 
     def test_upload_credentials_command(self):
         self.base_test([
-            'storm', 'upload-credentials', 'my-topology-name', 'appids 
role.name1,role.name2"'
+            'storm','upload-credentials', '--config', 
'/some/other/storm.yaml', '-c', 'test=test', 'my-topology-name', 'appids', 
'role.name1,role.name2'
         ], self.mock_execvp, mock.call(
             self.java_cmd, [
                 self.java_cmd,  '-client', '-Ddaemon.name=', 
'-Dstorm.options=',
@@ -156,7 +157,7 @@ class TestStormCli(TestCase):
                                              '/extlib:' + self.storm_dir + 
'/extlib-daemon:' +
                                              self.storm_dir + '/conf:' + 
self.storm_dir +
                                              '/bin', 
'org.apache.storm.command.UploadCredentials',
-                'my-topology-name', 'appids role.name1,role.name2"'])
+                'my-topology-name', 'appids role.name1,role.name"'])
         )
 
     def test_blobstore_command(self):

Reply via email to