This is an automated email from the ASF dual-hosted git repository. epugh pushed a commit to branch backporting_SOLR-17248 in repository https://gitbox.apache.org/repos/asf/solr.git
commit 23877e0867045eda06f3ee6388f318630c6d937b Author: Lamine <[email protected]> AuthorDate: Fri May 3 03:01:06 2024 -0500 SOLR-17248: Refactor ZK related SolrCli tools to separate SolrZkClient and CloudSolrClient instantiation/usage (#2417) --------- Co-authored-by: Lamine Idjeraoui <[email protected]> Co-authored-by: Eric Pugh <[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 | 11 +------ .../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 + 13 files changed, 54 insertions(+), 137 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..665650f1a58 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; @@ -110,14 +108,7 @@ public class DeleteTool extends ToolBase { protected void deleteCollection(CommandLine cli) throws Exception { 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..34e78b9f2b6 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; @@ -578,9 +580,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,7 +639,36 @@ public class SolrCLI implements CLIO { return zkHost; } - public static boolean safeCheckCollectionExists(String solrUrl, String collection) { + 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, String credentials) { boolean exists = false; try (var solrClient = getSolrClient(solrUrl)) { NamedList<Object> existsCheckResult = solrClient.request(new CollectionAdminRequest.List()); 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
