This is an automated email from the ASF dual-hosted git repository.
janhoy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new e1799d8a717 Add a picocli restart command so 'bin/solr restart --help'
works (#5286)
e1799d8a717 is described below
commit e1799d8a71726bd8ec2ad69f1e3a4b5c4f3e019f
Author: Jan Høydahl <[email protected]>
AuthorDate: Thu Nov 5 23:23:39 2026 +0100
Add a picocli restart command so 'bin/solr restart --help' works (#5286)
---
.../java/org/apache/solr/cli/RestartCommand.java | 49 ++++++++
.../core/src/java/org/apache/solr/cli/SolrCLI.java | 1 +
.../org/apache/solr/cli/SolrCLIPicocliTest.java | 13 +++
.../modules/deployment-guide/deployment-nav.adoc | 1 +
.../modules/deployment-guide/pages/cli/index.adoc | 1 +
.../deployment-guide/pages/cli/solr-restart.adoc | 128 +++++++++++++++++++++
6 files changed, 193 insertions(+)
diff --git a/solr/core/src/java/org/apache/solr/cli/RestartCommand.java
b/solr/core/src/java/org/apache/solr/cli/RestartCommand.java
new file mode 100644
index 00000000000..d509e07b0f1
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/cli/RestartCommand.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.solr.cli;
+
+import picocli.CommandLine;
+
+/**
+ * This class is currently only used for printing CLI usage. The restart logic
is currently handled
+ * in the start script, which parses the same options as {@code start} plus
the stop key.
+ */
[email protected](
+ name = "restart",
+ description = "Restarts Solr.",
+ footerHeading = "%nExamples:%n",
+ footer = {
+ " # Restart Solr running on the default port",
+ " bin/solr restart",
+ "",
+ " # Restart Solr running on a custom port with 2g heap",
+ " bin/solr restart -p 8984 -m 2g"
+ })
+public class RestartCommand extends StartCommand {
+
+ @CommandLine.Option(
+ names = {"-k", "--key"},
+ description = "Stop key; default is solrrocks",
+ defaultValue = "solrrocks")
+ String key;
+
+ /** The bin/solr script performs the restart; this command only documents
its options. */
+ @Override
+ public Integer call() {
+ return 0;
+ }
+}
diff --git a/solr/core/src/java/org/apache/solr/cli/SolrCLI.java
b/solr/core/src/java/org/apache/solr/cli/SolrCLI.java
index 555b30bf7c8..ca1b3e3b4b1 100755
--- a/solr/core/src/java/org/apache/solr/cli/SolrCLI.java
+++ b/solr/core/src/java/org/apache/solr/cli/SolrCLI.java
@@ -75,6 +75,7 @@ import org.slf4j.LoggerFactory;
subcommands = {
StartCommand.class,
StopCommand.class,
+ RestartCommand.class,
StatusTool.class,
VersionTool.class,
ZkTool.class,
diff --git a/solr/core/src/test/org/apache/solr/cli/SolrCLIPicocliTest.java
b/solr/core/src/test/org/apache/solr/cli/SolrCLIPicocliTest.java
index 7929150b788..c73fa2df925 100644
--- a/solr/core/src/test/org/apache/solr/cli/SolrCLIPicocliTest.java
+++ b/solr/core/src/test/org/apache/solr/cli/SolrCLIPicocliTest.java
@@ -116,6 +116,19 @@ public class SolrCLIPicocliTest extends SolrTestCase {
}
}
+ /**
+ * The bin/solr script handles start, stop and restart itself, but still
hands {@code --help} for
+ * them to this tool, so each one must be a registered command.
+ */
+ @Test
+ public void testScriptHandledCommandsAreRegistered() {
+ for (String name : new String[] {"start", "stop", "restart"}) {
+ assertNotNull(
+ "'bin/solr " + name + " --help' is dispatched to the tool, so " +
name + " must exist",
+ rootCommand().getSubcommands().get(name));
+ }
+ }
+
/** {@code --version} is only meaningful on the top-level command. */
@Test
public void testOnlyRootDeclaresVersionOption() {
diff --git a/solr/solr-ref-guide/modules/deployment-guide/deployment-nav.adoc
b/solr/solr-ref-guide/modules/deployment-guide/deployment-nav.adoc
index da291cbf746..c74b15d4962 100644
--- a/solr/solr-ref-guide/modules/deployment-guide/deployment-nav.adoc
+++ b/solr/solr-ref-guide/modules/deployment-guide/deployment-nav.adoc
@@ -41,6 +41,7 @@
**** xref:cli/solr-package-uninstall.adoc[uninstall]
*** xref:cli/solr-post.adoc[post]
*** xref:cli/solr-postlogs.adoc[postlogs]
+*** xref:cli/solr-restart.adoc[restart]
*** xref:cli/solr-snapshot.adoc[snapshot]
**** xref:cli/solr-snapshot-create.adoc[create]
**** xref:cli/solr-snapshot-delete.adoc[delete]
diff --git a/solr/solr-ref-guide/modules/deployment-guide/pages/cli/index.adoc
b/solr/solr-ref-guide/modules/deployment-guide/pages/cli/index.adoc
index fb8ea48e30e..d1b55f01912 100644
--- a/solr/solr-ref-guide/modules/deployment-guide/pages/cli/index.adoc
+++ b/solr/solr-ref-guide/modules/deployment-guide/pages/cli/index.adoc
@@ -80,6 +80,7 @@ Any command not listed here is unavailable when the picocli
implementation is en
|xref:cli/solr-package.adoc[bin/solr package]
|xref:cli/solr-post.adoc[bin/solr post]
|xref:cli/solr-postlogs.adoc[bin/solr postlogs]
+|xref:cli/solr-restart.adoc[bin/solr restart]
|xref:cli/solr-snapshot-create.adoc[bin/solr snapshot create]
|xref:cli/solr-snapshot-delete.adoc[bin/solr snapshot delete]
|xref:cli/solr-snapshot-describe.adoc[bin/solr snapshot describe]
diff --git
a/solr/solr-ref-guide/modules/deployment-guide/pages/cli/solr-restart.adoc
b/solr/solr-ref-guide/modules/deployment-guide/pages/cli/solr-restart.adoc
new file mode 100644
index 00000000000..f153af22996
--- /dev/null
+++ b/solr/solr-ref-guide/modules/deployment-guide/pages/cli/solr-restart.adoc
@@ -0,0 +1,128 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+// DO NOT EDIT -- this page is auto-generated from picocli annotations.
+// To update: modify the @Command/@Option annotations in the Java source, then
run:
+// ./gradlew :solr:solr-ref-guide:generateCliDocs
+
+= bin/solr restart
+:page-toclevels: 2
+
+[WARNING]
+====
+This page documents the *experimental* picocli implementation of `bin/solr`,
which is not enabled by default.
+For what `bin/solr` does by default, see
xref:solr-control-script-reference.adoc[].
+See xref:cli/index.adoc[] to enable this implementation and for its known
limitations.
+====
+
+// tag::picocli-generated-man-section-synopsis[]
+== Synopsis
+
+....
+bin/solr restart [-fhqy] [--force] [--user-managed] [--verbose]
+ [--data-home=<dataHome>] [-e=<example>]
+ [--example-dir=<exampleDir>] [--host=<host>]
[-j=<jettyParams>]
+ [--jvm-opts=<jvmOpts>] [-k=<key>] [-m=<memory>] [-p=<port>]
+ [--script-inputs=<values>] [--server-dir=<serverDir>]
+ [--solr-home=<solrHome>] [-z=<zkHost>]
+....
+
+// end::picocli-generated-man-section-synopsis[]
+
+// tag::picocli-generated-man-section-description[]
+== Description
+
+Restarts Solr.
+
+// end::picocli-generated-man-section-description[]
+
+// tag::picocli-generated-man-section-options[]
+== Options
+
+*--data-home*=_<dataHome>_::
+ Set solr.data.home system property for index data storage; default is
solr.solr.home
+
+*-e*, *--example*=_<example>_::
+ Run an example: cloud, techproducts, schemaless, films
+
+*--example-dir*=_<exampleDir>_::
+ Override the directory containing example configurations used when running
examples with --example
+
+*-f*, *--foreground*::
+ Start Solr in foreground; default is background with logs to
solr-PORT-console.log
+
+*--force*::
+ Override warning when attempting to start Solr as root user
+
+*-h*, *--help*::
+ Print this help message and exit.
+
+*--host*=_<host>_::
+ Specify the hostname this Solr node will advertise to ZooKeeper and other
cluster members (SOLR_HOST_ADVERTISE). Defaults to the canonical hostname of
the local host.
+
+*-j*, *--jettyconfig*=_<jettyParams>_::
+ Additional Jetty parameters, e.g., -j
"--include-jetty-dir=/etc/jetty/custom/server/"
+
+*--jvm-opts*=_<jvmOpts>_::
+ Additional JVM parameters, e.g., --jvm-opts "-verbose:gc"
+
+*-k*, *--key*=_<key>_::
+ Stop key; default is solrrocks
+
+*-m*, *--memory*=_<memory>_::
+ Set JVM heap size, e.g., -m 4g sets -Xms4g -Xmx4g; default is 512m
+
+*-p*, *--port*=_<port>_::
+ Specify the Solr HTTP port; default is 8983. STOP_PORT=($SOLR_PORT-1000),
RMI_PORT=($SOLR_PORT+10000)
+
+*-q*, *--quiet*::
+ Set log level to WARN (quiet); default is INFO
+
+*--script-inputs*=_<values>_::
+ Don't prompt for input; comma-delimited list of inputs to use when running
examples that accept user input
+
+*--server-dir*=_<serverDir>_::
+ Specify the Solr server directory; default is 'server'
+
+*--solr-home*=_<solrHome>_::
+ Set solr.solr.home system property; default is 'server/solr'. Ignored in
examples mode
+
+*--user-managed*::
+ Start Solr in standalone mode. Default is SolrCloud (ZooKeeper) mode.
+
+*--verbose*::
+ Set log level to DEBUG (verbose); default is INFO
+
+*-y*, *--no-prompt*::
+ Don't prompt for input; accept all defaults when running examples
+
+*-z*, *--zk-host*=_<zkHost>_::
+ Zookeeper connection string; default is to start an embedded ZooKeeper on
PORT+10000
+
+// end::picocli-generated-man-section-options[]
+
+// tag::picocli-generated-man-section-footer[]
+== Examples
+[%hardbreaks]
+ # Restart Solr running on the default port
+ bin/solr restart
+
+[%hardbreaks]
+ # Restart Solr running on a custom port with 2g heap
+ bin/solr restart -p 8984 -m 2g
+
+// end::picocli-generated-man-section-footer[]