You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by kr...@apache.org on 2022/10/20 19:55:45 UTC
[solr] branch main updated: Refactor duplicate CLI options (#791)
This is an automated email from the ASF dual-hosted git repository.
krisden 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 645dd9b132a Refactor duplicate CLI options (#791)
645dd9b132a is described below
commit 645dd9b132a0927c80296ba1de10c1018538aee5
Author: Mike Drob <md...@apache.org>
AuthorDate: Thu Oct 20 14:55:40 2022 -0500
Refactor duplicate CLI options (#791)
---
.../src/java/org/apache/solr/util/SolrCLI.java | 323 ++++++++-------------
1 file changed, 114 insertions(+), 209 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/util/SolrCLI.java b/solr/core/src/java/org/apache/solr/util/SolrCLI.java
index 15dc4fe1253..c4a29717c66 100755
--- a/solr/core/src/java/org/apache/solr/util/SolrCLI.java
+++ b/solr/core/src/java/org/apache/solr/util/SolrCLI.java
@@ -152,7 +152,7 @@ public class SolrCLI implements CLIO {
}
protected void echoIfVerbose(final String msg, CommandLine cli) {
- if (cli.hasOption("verbose")) {
+ if (cli.hasOption(OPTION_VERBOSE.getOpt())) {
echo(msg);
}
}
@@ -162,7 +162,7 @@ public class SolrCLI implements CLIO {
}
public int runTool(CommandLine cli) throws Exception {
- verbose = cli.hasOption("verbose");
+ verbose = cli.hasOption(OPTION_VERBOSE.getOpt());
int toolExitStatus = 0;
try {
@@ -201,7 +201,7 @@ public class SolrCLI implements CLIO {
protected void runImpl(CommandLine cli) throws Exception {
raiseLogLevelUnlessVerbose(cli);
- String zkHost = cli.getOptionValue("zkHost", ZK_HOST);
+ String zkHost = cli.getOptionValue(OPTION_ZKHOST.getOpt(), ZK_HOST);
log.debug("Connecting to Solr cluster: {}", zkHost);
try (var cloudSolrClient =
@@ -225,14 +225,38 @@ public class SolrCLI implements CLIO {
public static final String DEFAULT_SOLR_URL = "http://localhost:8983/solr";
public static final String ZK_HOST = "localhost:9983";
- public static Option[] cloudOptions =
+ public static final Option OPTION_ZKHOST =
+ Option.builder("z")
+ .argName("HOST")
+ .hasArg()
+ .required(false)
+ .desc("Address of the ZooKeeper ensemble; defaults to: " + ZK_HOST)
+ .longOpt("zkHost")
+ .build();
+ public static final Option OPTION_SOLRURL =
+ Option.builder("solrUrl")
+ .argName("HOST")
+ .hasArg()
+ .required(false)
+ .desc(
+ "Base Solr URL, which can be used to determine the zkHost if that's not known; defaults to: "
+ + DEFAULT_SOLR_URL)
+ .build();
+ public static final Option OPTION_VERBOSE =
+ Option.builder("verbose").required(false).desc("Enable more verbose command output.").build();
+
+ public static final Option OPTION_RECURSE =
+ Option.builder("recurse")
+ .argName("recurse")
+ .hasArg()
+ .required(false)
+ .desc("Recurse (true|false), default is false.")
+ // .type(Boolean.class)
+ .build();
+
+ public static final Option[] cloudOptions =
new Option[] {
- Option.builder("zkHost")
- .argName("HOST")
- .hasArg()
- .required(false)
- .desc("Address of the ZooKeeper ensemble; defaults to: " + ZK_HOST + '.')
- .build(),
+ OPTION_ZKHOST,
Option.builder("c")
.argName("COLLECTION")
.hasArg()
@@ -240,10 +264,7 @@ public class SolrCLI implements CLIO {
.desc("Name of collection; no default.")
.longOpt("collection")
.build(),
- Option.builder("verbose")
- .required(false)
- .desc("Enable more verbose command output.")
- .build()
+ OPTION_VERBOSE
};
private static void exit(int exitStatus) {
@@ -300,8 +321,8 @@ public class SolrCLI implements CLIO {
public static CommandLine parseCmdLine(String toolName, String[] args, Option[] toolOptions)
throws Exception {
// the parser doesn't like -D props
- List<String> toolArgList = new ArrayList<String>();
- List<String> dashDList = new ArrayList<String>();
+ List<String> toolArgList = new ArrayList<>();
+ List<String> dashDList = new ArrayList<>();
for (int a = 1; a < args.length; a++) {
String arg = args[a];
if (arg.startsWith("-D")) {
@@ -353,7 +374,7 @@ public class SolrCLI implements CLIO {
}
private static void raiseLogLevelUnlessVerbose(CommandLine cli) {
- if (!cli.hasOption("verbose")) {
+ if (!cli.hasOption(OPTION_VERBOSE.getOpt())) {
StartupLoggingUtils.changeLogLevel("WARN");
}
}
@@ -427,7 +448,7 @@ public class SolrCLI implements CLIO {
private static Options getToolOptions(Tool tool) {
Options options = new Options();
options.addOption("help", false, "Print this message");
- options.addOption("verbose", false, "Generate verbose log messages");
+ options.addOption(OPTION_VERBOSE);
Option[] toolOpts = joinCommonAndToolOptions(tool.getOptions());
for (int i = 0; i < toolOpts.length; i++) options.addOption(toolOpts[i]);
return options;
@@ -438,16 +459,19 @@ public class SolrCLI implements CLIO {
}
public static Option[] joinOptions(Option[] lhs, Option[] rhs) {
- List<Option> options = new ArrayList<Option>();
- if (lhs != null && lhs.length > 0) {
- for (Option opt : lhs) options.add(opt);
+ if (lhs == null) {
+ return rhs == null ? new Option[0] : rhs;
}
- if (rhs != null) {
- for (Option opt : rhs) options.add(opt);
+ if (rhs == null) {
+ return lhs;
}
- return options.toArray(new Option[0]);
+ Option[] options = new Option[lhs.length + rhs.length];
+ System.arraycopy(lhs, 0, options, 0, lhs.length);
+ System.arraycopy(rhs, 0, options, lhs.length, rhs.length);
+
+ return options;
}
/**
@@ -464,7 +488,7 @@ public class SolrCLI implements CLIO {
Options options = new Options();
options.addOption("help", false, "Print this message");
- options.addOption("verbose", false, "Generate verbose log messages");
+ options.addOption(OPTION_VERBOSE);
if (customOptions != null) {
for (int i = 0; i < customOptions.length; i++) options.addOption(customOptions[i]);
@@ -507,7 +531,7 @@ public class SolrCLI implements CLIO {
ClassLoader classLoader = SolrCLI.class.getClassLoader();
String path = packageName.replace('.', '/');
Enumeration<URL> resources = classLoader.getResources(path);
- Set<String> classes = new TreeSet<String>();
+ Set<String> classes = new TreeSet<>();
while (resources.hasMoreElements()) {
URL resource = resources.nextElement();
classes.addAll(findClasses(resource.getFile(), packageName));
@@ -525,7 +549,7 @@ public class SolrCLI implements CLIO {
}
private static Set<String> findClasses(String path, String packageName) throws Exception {
- Set<String> classes = new TreeSet<String>();
+ Set<String> classes = new TreeSet<>();
if (path.startsWith("file:") && path.contains("!")) {
String[] split = path.split("!");
URL jar = new URL(split[0]);
@@ -685,7 +709,7 @@ public class SolrCLI implements CLIO {
+ respBody
+ "\nTypically, this indicates a problem with the Solr server; check the Solr server logs for more information.");
}
- if (resp != null && resp instanceof Map) {
+ if (resp instanceof Map) {
return (Map<String, Object>) resp;
} else {
throw new ClientProtocolException(
@@ -953,7 +977,7 @@ public class SolrCLI implements CLIO {
public Map<String, Object> reportStatus(
String solrUrl, Map<String, Object> info, HttpClient httpClient) throws Exception {
- Map<String, Object> status = new LinkedHashMap<String, Object>();
+ Map<String, Object> status = new LinkedHashMap<>();
String solrHome = (String) info.get("solr_home");
status.put("solr_home", solrHome != null ? solrHome : "?");
@@ -980,7 +1004,7 @@ public class SolrCLI implements CLIO {
*/
protected Map<String, String> getCloudStatus(
HttpClient httpClient, String solrUrl, String zkHost) throws Exception {
- Map<String, String> cloudStatus = new LinkedHashMap<String, String>();
+ Map<String, String> cloudStatus = new LinkedHashMap<>();
cloudStatus.put("ZooKeeper", (zkHost != null) ? zkHost : "?");
String clusterStatusUrl = solrUrl + "admin/collections?action=CLUSTERSTATUS";
@@ -1091,7 +1115,7 @@ public class SolrCLI implements CLIO {
}
public Map<String, Object> asMap() {
- Map<String, Object> map = new LinkedHashMap<String, Object>();
+ Map<String, Object> map = new LinkedHashMap<>();
map.put(NAME, name);
map.put("url", url);
map.put("numDocs", numDocs);
@@ -1137,7 +1161,7 @@ public class SolrCLI implements CLIO {
}
}
- static enum ShardState {
+ enum ShardState {
healthy,
degraded,
down,
@@ -1178,7 +1202,7 @@ public class SolrCLI implements CLIO {
Map<String, Object> map = new LinkedHashMap<>();
map.put("shard", shard);
map.put("status", getShardState().toString());
- List<Object> replicaList = new ArrayList<Object>();
+ List<Object> replicaList = new ArrayList<>();
for (ReplicaHealth replica : replicas) replicaList.add(replica.asMap());
map.put("replicas", replicaList);
return map;
@@ -1256,7 +1280,7 @@ public class SolrCLI implements CLIO {
log.warn("Failed to get leader for shard {} due to: {}", shardName, exc);
}
- List<ReplicaHealth> replicaList = new ArrayList<ReplicaHealth>();
+ List<ReplicaHealth> replicaList = new ArrayList<>();
for (Replica r : slice.getReplicas()) {
String uptime = null;
@@ -1324,7 +1348,7 @@ public class SolrCLI implements CLIO {
shardList.add(shardHealth.asMap());
}
- Map<String, Object> report = new LinkedHashMap<String, Object>();
+ Map<String, Object> report = new LinkedHashMap<>();
report.put("collection", collection);
report.put("status", collectionIsHealthy ? "healthy" : "degraded");
if (collErr != null) {
@@ -1342,18 +1366,8 @@ public class SolrCLI implements CLIO {
private static final Option[] CREATE_COLLECTION_OPTIONS =
new Option[] {
- Option.builder("zkHost")
- .argName("HOST")
- .hasArg()
- .required(false)
- .desc("Address of the ZooKeeper ensemble; defaults to: " + ZK_HOST + '.')
- .build(),
- Option.builder("solrUrl")
- .argName("HOST")
- .hasArg()
- .required(false)
- .desc("Base Solr URL, which can be used to determine the zkHost if that's not known.")
- .build(),
+ OPTION_ZKHOST,
+ OPTION_SOLRURL,
Option.builder(NAME)
.argName("NAME")
.hasArg()
@@ -1394,10 +1408,7 @@ public class SolrCLI implements CLIO {
.required(true)
.desc("Path to configsets directory on the local system.")
.build(),
- Option.builder("verbose")
- .required(false)
- .desc("Enable more verbose command output.")
- .build()
+ OPTION_VERBOSE
};
/**
@@ -1646,7 +1657,7 @@ public class SolrCLI implements CLIO {
"Failed to create collection '" + collectionName + "' due to: " + sse.getMessage());
}
- if (cli.hasOption("verbose")) {
+ if (cli.hasOption(OPTION_VERBOSE.getOpt())) {
CharArr arr = new CharArr();
new JSONWriter(arr, 2).write(json);
echo(arr.toString());
@@ -1687,12 +1698,7 @@ public class SolrCLI implements CLIO {
public Option[] getOptions() {
return new Option[] {
- Option.builder("solrUrl")
- .argName("URL")
- .hasArg()
- .required(false)
- .desc("Base Solr URL, default is " + DEFAULT_SOLR_URL + '.')
- .build(),
+ OPTION_SOLRURL,
Option.builder(NAME)
.argName("NAME")
.hasArg()
@@ -1714,10 +1720,7 @@ public class SolrCLI implements CLIO {
.required(true)
.desc("Path to configsets directory on the local system.")
.build(),
- Option.builder("verbose")
- .required(false)
- .desc("Enable more verbose command output.")
- .build()
+ OPTION_VERBOSE
};
}
@@ -1822,7 +1825,7 @@ public class SolrCLI implements CLIO {
try {
Map<String, Object> json = getJson(createCoreUrl);
- if (cli.hasOption("verbose")) {
+ if (cli.hasOption(OPTION_VERBOSE.getOpt())) {
CharArr arr = new CharArr();
new JSONWriter(arr, 2).write(json);
echo(arr.toString());
@@ -1909,16 +1912,8 @@ public class SolrCLI implements CLIO {
.required(false)
.desc("Parent directory of example configsets.")
.build(),
- Option.builder("zkHost")
- .argName("HOST")
- .hasArg()
- .required(true)
- .desc("Address of the ZooKeeper ensemble; defaults to: " + ZK_HOST + '.')
- .build(),
- Option.builder("verbose")
- .required(false)
- .desc("Enable more verbose command output.")
- .build()
+ OPTION_ZKHOST,
+ OPTION_VERBOSE
};
}
@@ -1987,16 +1982,8 @@ public class SolrCLI implements CLIO {
.required(true)
.desc("Local directory with configs.")
.build(),
- Option.builder("zkHost")
- .argName("HOST")
- .hasArg()
- .required(true)
- .desc("Address of the ZooKeeper ensemble; defaults to: " + ZK_HOST + '.')
- .build(),
- Option.builder("verbose")
- .required(false)
- .desc("Enable more verbose command output.")
- .build()
+ OPTION_ZKHOST,
+ OPTION_VERBOSE
};
}
@@ -2059,22 +2046,9 @@ public class SolrCLI implements CLIO {
.required(true)
.desc("Path to remove.")
.build(),
- Option.builder("recurse")
- .argName("recurse")
- .hasArg()
- .required(false)
- .desc("Recurse (true|false), default is false.")
- .build(),
- Option.builder("zkHost")
- .argName("HOST")
- .hasArg()
- .required(true)
- .desc("Address of the ZooKeeper ensemble; defaults to: " + ZK_HOST + '.')
- .build(),
- Option.builder("verbose")
- .required(false)
- .desc("Enable more verbose command output.")
- .build()
+ OPTION_RECURSE,
+ OPTION_ZKHOST,
+ OPTION_VERBOSE
};
}
@@ -2141,22 +2115,9 @@ public class SolrCLI implements CLIO {
.required(true)
.desc("Path to list.")
.build(),
- Option.builder("recurse")
- .argName("recurse")
- .hasArg()
- .required(false)
- .desc("Recurse (true|false), default is false.")
- .build(),
- Option.builder("zkHost")
- .argName("HOST")
- .hasArg()
- .required(true)
- .desc("Address of the ZooKeeper ensemble; defaults to: " + ZK_HOST + '.')
- .build(),
- Option.builder("verbose")
- .required(false)
- .desc("Enable more verbose command output.")
- .build()
+ OPTION_RECURSE,
+ OPTION_ZKHOST,
+ OPTION_VERBOSE
};
}
@@ -2214,16 +2175,8 @@ public class SolrCLI implements CLIO {
.required(true)
.desc("Path to create.")
.build(),
- Option.builder("zkHost")
- .argName("HOST")
- .hasArg()
- .required(true)
- .desc("Address of the ZooKeeper ensemble; defaults to: " + ZK_HOST + '.')
- .build(),
- Option.builder("verbose")
- .required(false)
- .desc("Enable more verbose command output.")
- .build()
+ OPTION_ZKHOST,
+ OPTION_VERBOSE
};
}
@@ -2279,22 +2232,9 @@ public class SolrCLI implements CLIO {
.required(true)
.desc("Destination of copy, may be local or a Znode.")
.build(),
- Option.builder("recurse")
- .argName("recurse")
- .hasArg()
- .required(false)
- .desc("Recurse (true|false), default is false.")
- .build(),
- Option.builder("zkHost")
- .argName("HOST")
- .hasArg()
- .required(true)
- .desc("Address of the ZooKeeper ensemble; defaults to: " + ZK_HOST + '.')
- .build(),
- Option.builder("verbose")
- .required(false)
- .desc("Enable more verbose command output.")
- .build()
+ OPTION_RECURSE,
+ OPTION_ZKHOST,
+ OPTION_VERBOSE
};
}
@@ -2369,16 +2309,8 @@ public class SolrCLI implements CLIO {
.required(true)
.desc("Destination Znode to move to.")
.build(),
- Option.builder("zkHost")
- .argName("HOST")
- .hasArg()
- .required(true)
- .desc("Address of the ZooKeeper ensemble; defaults to: " + ZK_HOST + '.')
- .build(),
- Option.builder("verbose")
- .required(false)
- .desc("Enable more verbose command output.")
- .build()
+ OPTION_ZKHOST,
+ OPTION_VERBOSE
};
}
@@ -2441,12 +2373,7 @@ public class SolrCLI implements CLIO {
public Option[] getOptions() {
return new Option[] {
- Option.builder("solrUrl")
- .argName("URL")
- .hasArg()
- .required(false)
- .desc("Base Solr URL, default is " + DEFAULT_SOLR_URL + '.')
- .build(),
+ OPTION_SOLRURL,
Option.builder(NAME)
.argName("NAME")
.hasArg()
@@ -2465,16 +2392,8 @@ public class SolrCLI implements CLIO {
.desc(
"Skip safety checks when deleting the configuration directory used by a collection.")
.build(),
- Option.builder("zkHost")
- .argName("HOST")
- .hasArg()
- .required(false)
- .desc("Address of the ZooKeeper ensemble; defaults to: " + ZK_HOST + '.')
- .build(),
- Option.builder("verbose")
- .required(false)
- .desc("Enable more verbose command output.")
- .build()
+ OPTION_ZKHOST,
+ OPTION_VERBOSE
};
}
@@ -2547,19 +2466,21 @@ public class SolrCLI implements CLIO {
configName);
}
- for (String next : collections) {
- if (collectionName.equals(next)) continue; // don't check the collection we're deleting
-
- if (configName.equals(
- zkStateReader.getClusterState().getCollection(next).getConfigName())) {
- deleteConfig = false;
- log.warn(
- "Configuration directory {} is also being used by {}{}",
- configName,
- next,
- "; configuration will not be deleted from ZooKeeper. You can pass the -forceDeleteConfig flag to force delete.");
- break;
- }
+ Optional<String> inUse =
+ collections.stream()
+ .filter(name -> !name.equals(collectionName)) // ignore this collection
+ .filter(
+ name ->
+ configName.equals(
+ zkStateReader.getClusterState().getCollection(name).getConfigName()))
+ .findFirst();
+ if (inUse.isPresent()) {
+ deleteConfig = false;
+ log.warn(
+ "Configuration directory {} is also being used by {}{}",
+ configName,
+ inUse.get(),
+ "; configuration will not be deleted from ZooKeeper. You can pass the -forceDeleteConfig flag to force delete.");
}
}
}
@@ -2675,20 +2596,8 @@ public class SolrCLI implements CLIO {
.required(false)
.desc("Set the property to this value; accepts JSON objects and strings.")
.build(),
- Option.builder("solrUrl")
- .argName("HOST")
- .hasArg()
- .required(false)
- .desc(
- "Base Solr URL, which can be used to determine the zkHost if that's not known.")
- .build(),
- Option.builder("z")
- .argName("HOST")
- .hasArg()
- .required(false)
- .desc("Address of the ZooKeeper ensemble.")
- .longOpt("zkHost")
- .build(),
+ OPTION_SOLRURL,
+ OPTION_ZKHOST,
Option.builder("p")
.argName("PORT")
.hasArg()
@@ -2924,15 +2833,14 @@ public class SolrCLI implements CLIO {
+ exampleDir.getAbsolutePath()
+ " is not a directory!");
- if (verbose) {
- echo(
- "Running with\nserverDir="
- + serverDir.getAbsolutePath()
- + ",\nexampleDir="
- + exampleDir.getAbsolutePath()
- + "\nscript="
- + script);
- }
+ echoIfVerbose(
+ "Running with\nserverDir="
+ + serverDir.getAbsolutePath()
+ + ",\nexampleDir="
+ + exampleDir.getAbsolutePath()
+ + "\nscript="
+ + script,
+ cli);
String exampleType = cli.getOptionValue("example");
if ("cloud".equals(exampleType)) {
@@ -3161,7 +3069,7 @@ public class SolrCLI implements CLIO {
}
cloudPorts[n] = port;
- if (verbose) echo("Using port " + port + " for node " + (n + 1));
+ echoIfVerbose("Using port " + port + " for node " + (n + 1), cli);
}
} else {
echo("Starting up " + numNodes + " Solr nodes for your example SolrCloud cluster.\n");
@@ -3845,7 +3753,7 @@ public class SolrCLI implements CLIO {
}
public int runTool(CommandLine cli) throws Exception {
- verbose = cli.hasOption("verbose");
+ verbose = cli.hasOption(OPTION_VERBOSE.getOpt());
int toolExitStatus = 0;
try {
@@ -4171,10 +4079,7 @@ public class SolrCLI implements CLIO {
.hasArg()
.desc("ZooKeeper host to connect to.")
.build(),
- Option.builder("verbose")
- .required(false)
- .desc("Enable more verbose command output.")
- .build()
+ OPTION_VERBOSE
};
}