janhoy commented on code in PR #5050: URL: https://github.com/apache/solr/pull/5050#discussion_r4205515631
########## changelog/unreleased/SOLR-18517-picocli-run-example.yml: ########## @@ -0,0 +1,9 @@ +# See https://github.com/apache/solr/blob/main/dev-docs/changelog.adoc + +title: Running an example with `bin/solr start -e` now works in the experimental picocli command line interface. Review Comment: Generic changelog comment, see other PR (add author/link to the main picocli yml file) ########## solr/core/src/java/org/apache/solr/cli/RunExampleTool.java: ########## @@ -222,6 +307,122 @@ record RunExampleParams(boolean isCloudMode, String zkHost, int port, StartSolrP record CloudExampleParams( boolean noPrompt, String scriptInputs, String zkHost, int basePort, StartSolrParams start) {} + // --- picocli fields --- + + @picocli.CommandLine.Option( + names = {"-y", "--no-prompt"}, + description = + "Don't prompt for input; accept all defaults when running examples that accept user" + + " input.") + private boolean noPromptOpt; + + @picocli.CommandLine.Option( + names = "--script-inputs", + paramLabel = "VALUES", + description = + "Provide comma-separated values for prompts. Same as --no-prompt but uses provided" + + " values instead of defaults. Example: --script-inputs" + + " 3,8983,8984,8985,\"gettingstarted\",2,2,_default") + private String scriptInputsOpt; + + @picocli.CommandLine.Option( + names = {"-e", "--example"}, + required = true, + paramLabel = "NAME", + description = + "Name of the example to launch, one of: cloud, techproducts, schemaless, films.") + private String exampleOpt; + + @picocli.CommandLine.Option( + names = "--script", + paramLabel = "PATH", + description = "Path to the bin/solr script.") + private String scriptOpt; + + @picocli.CommandLine.Option( + names = {"-d", "--server-dir"}, + required = true, + paramLabel = "DIR", + description = "Path to the Solr server directory.") + private String serverDirOpt; + + @picocli.CommandLine.Option( + names = {"-f", "--force"}, + description = "Force option in case Solr is run as root.") + private boolean forceOpt; + + @picocli.CommandLine.Option( + names = "--example-dir", + paramLabel = "DIR", + description = + "Path to the Solr example directory; if not provided, ${serverDir}/../example is" + + " expected to exist.") + private String exampleDirOpt; + + @picocli.CommandLine.Option( + names = "--solr-home", + paramLabel = "SOLR_HOME_DIR", + description = + "Path to the Solr home directory; if not provided, ${serverDir}/solr is expected to" + + " exist.") + private String solrHomeOpt; + + @picocli.CommandLine.Option( + names = "--url-scheme", + defaultValue = "http", + paramLabel = "SCHEME", + description = "Solr URL scheme: http or https, defaults to http if not specified.") + private String urlSchemeOpt; + + // No explicit paramLabel: the default "<port>" is what CliDefaultValueProvider keys on, giving + // the solr.port.listen property / SOLR_PORT_LISTEN, else 8983, as under commons-cli. + @picocli.CommandLine.Option( + names = {"-p", "--port"}, + description = "Specify the port to start the Solr HTTP listener on; default is 8983.") + private int port; + + @picocli.CommandLine.Option( + names = "--host", + paramLabel = "HOSTNAME", + description = "Specify the hostname for this Solr instance.") + private String hostOpt; + + @picocli.CommandLine.Option( + names = "--user-managed", + description = "Start Solr in User Managed mode.") + private boolean userManagedOpt; + + @picocli.CommandLine.Option( + names = {"-m", "--memory"}, + paramLabel = "MEM", + description = + "Sets the min (-Xms) and max (-Xmx) heap size for the JVM, such as: -m 4g results in:" + + " -Xms4g -Xmx4g; by default, this script sets the heap size to 512m.") + private String memoryOpt; + + @picocli.CommandLine.Option( + names = "--jvm-opts", + paramLabel = "OPTS", + description = + "Additional options to be passed to the JVM when starting example Solr server(s).") + private String jvmOptsOpt; + + // Likewise "<zkHost>": the zkHost property / ZK_HOST, else null. + @picocli.CommandLine.Option( + names = {"-z", "--zk-host"}, + description = "Zookeeper connection string.") + private String zkHost; + + @picocli.CommandLine.Parameters( + arity = "0..*", + paramLabel = "ARG", + description = "Extra arguments passed through to the underlying bin/solr start command.") + private String[] extraArgsOpt = new String[0]; Review Comment: Blocking: `bin/solr start -e <ex> -Dfoo=bar` forwards the `-D…` args to `run_example`. commons-cli strips them in `SolrCLI.parseCmdLine` and hands them to `readExtraArgs(cli.getArgs())`; on the picocli path nothing strips them and picocli rejects the first one (`Unknown option: '-Dfoo=bar'`, exit 2 — verified with picocli 4.7.6), so this positional never sees them. Suggest `@picocli.CommandLine.Unmatched List<String> unmatched`, keep the `-D…` entries for `readExtraArgs(...)` and fail on anything else, plus a test in `SolrCLIRunExamplePicocliTest` with `-Dcustom.prop=1` (what `test_example.bats` passes). -- 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] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
