diff --git a/changelog/unreleased/SOLR-18234-solr-cli-reorganise.yml b/changelog/unreleased/SOLR-18234-solr-cli-reorganise.yml new file mode 100644 index 000000000000..90f0a6c04a66 --- /dev/null +++ b/changelog/unreleased/SOLR-18234-solr-cli-reorganise.yml @@ -0,0 +1,8 @@ +title: Reorganize org.apache.solr.cli into domain-based sub-packages +type: other +authors: + - name: Jalaz Kumar + nick: jaykay12 +links: + - name: SOLR-18234 + url: https://issues.apache.org/jira/browse/SOLR-18234 diff --git a/solr/core/src/java/org/apache/solr/cli/CLIUtils.java b/solr/core/src/java/org/apache/solr/cli/CLIUtils.java index 3c5d2a98ad6f..d672982ca050 100644 --- a/solr/core/src/java/org/apache/solr/cli/CLIUtils.java +++ b/solr/core/src/java/org/apache/solr/cli/CLIUtils.java @@ -33,6 +33,7 @@ import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.exec.OS; +import org.apache.solr.cli.tools.cluster.StatusTool; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.CloudSolrClient; @@ -254,7 +255,7 @@ public static String normalizeSolrUrl(CommandLine cli) throws Exception { * * @param connectionOptions the parsed connection group, or null if none of its options was given */ - static String resolveSolrUrl(ConnectionOptions connectionOptions, String credentials) + public static String resolveSolrUrl(ConnectionOptions connectionOptions, String credentials) throws Exception { String solrUrl = connectionOptions != null ? connectionOptions.solrUrl : null; if (solrUrl == null) { diff --git a/solr/core/src/java/org/apache/solr/cli/CollectionNameOptions.java b/solr/core/src/java/org/apache/solr/cli/CollectionNameOptions.java index 975ef0708e23..f7e037e44a5d 100644 --- a/solr/core/src/java/org/apache/solr/cli/CollectionNameOptions.java +++ b/solr/core/src/java/org/apache/solr/cli/CollectionNameOptions.java @@ -21,12 +21,12 @@ /** * Picocli mixin for the {@code -c} / {@code --name} option naming the collection a command acts on. */ -class CollectionNameOptions { +public class CollectionNameOptions { @CommandLine.Option( names = {"-c", "--name"}, required = true, paramLabel = "NAME", description = "Name of the collection.") - String name; + public String name; } diff --git a/solr/core/src/java/org/apache/solr/cli/ConnectionOptions.java b/solr/core/src/java/org/apache/solr/cli/ConnectionOptions.java index 57ee0532faaa..ac0cd2769ad7 100644 --- a/solr/core/src/java/org/apache/solr/cli/ConnectionOptions.java +++ b/solr/core/src/java/org/apache/solr/cli/ConnectionOptions.java @@ -18,6 +18,7 @@ import java.io.IOException; import java.util.Map; +import org.apache.solr.cli.tools.cluster.StatusTool; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.common.util.EnvUtils; @@ -30,20 +31,20 @@ * ensure the user provides at most one of {@code --solr-connection}, {@code --solr-url} or {@code * --zk-host}. */ -class ConnectionOptions { +public class ConnectionOptions { @CommandLine.Option( names = {"-s", "--solr-connection"}, description = "Zookeeper or HTTP(s) connection string; unnecessary if SOLR_CONNECTION is defined in solr.in.sh; otherwise, defaults to " + CommonCLIOptions.DefaultValues.ZK_HOST + ".") - String solrConnection; + public String solrConnection; @CommandLine.Option( names = {"--solr-url"}, description = "Base Solr URL, which can be used to determine the zk-host if that's not known.") - String solrUrl; + public String solrUrl; @CommandLine.Option( names = {"-z", "--zk-host"}, @@ -51,13 +52,13 @@ class ConnectionOptions { "Zookeeper connection string; unnecessary if ZK_HOST is defined in solr.in.sh; otherwise, defaults to " + CommonCLIOptions.DefaultValues.ZK_HOST + ".") - String zkHost; + public String zkHost; /** * The effective ZooKeeper connection string, taking {@code --solr-connection} into account, or * null if the user targeted Solr via a URL (or gave no target at all). */ - String effectiveZkHost() throws IOException { + public String effectiveZkHost() throws IOException { if (solrConnection != null) { var connection = CloudSolrClient.CloudSolrClientConnection.parse(solrConnection); return connection.isZookeeper() ? solrConnection : null; @@ -69,7 +70,7 @@ String effectiveZkHost() throws IOException { * The effective Solr URL, taking {@code --solr-connection} into account, or null if the user * targeted ZooKeeper (or gave no target at all). */ - String effectiveSolrUrl() throws IOException { + public String effectiveSolrUrl() throws IOException { if (solrConnection != null) { var connection = CloudSolrClient.CloudSolrClientConnection.parse(solrConnection); return connection.isZookeeper() ? null : connection.quorumItems().get(0); @@ -77,7 +78,7 @@ String effectiveSolrUrl() throws IOException { return solrUrl; } - static String resolveSolrUrl(ConnectionOptions connectionOptions, String credentials) + public static String resolveSolrUrl(ConnectionOptions connectionOptions, String credentials) throws Exception { if (connectionOptions != null) { String solrUrl = connectionOptions.effectiveSolrUrl(); @@ -114,7 +115,7 @@ static String resolveSolrUrl(ConnectionOptions connectionOptions, String credent return defaultUrl; } - static String resolveZkHost( + public static String resolveZkHost( ConnectionOptions connectionOptions, String solrUrl, String credentials) throws Exception { boolean resolveFromSolrUrl = false; if (connectionOptions != null) { 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 555b30bf7c8d..01284fe6e045 100755 --- a/solr/core/src/java/org/apache/solr/cli/SolrCLI.java +++ b/solr/core/src/java/org/apache/solr/cli/SolrCLI.java @@ -42,6 +42,43 @@ import org.apache.commons.cli.help.HelpFormatter; import org.apache.commons.cli.help.TableDefinition; import org.apache.commons.cli.help.TextHelpAppendable; +import org.apache.solr.cli.tools.ApiTool; +import org.apache.solr.cli.tools.AssertTool; +import org.apache.solr.cli.tools.AuthTool; +import org.apache.solr.cli.tools.ConfigTool; +import org.apache.solr.cli.tools.CreateTool; +import org.apache.solr.cli.tools.DeleteTool; +import org.apache.solr.cli.tools.ExportTool; +import org.apache.solr.cli.tools.PostLogsTool; +import org.apache.solr.cli.tools.PostTool; +import org.apache.solr.cli.tools.RunExampleTool; +import org.apache.solr.cli.tools.StreamTool; +import org.apache.solr.cli.tools.VersionTool; +import org.apache.solr.cli.tools.cluster.ClusterTool; +import org.apache.solr.cli.tools.cluster.HealthcheckTool; +import org.apache.solr.cli.tools.cluster.StatusTool; +import org.apache.solr.cli.tools.pkg.PackageTool; +import org.apache.solr.cli.tools.snapshot.SnapshotCreateShim; +import org.apache.solr.cli.tools.snapshot.SnapshotCreateTool; +import org.apache.solr.cli.tools.snapshot.SnapshotDeleteShim; +import org.apache.solr.cli.tools.snapshot.SnapshotDeleteTool; +import org.apache.solr.cli.tools.snapshot.SnapshotDescribeShim; +import org.apache.solr.cli.tools.snapshot.SnapshotDescribeTool; +import org.apache.solr.cli.tools.snapshot.SnapshotExportShim; +import org.apache.solr.cli.tools.snapshot.SnapshotExportTool; +import org.apache.solr.cli.tools.snapshot.SnapshotListShim; +import org.apache.solr.cli.tools.snapshot.SnapshotListTool; +import org.apache.solr.cli.tools.snapshot.SnapshotTool; +import org.apache.solr.cli.tools.zk.ConfigSetDownloadTool; +import org.apache.solr.cli.tools.zk.ConfigSetUploadTool; +import org.apache.solr.cli.tools.zk.UpdateACLTool; +import org.apache.solr.cli.tools.zk.ZkCpTool; +import org.apache.solr.cli.tools.zk.ZkLsTool; +import org.apache.solr.cli.tools.zk.ZkMkrootTool; +import org.apache.solr.cli.tools.zk.ZkMvTool; +import org.apache.solr.cli.tools.zk.ZkRmTool; +import org.apache.solr.cli.tools.zk.ZkTool; +import org.apache.solr.cli.tools.zk.ZkToolHelp; import org.apache.solr.client.api.util.SolrVersion; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.request.ContentWriterUpdateRequest; diff --git a/solr/core/src/java/org/apache/solr/cli/SolrProcessManager.java b/solr/core/src/java/org/apache/solr/cli/process/SolrProcessManager.java similarity index 99% rename from solr/core/src/java/org/apache/solr/cli/SolrProcessManager.java rename to solr/core/src/java/org/apache/solr/cli/process/SolrProcessManager.java index e51e6c92f9d0..0cc75a1366a0 100644 --- a/solr/core/src/java/org/apache/solr/cli/SolrProcessManager.java +++ b/solr/core/src/java/org/apache/solr/cli/process/SolrProcessManager.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.process; import static org.apache.solr.servlet.CoreContainerProvider.SOLR_INSTALL_DIR; diff --git a/solr/core/src/java/org/apache/solr/cli/process/package-info.java b/solr/core/src/java/org/apache/solr/cli/process/package-info.java new file mode 100644 index 000000000000..a231b83508af --- /dev/null +++ b/solr/core/src/java/org/apache/solr/cli/process/package-info.java @@ -0,0 +1,19 @@ +/* + * 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. + */ + +/** Utilities for discovering and managing Solr OS processes. */ +package org.apache.solr.cli.process; diff --git a/solr/core/src/java/org/apache/solr/cli/ApiTool.java b/solr/core/src/java/org/apache/solr/cli/tools/ApiTool.java similarity index 93% rename from solr/core/src/java/org/apache/solr/cli/ApiTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/ApiTool.java index 0f904185bdcb..146f59693eca 100644 --- a/solr/core/src/java/org/apache/solr/cli/ApiTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/ApiTool.java @@ -15,12 +15,18 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools; import java.net.URI; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; import org.apache.solr.client.solrj.SolrRequest; import org.apache.solr.client.solrj.request.GenericSolrRequest; import org.apache.solr.client.solrj.response.InputStreamResponseParser; @@ -107,7 +113,7 @@ void callApi(ApiParams params) throws Exception { echo(response); } - protected String callGet(String url, String credentials) throws Exception { + public String callGet(String url, String credentials) throws Exception { URI uri = new URI(url.replace("+", "%20")); String solrUrl = getSolrUrlFromUri(uri); String path = uri.getPath(); diff --git a/solr/core/src/java/org/apache/solr/cli/AssertTool.java b/solr/core/src/java/org/apache/solr/cli/tools/AssertTool.java similarity index 98% rename from solr/core/src/java/org/apache/solr/cli/AssertTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/AssertTool.java index c3027b82ed76..fd3a0992bafd 100644 --- a/solr/core/src/java/org/apache/solr/cli/AssertTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/AssertTool.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools; import java.io.IOException; import java.lang.invoke.MethodHandles; @@ -28,6 +28,14 @@ import org.apache.commons.cli.Option; import org.apache.commons.cli.OptionGroup; import org.apache.commons.cli.Options; +import org.apache.solr.cli.CLIO; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; +import org.apache.solr.cli.tools.cluster.StatusTool; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.request.HealthCheckRequest; diff --git a/solr/core/src/java/org/apache/solr/cli/AuthTool.java b/solr/core/src/java/org/apache/solr/cli/tools/AuthTool.java similarity index 98% rename from solr/core/src/java/org/apache/solr/cli/AuthTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/AuthTool.java index b63a0d545ddf..4885d5ff5365 100644 --- a/solr/core/src/java/org/apache/solr/cli/AuthTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/AuthTool.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -38,6 +38,13 @@ import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.lucene.util.Constants; +import org.apache.solr.cli.CLIO; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; +import org.apache.solr.cli.tools.zk.ZkConnectionOptions; import org.apache.solr.client.solrj.impl.SolrZkClientTimeout; import org.apache.solr.common.cloud.SolrZkClient; import org.apache.solr.common.util.EnvUtils; diff --git a/solr/core/src/java/org/apache/solr/cli/ConfigTool.java b/solr/core/src/java/org/apache/solr/cli/tools/ConfigTool.java similarity index 96% rename from solr/core/src/java/org/apache/solr/cli/ConfigTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/ConfigTool.java index d9284e8fe4dd..06008b5b6966 100644 --- a/solr/core/src/java/org/apache/solr/cli/ConfigTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/ConfigTool.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools; import java.util.HashMap; import java.util.List; @@ -24,6 +24,15 @@ import org.apache.commons.cli.MissingArgumentException; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; +import org.apache.solr.cli.CLIO; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.ConnectionOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.SolrCLI; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.common.util.EnvUtils; diff --git a/solr/core/src/java/org/apache/solr/cli/CreateTool.java b/solr/core/src/java/org/apache/solr/cli/tools/CreateTool.java similarity index 97% rename from solr/core/src/java/org/apache/solr/cli/CreateTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/CreateTool.java index 8ec27435be5c..a33ccebecc11 100644 --- a/solr/core/src/java/org/apache/solr/cli/CreateTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/CreateTool.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -29,7 +29,16 @@ import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.io.file.PathUtils; +import org.apache.solr.cli.CLIO; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; import org.apache.solr.cli.CommonCLIOptions.DefaultValues; +import org.apache.solr.cli.ConnectionOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; +import org.apache.solr.cli.tools.cluster.StatusTool; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.CloudSolrClient; diff --git a/solr/core/src/java/org/apache/solr/cli/DeleteTool.java b/solr/core/src/java/org/apache/solr/cli/tools/DeleteTool.java similarity index 96% rename from solr/core/src/java/org/apache/solr/cli/DeleteTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/DeleteTool.java index 15ca84581f10..dab30e5ebb85 100644 --- a/solr/core/src/java/org/apache/solr/cli/DeleteTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/DeleteTool.java @@ -14,13 +14,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools; import java.util.Locale; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.DeprecatedAttributes; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; +import org.apache.solr.cli.CLIO; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.ConnectionOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; import org.apache.solr.client.solrj.RemoteSolrException; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrServerException; diff --git a/solr/core/src/java/org/apache/solr/cli/ExportTool.java b/solr/core/src/java/org/apache/solr/cli/tools/ExportTool.java similarity index 98% rename from solr/core/src/java/org/apache/solr/cli/ExportTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/ExportTool.java index 03dacb31f48f..6ac151437a18 100644 --- a/solr/core/src/java/org/apache/solr/cli/ExportTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/ExportTool.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools; import static org.apache.solr.common.params.CommonParams.FL; import static org.apache.solr.common.params.CommonParams.JAVABIN; @@ -54,6 +54,13 @@ import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.lucene.util.SuppressForbidden; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.ConnectionOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrRequest; import org.apache.solr.client.solrj.SolrServerException; diff --git a/solr/core/src/java/org/apache/solr/cli/PostLogsTool.java b/solr/core/src/java/org/apache/solr/cli/tools/PostLogsTool.java similarity index 98% rename from solr/core/src/java/org/apache/solr/cli/PostLogsTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/PostLogsTool.java index 5f02b57ece20..547e38cffdfc 100644 --- a/solr/core/src/java/org/apache/solr/cli/PostLogsTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/PostLogsTool.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools; import java.io.BufferedReader; import java.io.IOException; @@ -36,6 +36,14 @@ import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; +import org.apache.solr.cli.CLIO; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.ConnectionOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.client.solrj.jetty.HttpJettySolrClient; diff --git a/solr/core/src/java/org/apache/solr/cli/PostTool.java b/solr/core/src/java/org/apache/solr/cli/tools/PostTool.java similarity index 99% rename from solr/core/src/java/org/apache/solr/cli/PostTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/PostTool.java index 859cee11e21d..1bcb2fde044a 100644 --- a/solr/core/src/java/org/apache/solr/cli/PostTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/PostTool.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools; import static java.nio.charset.StandardCharsets.US_ASCII; import static java.nio.charset.StandardCharsets.UTF_8; @@ -71,6 +71,14 @@ import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.io.output.NullOutputStream; +import org.apache.solr.cli.CLIO; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.ConnectionOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; import org.apache.solr.client.api.util.SolrVersion; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrServerException; diff --git a/solr/core/src/java/org/apache/solr/cli/RunExampleTool.java b/solr/core/src/java/org/apache/solr/cli/tools/RunExampleTool.java similarity index 99% rename from solr/core/src/java/org/apache/solr/cli/RunExampleTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/RunExampleTool.java index 66828271c060..f7ade4ef3da0 100644 --- a/solr/core/src/java/org/apache/solr/cli/RunExampleTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/RunExampleTool.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -45,6 +45,14 @@ import org.apache.commons.exec.Executor; import org.apache.commons.exec.environment.EnvironmentUtils; import org.apache.commons.io.file.PathUtils; +import org.apache.solr.cli.CLIO; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.SolrCLI; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; +import org.apache.solr.cli.tools.cluster.StatusTool; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.common.SolrException; diff --git a/solr/core/src/java/org/apache/solr/cli/StreamTool.java b/solr/core/src/java/org/apache/solr/cli/tools/StreamTool.java similarity index 98% rename from solr/core/src/java/org/apache/solr/cli/StreamTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/StreamTool.java index 798707425780..7581917058f1 100644 --- a/solr/core/src/java/org/apache/solr/cli/StreamTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/StreamTool.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools; import java.io.BufferedReader; import java.io.FileInputStream; @@ -37,6 +37,15 @@ import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; +import org.apache.solr.cli.CLIO; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.ConnectionOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; +import org.apache.solr.cli.tools.cluster.StatusTool; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.client.solrj.io.SolrClientCache; diff --git a/solr/core/src/java/org/apache/solr/cli/VersionTool.java b/solr/core/src/java/org/apache/solr/cli/tools/VersionTool.java similarity index 90% rename from solr/core/src/java/org/apache/solr/cli/VersionTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/VersionTool.java index a7b66e89a8ad..1d44d2c5b285 100644 --- a/solr/core/src/java/org/apache/solr/cli/VersionTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/VersionTool.java @@ -15,10 +15,17 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Options; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.ConnectionOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; import org.apache.solr.client.api.util.SolrVersion; import org.apache.solr.client.solrj.request.SystemInfoRequest; import org.apache.solr.client.solrj.response.SystemInfoResponse; diff --git a/solr/core/src/java/org/apache/solr/cli/ClusterTool.java b/solr/core/src/java/org/apache/solr/cli/tools/cluster/ClusterTool.java similarity index 94% rename from solr/core/src/java/org/apache/solr/cli/ClusterTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/cluster/ClusterTool.java index baf98380fca5..76a690b62e36 100644 --- a/solr/core/src/java/org/apache/solr/cli/ClusterTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/cluster/ClusterTool.java @@ -15,13 +15,19 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.cluster; import java.io.IOException; import java.util.concurrent.TimeUnit; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; +import org.apache.solr.cli.tools.zk.ZkConnectionOptions; import org.apache.solr.client.solrj.impl.SolrZkClientTimeout; import org.apache.solr.cloud.ZkController; import org.apache.solr.common.cloud.ClusterProperties; diff --git a/solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java b/solr/core/src/java/org/apache/solr/cli/tools/cluster/HealthcheckTool.java similarity index 97% rename from solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/cluster/HealthcheckTool.java index 005be05cec77..c6c758ce3f4e 100644 --- a/solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/cluster/HealthcheckTool.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.cluster; import static org.apache.solr.common.params.CommonParams.DISTRIB; import static org.apache.solr.common.params.CommonParams.NAME; @@ -32,6 +32,15 @@ import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; +import org.apache.solr.cli.CLIO; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.ConnectionOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.SolrCLI; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.client.solrj.jetty.HttpJettySolrClient; diff --git a/solr/core/src/java/org/apache/solr/cli/StatusTool.java b/solr/core/src/java/org/apache/solr/cli/tools/cluster/StatusTool.java similarity index 97% rename from solr/core/src/java/org/apache/solr/cli/StatusTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/cluster/StatusTool.java index a51e1ba7adc5..7965d7031a34 100644 --- a/solr/core/src/java/org/apache/solr/cli/StatusTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/cluster/StatusTool.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.cluster; import java.util.Collection; import java.util.LinkedHashMap; @@ -29,7 +29,14 @@ import org.apache.commons.cli.Option; import org.apache.commons.cli.OptionGroup; import org.apache.commons.cli.Options; -import org.apache.solr.cli.SolrProcessManager.SolrProcess; +import org.apache.solr.cli.CLIO; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; +import org.apache.solr.cli.process.SolrProcessManager; +import org.apache.solr.cli.process.SolrProcessManager.SolrProcess; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.client.solrj.request.ClusterApi; diff --git a/solr/core/src/java/org/apache/solr/cli/tools/cluster/package-info.java b/solr/core/src/java/org/apache/solr/cli/tools/cluster/package-info.java new file mode 100644 index 000000000000..7df20c6e5886 --- /dev/null +++ b/solr/core/src/java/org/apache/solr/cli/tools/cluster/package-info.java @@ -0,0 +1,19 @@ +/* + * 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. + */ + +/** CLI tools for cluster status, health, and properties. */ +package org.apache.solr.cli.tools.cluster; diff --git a/solr/core/src/java/org/apache/solr/cli/tools/package-info.java b/solr/core/src/java/org/apache/solr/cli/tools/package-info.java new file mode 100644 index 000000000000..9b2fe5548c69 --- /dev/null +++ b/solr/core/src/java/org/apache/solr/cli/tools/package-info.java @@ -0,0 +1,19 @@ +/* + * 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. + */ + +/** General-purpose Solr CLI tool implementations. */ +package org.apache.solr.cli.tools; diff --git a/solr/core/src/java/org/apache/solr/cli/PackageAddKey.java b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageAddKey.java similarity index 97% rename from solr/core/src/java/org/apache/solr/cli/PackageAddKey.java rename to solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageAddKey.java index 97f6bc286beb..1ccd56cb148d 100644 --- a/solr/core/src/java/org/apache/solr/cli/PackageAddKey.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageAddKey.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.pkg; import java.nio.file.Path; diff --git a/solr/core/src/java/org/apache/solr/cli/PackageAddRepo.java b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageAddRepo.java similarity index 98% rename from solr/core/src/java/org/apache/solr/cli/PackageAddRepo.java rename to solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageAddRepo.java index cb3bc7067a32..afe686c3f969 100644 --- a/solr/core/src/java/org/apache/solr/cli/PackageAddRepo.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageAddRepo.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.pkg; /** Supports package add-repo command in the bin/solr script. */ @SuppressWarnings("UnnecessarilyFullyQualified") diff --git a/solr/core/src/java/org/apache/solr/cli/PackageDeploy.java b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageDeploy.java similarity index 98% rename from solr/core/src/java/org/apache/solr/cli/PackageDeploy.java rename to solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageDeploy.java index ff24a7a1692d..31891e422e6e 100644 --- a/solr/core/src/java/org/apache/solr/cli/PackageDeploy.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageDeploy.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.pkg; import static org.apache.solr.cli.SolrCLI.printRed; diff --git a/solr/core/src/java/org/apache/solr/cli/PackageInstall.java b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageInstall.java similarity index 98% rename from solr/core/src/java/org/apache/solr/cli/PackageInstall.java rename to solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageInstall.java index b48c65f4a120..30f5686ab6e1 100644 --- a/solr/core/src/java/org/apache/solr/cli/PackageInstall.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageInstall.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.pkg; /** Supports package install command in the bin/solr script. */ @SuppressWarnings("UnnecessarilyFullyQualified") diff --git a/solr/core/src/java/org/apache/solr/cli/PackageListAvailable.java b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageListAvailable.java similarity index 97% rename from solr/core/src/java/org/apache/solr/cli/PackageListAvailable.java rename to solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageListAvailable.java index e0420ecb7d46..72bf9f98c489 100644 --- a/solr/core/src/java/org/apache/solr/cli/PackageListAvailable.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageListAvailable.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.pkg; /** Supports package list-available command in the bin/solr script. */ @SuppressWarnings("UnnecessarilyFullyQualified") diff --git a/solr/core/src/java/org/apache/solr/cli/PackageListDeployed.java b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageListDeployed.java similarity index 98% rename from solr/core/src/java/org/apache/solr/cli/PackageListDeployed.java rename to solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageListDeployed.java index 944fce6591b0..67343aea6bda 100644 --- a/solr/core/src/java/org/apache/solr/cli/PackageListDeployed.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageListDeployed.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.pkg; import static org.apache.solr.cli.SolrCLI.printRed; diff --git a/solr/core/src/java/org/apache/solr/cli/PackageListInstalled.java b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageListInstalled.java similarity index 97% rename from solr/core/src/java/org/apache/solr/cli/PackageListInstalled.java rename to solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageListInstalled.java index e1d62b26d956..036643b6265f 100644 --- a/solr/core/src/java/org/apache/solr/cli/PackageListInstalled.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageListInstalled.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.pkg; /** Supports package list-installed command in the bin/solr script. */ @SuppressWarnings("UnnecessarilyFullyQualified") diff --git a/solr/core/src/java/org/apache/solr/cli/PackageSubCommand.java b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageSubCommand.java similarity index 91% rename from solr/core/src/java/org/apache/solr/cli/PackageSubCommand.java rename to solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageSubCommand.java index 0b4b35e7e07f..8ac73d4e3f41 100644 --- a/solr/core/src/java/org/apache/solr/cli/PackageSubCommand.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageSubCommand.java @@ -15,9 +15,13 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.pkg; import org.apache.commons.cli.CommandLine; +import org.apache.solr.cli.ConnectionOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; import org.apache.solr.cli.packagemanager.PackageManager; import org.apache.solr.cli.packagemanager.RepositoryManager; diff --git a/solr/core/src/java/org/apache/solr/cli/PackageTool.java b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageTool.java similarity index 97% rename from solr/core/src/java/org/apache/solr/cli/PackageTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageTool.java index c1ef0a086d92..ba186b1db0d7 100644 --- a/solr/core/src/java/org/apache/solr/cli/PackageTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageTool.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.pkg; import static org.apache.solr.cli.SolrCLI.printGreen; import static org.apache.solr.cli.SolrCLI.printRed; @@ -33,6 +33,14 @@ import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.config.Configurator; import org.apache.lucene.util.SuppressForbidden; +import org.apache.solr.cli.CLIO; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.ConnectionOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; import org.apache.solr.cli.packagemanager.PackageManager; import org.apache.solr.cli.packagemanager.PackageUtils; import org.apache.solr.cli.packagemanager.RepositoryManager; @@ -143,7 +151,7 @@ record PackageFlags( @picocli.CommandLine.ArgGroup(exclusive = true, multiplicity = "0..1") ConnectionOptions connectionOptions; - @picocli.CommandLine.Mixin CredentialsOptions credentialsOptions; + @picocli.CommandLine.Mixin public CredentialsOptions credentialsOptions; @picocli.CommandLine.Spec private picocli.CommandLine.Model.CommandSpec spec; diff --git a/solr/core/src/java/org/apache/solr/cli/PackageUndeploy.java b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageUndeploy.java similarity index 98% rename from solr/core/src/java/org/apache/solr/cli/PackageUndeploy.java rename to solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageUndeploy.java index d38da3404070..45ae2d81a929 100644 --- a/solr/core/src/java/org/apache/solr/cli/PackageUndeploy.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageUndeploy.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.pkg; import static org.apache.solr.cli.SolrCLI.printRed; diff --git a/solr/core/src/java/org/apache/solr/cli/PackageUninstall.java b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageUninstall.java similarity index 98% rename from solr/core/src/java/org/apache/solr/cli/PackageUninstall.java rename to solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageUninstall.java index 0171ec552b38..97ad7fce4183 100644 --- a/solr/core/src/java/org/apache/solr/cli/PackageUninstall.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/pkg/PackageUninstall.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.pkg; /** Supports package uninstall command in the bin/solr script. */ @SuppressWarnings("UnnecessarilyFullyQualified") diff --git a/solr/core/src/java/org/apache/solr/cli/tools/pkg/package-info.java b/solr/core/src/java/org/apache/solr/cli/tools/pkg/package-info.java new file mode 100644 index 000000000000..4a37b3c333d8 --- /dev/null +++ b/solr/core/src/java/org/apache/solr/cli/tools/pkg/package-info.java @@ -0,0 +1,19 @@ +/* + * 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. + */ + +/** CLI tools for package operations. */ +package org.apache.solr.cli.tools.pkg; diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotCreateShim.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotCreateShim.java similarity index 97% rename from solr/core/src/java/org/apache/solr/cli/SnapshotCreateShim.java rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotCreateShim.java index 22b55a6da091..01e7a55ce2d8 100644 --- a/solr/core/src/java/org/apache/solr/cli/SnapshotCreateShim.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotCreateShim.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.snapshot; import org.apache.solr.logging.DeprecationLog; diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotCreateTool.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotCreateTool.java similarity index 93% rename from solr/core/src/java/org/apache/solr/cli/SnapshotCreateTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotCreateTool.java index 5066f75f3bbd..c0bd9828137c 100644 --- a/solr/core/src/java/org/apache/solr/cli/SnapshotCreateTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotCreateTool.java @@ -14,11 +14,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.snapshot; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CollectionNameOptions; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.ConnectionOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.request.CollectionAdminRequest; import org.apache.solr.client.solrj.response.CollectionAdminResponse; diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotDeleteShim.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDeleteShim.java similarity index 97% rename from solr/core/src/java/org/apache/solr/cli/SnapshotDeleteShim.java rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDeleteShim.java index 9834a17d6681..16e2c8faf6df 100644 --- a/solr/core/src/java/org/apache/solr/cli/SnapshotDeleteShim.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDeleteShim.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.snapshot; import org.apache.solr.logging.DeprecationLog; diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotDeleteTool.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDeleteTool.java similarity index 93% rename from solr/core/src/java/org/apache/solr/cli/SnapshotDeleteTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDeleteTool.java index 399796c9835e..046bf709e94b 100644 --- a/solr/core/src/java/org/apache/solr/cli/SnapshotDeleteTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDeleteTool.java @@ -14,11 +14,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.snapshot; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CollectionNameOptions; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.ConnectionOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.request.CollectionAdminRequest; import org.apache.solr.client.solrj.response.CollectionAdminResponse; diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotDescribeShim.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDescribeShim.java similarity index 97% rename from solr/core/src/java/org/apache/solr/cli/SnapshotDescribeShim.java rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDescribeShim.java index 8426c8754849..7fe2d1d6733e 100644 --- a/solr/core/src/java/org/apache/solr/cli/SnapshotDescribeShim.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDescribeShim.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.snapshot; import org.apache.solr.logging.DeprecationLog; diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotDescribeTool.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDescribeTool.java similarity index 94% rename from solr/core/src/java/org/apache/solr/cli/SnapshotDescribeTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDescribeTool.java index 9793903ccfc9..6dab21a2f4d2 100644 --- a/solr/core/src/java/org/apache/solr/cli/SnapshotDescribeTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotDescribeTool.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.snapshot; import java.io.IOException; import java.text.DateFormat; @@ -25,6 +25,14 @@ import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CollectionNameOptions; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.ConnectionOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.request.CollectionAdminRequest; diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotExportShim.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotExportShim.java similarity index 97% rename from solr/core/src/java/org/apache/solr/cli/SnapshotExportShim.java rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotExportShim.java index 4cb77cf05f24..451cc522f443 100644 --- a/solr/core/src/java/org/apache/solr/cli/SnapshotExportShim.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotExportShim.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.snapshot; import org.apache.solr.logging.DeprecationLog; diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotExportTool.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotExportTool.java similarity index 96% rename from solr/core/src/java/org/apache/solr/cli/SnapshotExportTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotExportTool.java index 06b8017c1ed3..8ed9c29ff2a0 100644 --- a/solr/core/src/java/org/apache/solr/cli/SnapshotExportTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotExportTool.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.snapshot; import java.time.Instant; import java.time.ZoneOffset; @@ -23,6 +23,14 @@ import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CollectionNameOptions; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.ConnectionOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.request.CollectionAdminRequest; import org.apache.solr.common.params.CollectionAdminParams; diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotListShim.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotListShim.java similarity index 97% rename from solr/core/src/java/org/apache/solr/cli/SnapshotListShim.java rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotListShim.java index 4085ead8ff05..f42b45dd2745 100644 --- a/solr/core/src/java/org/apache/solr/cli/SnapshotListShim.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotListShim.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.snapshot; import org.apache.solr.logging.DeprecationLog; diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotListTool.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotListTool.java similarity index 92% rename from solr/core/src/java/org/apache/solr/cli/SnapshotListTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotListTool.java index 4649215b53ef..fda9643bee7c 100644 --- a/solr/core/src/java/org/apache/solr/cli/SnapshotListTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotListTool.java @@ -14,11 +14,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.snapshot; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CollectionNameOptions; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.ConnectionOptions; +import org.apache.solr.cli.CredentialsOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.request.CollectionAdminRequest; import org.apache.solr.client.solrj.response.CollectionAdminResponse; diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotNameOptions.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotNameOptions.java similarity index 96% rename from solr/core/src/java/org/apache/solr/cli/SnapshotNameOptions.java rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotNameOptions.java index c4a95de99767..eafe917d97c8 100644 --- a/solr/core/src/java/org/apache/solr/cli/SnapshotNameOptions.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotNameOptions.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.snapshot; import picocli.CommandLine; diff --git a/solr/core/src/java/org/apache/solr/cli/SnapshotTool.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotTool.java similarity index 93% rename from solr/core/src/java/org/apache/solr/cli/SnapshotTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotTool.java index 6c7aba2e33af..3590d5cff627 100644 --- a/solr/core/src/java/org/apache/solr/cli/SnapshotTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/SnapshotTool.java @@ -14,9 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.snapshot; import java.util.concurrent.Callable; +import org.apache.solr.cli.CLIO; +import org.apache.solr.cli.HelpMixin; import picocli.CommandLine; /** diff --git a/solr/core/src/java/org/apache/solr/cli/tools/snapshot/package-info.java b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/package-info.java new file mode 100644 index 000000000000..81e12093e466 --- /dev/null +++ b/solr/core/src/java/org/apache/solr/cli/tools/snapshot/package-info.java @@ -0,0 +1,19 @@ +/* + * 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. + */ + +/** CLI tools for managing Solr collection snapshots. */ +package org.apache.solr.cli.tools.snapshot; diff --git a/solr/core/src/java/org/apache/solr/cli/ConfigSetDownloadTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ConfigSetDownloadTool.java similarity index 95% rename from solr/core/src/java/org/apache/solr/cli/ConfigSetDownloadTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ConfigSetDownloadTool.java index 33d7727f6e2f..f7901c49fdd7 100644 --- a/solr/core/src/java/org/apache/solr/cli/ConfigSetDownloadTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ConfigSetDownloadTool.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.zk; import java.lang.invoke.MethodHandles; import java.nio.file.Files; @@ -23,6 +23,12 @@ import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.ConfigSetOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; import org.apache.solr.client.solrj.impl.SolrZkClientTimeout; import org.apache.solr.common.cloud.SolrZkClient; import org.slf4j.Logger; diff --git a/solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ConfigSetUploadTool.java similarity index 89% rename from solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ConfigSetUploadTool.java index 20cf3b5820e5..5f64349bbcf9 100644 --- a/solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java +++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ConfigSetUploadTool.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.solr.cli; +package org.apache.solr.cli.tools.zk; import java.lang.invoke.MethodHandles; import java.nio.file.Path; @@ -22,6 +22,12 @@ import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; +import org.apache.solr.cli.CLIUtils; +import org.apache.solr.cli.CommonCLIOptions; +import org.apache.solr.cli.ConfigSetOptions; +import org.apache.solr.cli.DefaultToolRuntime; +import org.apache.solr.cli.ToolBase; +import org.apache.solr.cli.ToolRuntime; import org.apache.solr.client.solrj.impl.SolrZkClientTimeout; import org.apache.solr.common.cloud.SolrZkClient; import org.apache.solr.common.cloud.ZkMaintenanceUtils; @@ -34,10 +40,11 @@ /** * Supports zk upconfig command in the bin/solr script. * - *
Unlike {@link CreateTool}, this uploads directly to ZooKeeper rather than going through the - * Configsets V2 API. That's intentional: this command is meant to work against a bare ZooKeeper - * ensemble with no Solr node running yet (e.g. provisioning configs before the cluster starts), and - * the V2 API requires an HTTP endpoint on an already-running node to PUT the zip to. + *
Unlike {@link org.apache.solr.cli.tools.CreateTool}, this uploads directly to ZooKeeper rather
+ * than going through the Configsets V2 API. That's intentional: this command is meant to work
+ * against a bare ZooKeeper ensemble with no Solr node running yet (e.g. provisioning configs before
+ * the cluster starts), and the V2 API requires an HTTP endpoint on an already-running node to PUT
+ * the zip to.
*/
@SuppressWarnings("UnnecessarilyFullyQualified")
@picocli.CommandLine.Command(
diff --git a/solr/core/src/java/org/apache/solr/cli/UpdateACLTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/UpdateACLTool.java
similarity index 94%
rename from solr/core/src/java/org/apache/solr/cli/UpdateACLTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/UpdateACLTool.java
index 4a1e6cf331d6..aa159120db8b 100644
--- a/solr/core/src/java/org/apache/solr/cli/UpdateACLTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/UpdateACLTool.java
@@ -15,11 +15,16 @@
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import java.util.concurrent.TimeUnit;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.DefaultToolRuntime;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.cloud.ZkController;
import org.apache.solr.common.cloud.SolrZkClient;
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkConnectionOptions.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkConnectionOptions.java
similarity index 95%
rename from solr/core/src/java/org/apache/solr/cli/ZkConnectionOptions.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ZkConnectionOptions.java
index c83a58ade0b6..ec5811f468d4 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkConnectionOptions.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkConnectionOptions.java
@@ -14,9 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import java.util.Map;
+import org.apache.solr.cli.CLIO;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.tools.cluster.StatusTool;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import picocli.CommandLine;
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkCpTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkCpTool.java
similarity index 97%
rename from solr/core/src/java/org/apache/solr/cli/ZkCpTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ZkCpTool.java
index 0798a168245f..c70b314f3fd8 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkCpTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkCpTool.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import static org.apache.solr.cli.packagemanager.PackageUtils.format;
@@ -27,6 +27,12 @@
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.DefaultToolRuntime;
+import org.apache.solr.cli.RecursiveOption;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.cloud.SolrZkClient;
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkLsTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkLsTool.java
similarity index 93%
rename from solr/core/src/java/org/apache/solr/cli/ZkLsTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ZkLsTool.java
index ae87c1173d92..300834e1b871 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkLsTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkLsTool.java
@@ -14,11 +14,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import java.lang.invoke.MethodHandles;
import java.util.concurrent.TimeUnit;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.DefaultToolRuntime;
+import org.apache.solr.cli.RecursiveOption;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.common.cloud.SolrZkClient;
import org.slf4j.Logger;
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkMkrootTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkMkrootTool.java
similarity index 95%
rename from solr/core/src/java/org/apache/solr/cli/ZkMkrootTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ZkMkrootTool.java
index 317bd7965b4d..adef050212db 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkMkrootTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkMkrootTool.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import static org.apache.solr.cli.packagemanager.PackageUtils.format;
@@ -23,6 +23,11 @@
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.DefaultToolRuntime;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.common.cloud.SolrZkClient;
import org.slf4j.Logger;
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkMvTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkMvTool.java
similarity index 95%
rename from solr/core/src/java/org/apache/solr/cli/ZkMvTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ZkMvTool.java
index 08eea82044c4..adbaa371ef3e 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkMvTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkMvTool.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import static org.apache.solr.cli.packagemanager.PackageUtils.format;
@@ -23,6 +23,11 @@
import java.util.concurrent.TimeUnit;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.DefaultToolRuntime;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.common.cloud.SolrZkClient;
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkRmTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkRmTool.java
similarity index 94%
rename from solr/core/src/java/org/apache/solr/cli/ZkRmTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ZkRmTool.java
index c657d456bc50..e0a8648b78ec 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkRmTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkRmTool.java
@@ -14,13 +14,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import java.lang.invoke.MethodHandles;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.CLIUtils;
+import org.apache.solr.cli.CommonCLIOptions;
+import org.apache.solr.cli.DefaultToolRuntime;
+import org.apache.solr.cli.RecursiveOption;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.common.cloud.SolrZkClient;
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkTool.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkTool.java
similarity index 93%
rename from solr/core/src/java/org/apache/solr/cli/ZkTool.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ZkTool.java
index bed1805853ca..f0b40a976897 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkTool.java
@@ -14,9 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import java.util.concurrent.Callable;
+import org.apache.solr.cli.CLIO;
+import org.apache.solr.cli.HelpMixin;
import picocli.CommandLine;
/**
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkToolHelp.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkToolHelp.java
similarity index 96%
rename from solr/core/src/java/org/apache/solr/cli/ZkToolHelp.java
rename to solr/core/src/java/org/apache/solr/cli/tools/zk/ZkToolHelp.java
index 8217702f511f..4ce2acff56bd 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkToolHelp.java
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/ZkToolHelp.java
@@ -14,13 +14,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.tools.zk;
import static org.apache.solr.cli.SolrCLI.print;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.solr.cli.ToolBase;
+import org.apache.solr.cli.ToolRuntime;
/** Supports zk help information in the bin/solr script. */
public class ZkToolHelp extends ToolBase {
diff --git a/solr/core/src/java/org/apache/solr/cli/tools/zk/package-info.java b/solr/core/src/java/org/apache/solr/cli/tools/zk/package-info.java
new file mode 100644
index 000000000000..3ff4b2606230
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/cli/tools/zk/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * 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.
+ */
+
+/** CLI tools for ZooKeeper and config set operations. */
+package org.apache.solr.cli.tools.zk;
diff --git a/solr/core/src/test/org/apache/solr/cli/SolrCloudExampleTest.java b/solr/core/src/test/org/apache/solr/cli/SolrCloudExampleTest.java
index a9b680c207f9..ef88644f35dd 100644
--- a/solr/core/src/test/org/apache/solr/cli/SolrCloudExampleTest.java
+++ b/solr/core/src/test/org/apache/solr/cli/SolrCloudExampleTest.java
@@ -23,6 +23,10 @@
import java.util.concurrent.TimeUnit;
import org.apache.commons.cli.CommandLine;
import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.cli.tools.CreateTool;
+import org.apache.solr.cli.tools.DeleteTool;
+import org.apache.solr.cli.tools.PostTool;
+import org.apache.solr.cli.tools.cluster.HealthcheckTool;
import org.apache.solr.client.solrj.request.SolrQuery;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.cloud.AbstractFullDistribZkTestBase;
diff --git a/solr/core/src/test/org/apache/solr/cli/TestSolrCLIRunExample.java b/solr/core/src/test/org/apache/solr/cli/TestSolrCLIRunExample.java
index b9957e993cc1..d924444e95cf 100644
--- a/solr/core/src/test/org/apache/solr/cli/TestSolrCLIRunExample.java
+++ b/solr/core/src/test/org/apache/solr/cli/TestSolrCLIRunExample.java
@@ -37,6 +37,8 @@
import org.apache.commons.exec.ExecuteResultHandler;
import org.apache.lucene.tests.util.LuceneTestCase;
import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.cli.tools.DeleteTool;
+import org.apache.solr.cli.tools.RunExampleTool;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.jetty.HttpJettySolrClient;
diff --git a/solr/core/src/test/org/apache/solr/cli/SolrProcessManagerTest.java b/solr/core/src/test/org/apache/solr/cli/process/SolrProcessManagerTest.java
similarity index 97%
rename from solr/core/src/test/org/apache/solr/cli/SolrProcessManagerTest.java
rename to solr/core/src/test/org/apache/solr/cli/process/SolrProcessManagerTest.java
index e31ccb3381ec..48ac8f8d63d4 100644
--- a/solr/core/src/test/org/apache/solr/cli/SolrProcessManagerTest.java
+++ b/solr/core/src/test/org/apache/solr/cli/process/SolrProcessManagerTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.solr.cli;
+package org.apache.solr.cli.process;
import java.io.BufferedReader;
import java.io.IOException;
@@ -30,7 +30,7 @@
import java.util.stream.Collectors;
import org.apache.commons.math3.util.Pair;
import org.apache.solr.SolrTestCase;
-import org.apache.solr.cli.SolrProcessManager.SolrProcess;
+import org.apache.solr.cli.process.SolrProcessManager.SolrProcess;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.slf4j.Logger;
@@ -95,7 +95,7 @@ private static Pair