This is an automated email from the ASF dual-hosted git repository.
epugh pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/branch_9x by this push:
new dd64a74db36 Backporting SOLR-17248 to branch_9x (#2439)
dd64a74db36 is described below
commit dd64a74db3625e7c3ad024996187e666b5158e3f
Author: Eric Pugh <[email protected]>
AuthorDate: Fri May 3 19:19:20 2024 +0200
Backporting SOLR-17248 to branch_9x (#2439)
* SOLR-17248: Refactor ZK related SolrCli tools to separate SolrZkClient
and CloudSolrClient instantiation/usage to fix branch_9x.
Co-authored-by: Lamine <[email protected]>
Co-authored-by: Lamine Idjeraoui <[email protected]>
---
solr/CHANGES.txt | 2 +-
.../src/java/org/apache/solr/cli/AuthTool.java | 34 +++----------------
.../org/apache/solr/cli/ConfigSetDownloadTool.java | 14 +-------
.../org/apache/solr/cli/ConfigSetUploadTool.java | 14 +-------
.../src/java/org/apache/solr/cli/DeleteTool.java | 18 +++++-----
.../java/org/apache/solr/cli/HealthcheckTool.java | 10 +++---
.../core/src/java/org/apache/solr/cli/SolrCLI.java | 38 +++++++++++++++++++---
.../src/java/org/apache/solr/cli/ZkCpTool.java | 9 +----
.../src/java/org/apache/solr/cli/ZkLsTool.java | 15 +--------
.../src/java/org/apache/solr/cli/ZkMkrootTool.java | 15 +--------
.../src/java/org/apache/solr/cli/ZkMvTool.java | 14 +-------
.../src/java/org/apache/solr/cli/ZkRmTool.java | 14 +-------
.../org/apache/solr/cloud/SolrCLIZkUtilsTest.java | 1 +
solr/packaging/test/test_zk.bats | 2 +-
14 files changed, 62 insertions(+), 138 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index a37c4976939..df2ef5c86a7 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -32,7 +32,7 @@ Dependency Upgrades
Other Changes
---------------------
-(No changes)
+* SOLR-17248: Refactor ZK related SolrCli tools to separate SolrZkClient and
CloudSolrClient instantiation/usage (Lamine Idjeraoui via Eric Pugh)
================== 9.6.0 ==================
New Features
diff --git a/solr/core/src/java/org/apache/solr/cli/AuthTool.java
b/solr/core/src/java/org/apache/solr/cli/AuthTool.java
index c5b1153e09d..b89f996bff2 100644
--- a/solr/core/src/java/org/apache/solr/cli/AuthTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/AuthTool.java
@@ -33,13 +33,11 @@ import java.util.Arrays;
import java.util.Base64;
import java.util.List;
import java.util.Locale;
-import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.lucene.util.Constants;
-import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.core.SolrCore;
@@ -203,12 +201,7 @@ public class AuthTool extends ToolBase {
// check if security is already enabled or not
if (!zkInaccessible) {
- try (SolrZkClient zkClient =
- new SolrZkClient.Builder()
- .withUrl(zkHost)
- .withTimeout(
- SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT,
TimeUnit.MILLISECONDS)
- .build()) {
+ try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost))
{
checkSecurityJsonExists(zkClient);
} catch (Exception ex) {
CLIO.out(
@@ -223,12 +216,7 @@ public class AuthTool extends ToolBase {
if (!updateIncludeFileOnly) {
if (!zkInaccessible) {
echoIfVerbose("Uploading following security.json: " +
securityJson, cli);
- try (SolrZkClient zkClient =
- new SolrZkClient.Builder()
- .withUrl(zkHost)
- .withTimeout(
- SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT,
TimeUnit.MILLISECONDS)
- .build()) {
+ try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost))
{
zkClient.setData(
"/security.json",
securityJson.getBytes(StandardCharsets.UTF_8), true);
} catch (Exception ex) {
@@ -339,11 +327,7 @@ public class AuthTool extends ToolBase {
}
// check if security is already enabled or not
- try (SolrZkClient zkClient =
- new SolrZkClient.Builder()
- .withUrl(zkHost)
- .withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT,
TimeUnit.MILLISECONDS)
- .build()) {
+ try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
checkSecurityJsonExists(zkClient);
}
}
@@ -391,11 +375,7 @@ public class AuthTool extends ToolBase {
if (!updateIncludeFileOnly) {
echoIfVerbose("Uploading following security.json: " + securityJson,
cli);
- try (SolrZkClient zkClient =
- new SolrZkClient.Builder()
- .withUrl(zkHost)
- .withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT,
TimeUnit.MILLISECONDS)
- .build()) {
+ try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
zkClient.setData("/security.json",
securityJson.getBytes(StandardCharsets.UTF_8), true);
}
}
@@ -486,11 +466,7 @@ public class AuthTool extends ToolBase {
echoIfVerbose("Uploading following security.json: {}", cli);
- try (SolrZkClient zkClient =
- new SolrZkClient.Builder()
- .withUrl(zkHost)
- .withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT,
TimeUnit.MILLISECONDS)
- .build()) {
+ try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
zkClient.setData("/security.json",
"{}".getBytes(StandardCharsets.UTF_8), true);
}
}
diff --git a/solr/core/src/java/org/apache/solr/cli/ConfigSetDownloadTool.java
b/solr/core/src/java/org/apache/solr/cli/ConfigSetDownloadTool.java
index 36535aa1ac6..6beb9b16475 100644
--- a/solr/core/src/java/org/apache/solr/cli/ConfigSetDownloadTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ConfigSetDownloadTool.java
@@ -22,10 +22,8 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
-import java.util.concurrent.TimeUnit;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
-import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.common.cloud.SolrZkClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -72,18 +70,8 @@ public class ConfigSetDownloadTool extends ToolBase {
public void runImpl(CommandLine cli) throws Exception {
SolrCLI.raiseLogLevelUnlessVerbose(cli);
String zkHost = SolrCLI.getZkHost(cli);
- if (zkHost == null) {
- throw new IllegalStateException(
- "Solr at "
- + cli.getOptionValue("solrUrl")
- + " is running in standalone server mode, downconfig can only be
used when running in SolrCloud mode.\n");
- }
- try (SolrZkClient zkClient =
- new SolrZkClient.Builder()
- .withUrl(zkHost)
- .withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT,
TimeUnit.MILLISECONDS)
- .build()) {
+ try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...", cli);
String confName = cli.getOptionValue("confname");
String confDir = cli.getOptionValue("confdir");
diff --git a/solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java
b/solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java
index ec0875923fc..d74435f2abb 100644
--- a/solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java
@@ -20,10 +20,8 @@ import java.io.PrintStream;
import java.lang.invoke.MethodHandles;
import java.nio.file.Path;
import java.util.List;
-import java.util.concurrent.TimeUnit;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
-import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkMaintenanceUtils;
import org.apache.solr.core.ConfigSetService;
@@ -79,19 +77,9 @@ public class ConfigSetUploadTool extends ToolBase {
public void runImpl(CommandLine cli) throws Exception {
SolrCLI.raiseLogLevelUnlessVerbose(cli);
String zkHost = SolrCLI.getZkHost(cli);
- if (zkHost == null) {
- throw new IllegalStateException(
- "Solr at "
- + cli.getOptionValue("solrUrl")
- + " is running in standalone server mode, upconfig can only be
used when running in SolrCloud mode.\n");
- }
String confName = cli.getOptionValue("confname");
- try (SolrZkClient zkClient =
- new SolrZkClient.Builder()
- .withUrl(zkHost)
- .withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT,
TimeUnit.MILLISECONDS)
- .build()) {
+ try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...", cli);
Path confPath =
ConfigSetService.getConfigsetPath(
diff --git a/solr/core/src/java/org/apache/solr/cli/DeleteTool.java
b/solr/core/src/java/org/apache/solr/cli/DeleteTool.java
index 6477481c796..a0d0ff3ef4f 100644
--- a/solr/core/src/java/org/apache/solr/cli/DeleteTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/DeleteTool.java
@@ -21,7 +21,6 @@ import static
org.apache.solr.common.params.CommonParams.SYSTEM_INFO_PATH;
import java.io.PrintStream;
import java.lang.invoke.MethodHandles;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -32,7 +31,6 @@ import org.apache.commons.cli.Option;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.impl.Http2SolrClient;
import org.apache.solr.client.solrj.impl.JsonMapResponseParser;
@@ -109,15 +107,15 @@ public class DeleteTool extends ToolBase {
}
protected void deleteCollection(CommandLine cli) throws Exception {
+ Http2SolrClient.Builder builder =
+ new Http2SolrClient.Builder()
+ .withIdleTimeout(30, TimeUnit.SECONDS)
+ .withConnectionTimeout(15, TimeUnit.SECONDS)
+ .withKeyStoreReloadInterval(-1, TimeUnit.SECONDS)
+
.withOptionalBasicAuthCredentials(cli.getOptionValue(("credentials")));
+
String zkHost = SolrCLI.getZkHost(cli);
- try (CloudSolrClient cloudSolrClient =
- new CloudHttp2SolrClient.Builder(Collections.singletonList(zkHost),
Optional.empty())
- .withInternalClientBuilder(
- new Http2SolrClient.Builder()
- .withIdleTimeout(30, TimeUnit.SECONDS)
- .withKeyStoreReloadInterval(-1, TimeUnit.SECONDS)
- .withConnectionTimeout(15, TimeUnit.SECONDS))
- .build()) {
+ try (CloudSolrClient cloudSolrClient =
SolrCLI.getCloudHttp2SolrClient(zkHost, builder)) {
echoIfVerbose("Connecting to ZooKeeper at " + zkHost, cli);
cloudSolrClient.connect();
deleteCollection(cloudSolrClient, cli);
diff --git a/solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java
b/solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java
index 8d181b9a196..fa724eaefbd 100644
--- a/solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java
@@ -24,11 +24,9 @@ import java.io.PrintStream;
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import java.util.Optional;
import java.util.Set;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
@@ -88,9 +86,11 @@ public class HealthcheckTool extends ToolBase {
public void runImpl(CommandLine cli) throws Exception {
SolrCLI.raiseLogLevelUnlessVerbose(cli);
String zkHost = SolrCLI.getZkHost(cli);
- try (CloudHttp2SolrClient cloudSolrClient =
- new CloudHttp2SolrClient.Builder(Collections.singletonList(zkHost),
Optional.empty())
- .build()) {
+ if (zkHost == null) {
+ CLIO.err("Healthcheck tool only works in Solr Cloud mode.");
+ System.exit(1);
+ }
+ try (CloudHttp2SolrClient cloudSolrClient =
SolrCLI.getCloudHttp2SolrClient(zkHost)) {
echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...", cli);
cloudSolrClient.connect();
runCloudTool(cloudSolrClient, cli);
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 8d52f45c0a4..b687787ab8b 100755
--- a/solr/core/src/java/org/apache/solr/cli/SolrCLI.java
+++ b/solr/core/src/java/org/apache/solr/cli/SolrCLI.java
@@ -52,11 +52,13 @@ import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.impl.Http2SolrClient;
+import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest;
import org.apache.solr.client.solrj.request.CoreAdminRequest;
import org.apache.solr.client.solrj.request.GenericSolrRequest;
import org.apache.solr.common.SolrException;
+import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.util.ContentStreamBase;
@@ -97,7 +99,8 @@ public class SolrCLI implements CLIO {
Option.builder("verbose").required(false).desc("Enable more verbose
command output.").build();
public static final Option OPTION_RECURSE =
- Option.builder("recurse")
+ Option.builder("r")
+ .longOpt("recurse")
.argName("recurse")
.hasArg()
.required(false)
@@ -578,9 +581,8 @@ public class SolrCLI implements CLIO {
+ solrUrl
+ ".");
} else {
- try (CloudSolrClient cloudSolrClient =
- new
CloudHttp2SolrClient.Builder(Collections.singletonList(zkHost),
Optional.empty())
- .build()) {
+
+ try (CloudSolrClient cloudSolrClient =
getCloudHttp2SolrClient(zkHost)) {
cloudSolrClient.connect();
Set<String> liveNodes =
cloudSolrClient.getClusterState().getLiveNodes();
if (liveNodes.isEmpty())
@@ -638,6 +640,34 @@ public class SolrCLI implements CLIO {
return zkHost;
}
+ public static SolrZkClient getSolrZkClient(CommandLine cli) throws Exception
{
+ return getSolrZkClient(cli, getZkHost(cli));
+ }
+
+ public static SolrZkClient getSolrZkClient(CommandLine cli, String zkHost)
throws Exception {
+ if (zkHost == null) {
+ throw new IllegalStateException(
+ "Solr at "
+ + cli.getOptionValue("solrUrl")
+ + " is running in standalone server mode, this command can only
be used when running in SolrCloud mode.\n");
+ }
+ return new SolrZkClient.Builder()
+ .withUrl(zkHost)
+ .withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT,
TimeUnit.MILLISECONDS)
+ .build();
+ }
+
+ public static CloudHttp2SolrClient getCloudHttp2SolrClient(String zkHost) {
+ return getCloudHttp2SolrClient(zkHost, null);
+ }
+
+ public static CloudHttp2SolrClient getCloudHttp2SolrClient(
+ String zkHost, Http2SolrClient.Builder builder) {
+ return new CloudHttp2SolrClient.Builder(Collections.singletonList(zkHost),
Optional.empty())
+ .withInternalClientBuilder(builder)
+ .build();
+ }
+
public static boolean safeCheckCollectionExists(String solrUrl, String
collection) {
boolean exists = false;
try (var solrClient = getSolrClient(solrUrl)) {
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkCpTool.java
b/solr/core/src/java/org/apache/solr/cli/ZkCpTool.java
index 02a4248b9c7..9eb33b9142d 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkCpTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ZkCpTool.java
@@ -86,12 +86,6 @@ public class ZkCpTool extends ToolBase {
public void runImpl(CommandLine cli) throws Exception {
SolrCLI.raiseLogLevelUnlessVerbose(cli);
String zkHost = SolrCLI.getZkHost(cli);
- if (zkHost == null) {
- throw new IllegalStateException(
- "Solr at "
- + cli.getOptionValue("solrUrl")
- + " is running in standalone server mode, cp can only be used
when running in SolrCloud mode.\n");
- }
echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...", cli);
String src = cli.getOptionValue("src");
@@ -152,7 +146,7 @@ public class ZkCpTool extends ToolBase {
} catch (SolrException e) {
// Failed to load solr.xml
throw new IllegalStateException(
- "Failed to load solr.xml from ZK or SolrHome, put/get operations
on compressed data will use data as is. If your intention is to read and
de-compress data or compress and write data, then solr.xml must be
accessible.");
+ "Failed to load solr.xml, put/get operations on compressed data
will use data as is. If your intention is to read and de-compress data or
compress and write data, then solr.xml must be accessible.");
} catch (ClassNotFoundException
| NoSuchMethodException
| InstantiationException
@@ -166,7 +160,6 @@ public class ZkCpTool extends ToolBase {
if (minStateByteLenForCompression > -1) {
echoIfVerbose("Compression of state.json has been enabled", cli);
}
-
try (SolrZkClient zkClient =
new SolrZkClient.Builder()
.withUrl(zkHost)
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkLsTool.java
b/solr/core/src/java/org/apache/solr/cli/ZkLsTool.java
index 6809f8a7a11..1ba752d331d 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkLsTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ZkLsTool.java
@@ -19,10 +19,8 @@ package org.apache.solr.cli;
import java.io.PrintStream;
import java.lang.invoke.MethodHandles;
import java.util.List;
-import java.util.concurrent.TimeUnit;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
-import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.common.cloud.SolrZkClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -63,18 +61,7 @@ public class ZkLsTool extends ToolBase {
SolrCLI.raiseLogLevelUnlessVerbose(cli);
String zkHost = SolrCLI.getZkHost(cli);
- if (zkHost == null) {
- throw new IllegalStateException(
- "Solr at "
- + cli.getOptionValue("zkHost")
- + " is running in standalone server mode, 'zk ls' can only be
used when running in SolrCloud mode.\n");
- }
-
- try (SolrZkClient zkClient =
- new SolrZkClient.Builder()
- .withUrl(zkHost)
- .withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT,
TimeUnit.MILLISECONDS)
- .build()) {
+ try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...", cli);
String znode = cli.getOptionValue("path");
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkMkrootTool.java
b/solr/core/src/java/org/apache/solr/cli/ZkMkrootTool.java
index 277cb388bdb..15321fef1a5 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkMkrootTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ZkMkrootTool.java
@@ -19,10 +19,8 @@ package org.apache.solr.cli;
import java.io.PrintStream;
import java.lang.invoke.MethodHandles;
import java.util.List;
-import java.util.concurrent.TimeUnit;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
-import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.common.cloud.SolrZkClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -70,18 +68,7 @@ public class ZkMkrootTool extends ToolBase {
String zkHost = SolrCLI.getZkHost(cli);
boolean failOnExists = cli.hasOption("fail-on-exists");
- if (zkHost == null) {
- throw new IllegalStateException(
- "Solr at "
- + cli.getOptionValue("zkHost")
- + " is running in standalone server mode, 'zk mkroot' can only
be used when running in SolrCloud mode.\n");
- }
-
- try (SolrZkClient zkClient =
- new SolrZkClient.Builder()
- .withUrl(zkHost)
- .withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT,
TimeUnit.MILLISECONDS)
- .build()) {
+ try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...", cli);
String znode = cli.getOptionValue("path");
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkMvTool.java
b/solr/core/src/java/org/apache/solr/cli/ZkMvTool.java
index 5578c59e777..52a663f5e4e 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkMvTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ZkMvTool.java
@@ -20,11 +20,9 @@ import java.io.PrintStream;
import java.lang.invoke.MethodHandles;
import java.util.List;
import java.util.Locale;
-import java.util.concurrent.TimeUnit;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.common.cloud.SolrZkClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -69,18 +67,8 @@ public class ZkMvTool extends ToolBase {
public void runImpl(CommandLine cli) throws Exception {
SolrCLI.raiseLogLevelUnlessVerbose(cli);
String zkHost = SolrCLI.getZkHost(cli);
- if (zkHost == null) {
- throw new IllegalStateException(
- "Solr at "
- + cli.getOptionValue("solrUrl")
- + " is running in standalone server mode, downconfig can only be
used when running in SolrCloud mode.\n");
- }
- try (SolrZkClient zkClient =
- new SolrZkClient.Builder()
- .withUrl(zkHost)
- .withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT,
TimeUnit.MILLISECONDS)
- .build()) {
+ try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...", cli);
String src = cli.getOptionValue("src");
String dst = cli.getOptionValue("dst");
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkRmTool.java
b/solr/core/src/java/org/apache/solr/cli/ZkRmTool.java
index f2590e3a347..bf7766bfb05 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkRmTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ZkRmTool.java
@@ -20,11 +20,9 @@ import java.io.PrintStream;
import java.lang.invoke.MethodHandles;
import java.util.List;
import java.util.Locale;
-import java.util.concurrent.TimeUnit;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
import org.apache.solr.common.cloud.SolrZkClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -65,12 +63,6 @@ public class ZkRmTool extends ToolBase {
SolrCLI.raiseLogLevelUnlessVerbose(cli);
String zkHost = SolrCLI.getZkHost(cli);
- if (zkHost == null) {
- throw new IllegalStateException(
- "Solr at "
- + cli.getOptionValue("zkHost")
- + " is running in standalone server mode, 'zk rm' can only be
used when running in SolrCloud mode.\n");
- }
String target = cli.getOptionValue("path");
boolean recurse = Boolean.parseBoolean(cli.getOptionValue("recurse"));
@@ -82,11 +74,7 @@ public class ZkRmTool extends ToolBase {
throw new SolrServerException("You may not remove the root ZK node
('/')!");
}
echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...", cli);
- try (SolrZkClient zkClient =
- new SolrZkClient.Builder()
- .withUrl(zkHost)
- .withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT,
TimeUnit.MILLISECONDS)
- .build()) {
+ try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
if (!recurse && zkClient.getChildren(znode, null, true).size() != 0) {
throw new SolrServerException(
"ZooKeeper node " + znode + " has children and recurse has NOT
been specified.");
diff --git a/solr/core/src/test/org/apache/solr/cloud/SolrCLIZkUtilsTest.java
b/solr/core/src/test/org/apache/solr/cloud/SolrCLIZkUtilsTest.java
index 38f6a674dd3..f7a8da22e8f 100644
--- a/solr/core/src/test/org/apache/solr/cloud/SolrCLIZkUtilsTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/SolrCLIZkUtilsTest.java
@@ -60,6 +60,7 @@ public class SolrCLIZkUtilsTest extends SolrCloudTestCase {
.withUrl(zkAddr)
.withTimeout(30000, TimeUnit.MILLISECONDS)
.build();
+ System.setProperty("solr.solr.home", TEST_HOME());
}
@AfterClass
diff --git a/solr/packaging/test/test_zk.bats b/solr/packaging/test/test_zk.bats
index c3b1cae691d..3ac3fba6ae5 100644
--- a/solr/packaging/test/test_zk.bats
+++ b/solr/packaging/test/test_zk.bats
@@ -49,7 +49,7 @@ teardown() {
@test "get zk host using solr url" {
sleep 1
- run solr zk ls / -solrUrl http://localhost:${SOLR_PORT}
+ run solr zk ls / -solrUrl http://localhost:${SOLR_PORT}/solr
assert_output --partial "aliases.json"
}