rreddy-22 commented on code in PR #16973:
URL: https://github.com/apache/kafka/pull/16973#discussion_r1731939314
##########
core/src/main/scala/kafka/tools/StorageTool.scala:
##########
@@ -153,50 +186,92 @@ object StorageTool extends Logging {
}
def parseArguments(args: Array[String]): Namespace = {
- val parser = ArgumentParsers.
- newArgumentParser("kafka-storage", /* defaultHelp */ true, /*
prefixChars */ "-", /* fromFilePrefix */ "@").
- description("The Kafka storage tool.")
+ val parser = ArgumentParsers
+ .newArgumentParser("kafka-storage", true, "-", "@")
+ .description("The Kafka storage tool.")
val subparsers = parser.addSubparsers().dest("command")
- val infoParser = subparsers.addParser("info").
- help("Get information about the Kafka log directories on this node.")
- val formatParser = subparsers.addParser("format").
- help("Format the Kafka log directories on this node.")
- subparsers.addParser("random-uuid").help("Print a random UUID.")
- List(infoParser, formatParser).foreach(parser => {
- parser.addArgument("--config", "-c").
- action(store()).
- required(true).
- help("The Kafka configuration file to use.")
- })
- formatParser.addArgument("--cluster-id", "-t").
- action(store()).
- required(true).
- help("The cluster ID to use.")
- formatParser.addArgument("--add-scram", "-S").
- action(append()).
- help("""A SCRAM_CREDENTIAL to add to the __cluster_metadata log e.g.
+ addInfoParser(subparsers)
+ addFormatParser(subparsers)
+ addVersionMappingParser(subparsers)
+ addRandomUuidParser(subparsers)
+
+ parser.parseArgs(args)
+ }
+
+ private def addInfoParser(subparsers: Subparsers): Unit = {
+ val infoParser = subparsers.addParser("info")
+ .help("Get information about the Kafka log directories on this node.")
+
+ addCommonArguments(infoParser)
+ }
+
+ private def addFormatParser(subparsers: Subparsers): Unit = {
+ val formatParser = subparsers.addParser("format")
+ .help("Format the Kafka log directories on this node.")
+
+ formatParser.addArgument("--cluster-id", "-t")
+ .action(store())
+ .required(true)
+ .help("The cluster ID to use.")
+
+ formatParser.addArgument("--add-scram", "-S")
+ .action(append())
+ .help("""A SCRAM_CREDENTIAL to add to the __cluster_metadata log e.g.
|'SCRAM-SHA-256=[name=alice,password=alice-secret]'
|'SCRAM-SHA-512=[name=alice,iterations=8192,salt="N3E=",saltedpassword="YCE="]'""".stripMargin)
- formatParser.addArgument("--ignore-formatted", "-g").
- action(storeTrue())
- formatParser.addArgument("--release-version", "-r").
- action(store()).
- help(s"The release version to use for the initial feature settings. The
minimum is " +
+
+ formatParser.addArgument("--ignore-formatted", "-g")
+ .action(storeTrue())
+
+ formatParser.addArgument("--release-version", "-r")
+ .action(store())
+ .help(s"The release version to use for the initial feature settings. The
minimum is " +
s"${MetadataVersion.IBP_3_0_IV0}; the default is
${MetadataVersion.LATEST_PRODUCTION}")
- formatParser.addArgument("--feature", "-f").
- help("The setting to use for a specific feature, in feature=level
format. For example: `kraft.version=1`.").
- action(append())
+
+ formatParser.addArgument("--feature", "-f")
+ .help("The setting to use for a specific feature, in feature=level
format. For example: `kraft.version=1`.")
+ .action(append())
+
val reconfigurableQuorumOptions = formatParser.addMutuallyExclusiveGroup()
- reconfigurableQuorumOptions.addArgument("--standalone", "-s").
- help("Used to initialize a single-node quorum controller quorum.").
- action(storeTrue())
- reconfigurableQuorumOptions.addArgument("--initial-controllers", "-I").
- help("The initial controllers, as a comma-separated list of
id@hostname:port:directory. The same values must be used to format all nodes.
For example:\n" +
-
"[email protected]:8082:JEXY6aqzQY-32P5TStzaFg,[email protected]:8083:MvDxzVmcRsaTz33bUuRU6A,[email protected]:8084:07R5amHmR32VDA6jHkGbTA\n").
- action(store())
- parser.parseArgs(args)
+ reconfigurableQuorumOptions.addArgument("--standalone", "-s")
+ .help("Used to initialize a single-node quorum controller quorum.")
+ .action(storeTrue())
+
+ reconfigurableQuorumOptions.addArgument("--initial-controllers", "-I")
+ .help("The initial controllers, as a comma-separated list of
id@hostname:port:directory. The same values must be used to format all nodes.
For example:\n" +
+
"[email protected]:8082:JEXY6aqzQY-32P5TStzaFg,[email protected]:8083:MvDxzVmcRsaTz33bUuRU6A,[email protected]:8084:07R5amHmR32VDA6jHkGbTA\n")
+ .action(store())
+
+ addCommonArguments(formatParser)
+ }
+
+ private def addVersionMappingParser(subparsers: Subparsers): Unit = {
+ val versionMappingParser = subparsers.addParser("version-mapping")
+ .help("Look up the corresponding features for a given metadata version.
" +
+ "Using the command with no --release-version argument will return
the mapping for " +
+ "the latest stable metadata version"
+ )
+
+ versionMappingParser.addArgument("--release-version", "-r")
+ .action(store())
+ .help(s"The release version to use for the corresponding feature
mapping. The minimum is " +
+ s"${MetadataVersion.IBP_3_0_IV0}; the default is
${MetadataVersion.LATEST_PRODUCTION}")
+
+ addCommonArguments(versionMappingParser)
+ }
+
+ private def addRandomUuidParser(subparsers: Subparsers): Unit = {
+ subparsers.addParser("random-uuid")
+ .help("Print a random UUID.")
+ }
+
+ private def addCommonArguments(parser: Subparser): Unit = {
Review Comment:
ah yes that makes more sense!
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]