Skip to content

Commit defe79b

Browse files
laminelamLamine Idjeraouiepugh
authored
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]>
1 parent cae69c7 commit defe79b

File tree

14 files changed

+48
-139
lines changed

14 files changed

+48
-139
lines changed

solr/CHANGES.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ Dependency Upgrades
123123

124124
Other Changes
125125
---------------------
126-
(No changes)
126+
* SOLR-17248: Refactor ZK related SolrCli tools to separate SolrZkClient and CloudSolrClient instantiation/usage (Lamine Idjeraoui via Eric Pugh)
127127

128128
================== 9.6.0 ==================
129129
New Features

solr/core/src/java/org/apache/solr/cli/AuthTool.java

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,11 @@
3333
import java.util.Base64;
3434
import java.util.List;
3535
import java.util.Locale;
36-
import java.util.concurrent.TimeUnit;
3736
import java.util.stream.Collectors;
3837
import org.apache.commons.cli.CommandLine;
3938
import org.apache.commons.cli.HelpFormatter;
4039
import org.apache.commons.cli.Option;
4140
import org.apache.lucene.util.Constants;
42-
import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
4341
import org.apache.solr.common.cloud.SolrZkClient;
4442
import org.apache.solr.common.util.StrUtils;
4543
import org.apache.solr.core.SolrCore;
@@ -186,12 +184,7 @@ private int handleKerberos(CommandLine cli) throws Exception {
186184

187185
// check if security is already enabled or not
188186
if (!zkInaccessible) {
189-
try (SolrZkClient zkClient =
190-
new SolrZkClient.Builder()
191-
.withUrl(zkHost)
192-
.withTimeout(
193-
SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT, TimeUnit.MILLISECONDS)
194-
.build()) {
187+
try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
195188
checkSecurityJsonExists(zkClient);
196189
} catch (Exception ex) {
197190
CLIO.out(
@@ -206,12 +199,7 @@ private int handleKerberos(CommandLine cli) throws Exception {
206199
if (!updateIncludeFileOnly) {
207200
if (!zkInaccessible) {
208201
echoIfVerbose("Uploading following security.json: " + securityJson, cli);
209-
try (SolrZkClient zkClient =
210-
new SolrZkClient.Builder()
211-
.withUrl(zkHost)
212-
.withTimeout(
213-
SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT, TimeUnit.MILLISECONDS)
214-
.build()) {
202+
try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
215203
zkClient.setData(
216204
"/security.json", securityJson.getBytes(StandardCharsets.UTF_8), true);
217205
} catch (Exception ex) {
@@ -322,11 +310,7 @@ private int handleBasicAuth(CommandLine cli) throws Exception {
322310
}
323311

324312
// check if security is already enabled or not
325-
try (SolrZkClient zkClient =
326-
new SolrZkClient.Builder()
327-
.withUrl(zkHost)
328-
.withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT, TimeUnit.MILLISECONDS)
329-
.build()) {
313+
try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
330314
checkSecurityJsonExists(zkClient);
331315
}
332316
}
@@ -374,11 +358,7 @@ private int handleBasicAuth(CommandLine cli) throws Exception {
374358

375359
if (!updateIncludeFileOnly) {
376360
echoIfVerbose("Uploading following security.json: " + securityJson, cli);
377-
try (SolrZkClient zkClient =
378-
new SolrZkClient.Builder()
379-
.withUrl(zkHost)
380-
.withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT, TimeUnit.MILLISECONDS)
381-
.build()) {
361+
try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
382362
zkClient.setData("/security.json", securityJson.getBytes(StandardCharsets.UTF_8), true);
383363
}
384364
}
@@ -469,11 +449,7 @@ private void clearSecurityJson(CommandLine cli, boolean updateIncludeFileOnly) t
469449

470450
echoIfVerbose("Uploading following security.json: {}", cli);
471451

472-
try (SolrZkClient zkClient =
473-
new SolrZkClient.Builder()
474-
.withUrl(zkHost)
475-
.withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT, TimeUnit.MILLISECONDS)
476-
.build()) {
452+
try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
477453
zkClient.setData("/security.json", "{}".getBytes(StandardCharsets.UTF_8), true);
478454
}
479455
}

solr/core/src/java/org/apache/solr/cli/ConfigSetDownloadTool.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,8 @@
2222
import java.nio.file.Path;
2323
import java.nio.file.Paths;
2424
import java.util.List;
25-
import java.util.concurrent.TimeUnit;
2625
import org.apache.commons.cli.CommandLine;
2726
import org.apache.commons.cli.Option;
28-
import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
2927
import org.apache.solr.common.cloud.SolrZkClient;
3028
import org.slf4j.Logger;
3129
import org.slf4j.LoggerFactory;
@@ -73,18 +71,8 @@ public String getName() {
7371
public void runImpl(CommandLine cli) throws Exception {
7472
SolrCLI.raiseLogLevelUnlessVerbose(cli);
7573
String zkHost = SolrCLI.getZkHost(cli);
76-
if (zkHost == null) {
77-
throw new IllegalStateException(
78-
"Solr at "
79-
+ cli.getOptionValue("solrUrl")
80-
+ " is running in standalone server mode, downconfig can only be used when running in SolrCloud mode.\n");
81-
}
8274

83-
try (SolrZkClient zkClient =
84-
new SolrZkClient.Builder()
85-
.withUrl(zkHost)
86-
.withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT, TimeUnit.MILLISECONDS)
87-
.build()) {
75+
try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
8876
echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...", cli);
8977
String confName = cli.getOptionValue("confname");
9078
String confDir = cli.getOptionValue("confdir");

solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,8 @@
2020
import java.lang.invoke.MethodHandles;
2121
import java.nio.file.Path;
2222
import java.util.List;
23-
import java.util.concurrent.TimeUnit;
2423
import org.apache.commons.cli.CommandLine;
2524
import org.apache.commons.cli.Option;
26-
import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
2725
import org.apache.solr.common.cloud.SolrZkClient;
2826
import org.apache.solr.common.cloud.ZkMaintenanceUtils;
2927
import org.apache.solr.core.ConfigSetService;
@@ -80,19 +78,9 @@ public String getName() {
8078
public void runImpl(CommandLine cli) throws Exception {
8179
SolrCLI.raiseLogLevelUnlessVerbose(cli);
8280
String zkHost = SolrCLI.getZkHost(cli);
83-
if (zkHost == null) {
84-
throw new IllegalStateException(
85-
"Solr at "
86-
+ cli.getOptionValue("solrUrl")
87-
+ " is running in standalone server mode, upconfig can only be used when running in SolrCloud mode.\n");
88-
}
8981

9082
String confName = cli.getOptionValue("confname");
91-
try (SolrZkClient zkClient =
92-
new SolrZkClient.Builder()
93-
.withUrl(zkHost)
94-
.withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT, TimeUnit.MILLISECONDS)
95-
.build()) {
83+
try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
9684
echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...", cli);
9785
Path confPath =
9886
ConfigSetService.getConfigsetPath(

solr/core/src/java/org/apache/solr/cli/CreateTool.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,9 @@
2121
import java.nio.file.Files;
2222
import java.nio.file.Path;
2323
import java.nio.file.Paths;
24-
import java.util.Collections;
2524
import java.util.List;
2625
import java.util.Locale;
2726
import java.util.Map;
28-
import java.util.Optional;
2927
import java.util.Set;
3028
import java.util.concurrent.TimeUnit;
3129
import org.apache.commons.cli.CommandLine;
@@ -35,7 +33,6 @@
3533
import org.apache.solr.client.solrj.SolrClient;
3634
import org.apache.solr.client.solrj.SolrRequest;
3735
import org.apache.solr.client.solrj.SolrServerException;
38-
import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient;
3936
import org.apache.solr.client.solrj.impl.CloudSolrClient;
4037
import org.apache.solr.client.solrj.impl.Http2SolrClient;
4138
import org.apache.solr.client.solrj.impl.JsonMapResponseParser;
@@ -206,10 +203,7 @@ protected void createCollection(CommandLine cli) throws Exception {
206203
.withOptionalBasicAuthCredentials(
207204
cli.getOptionValue(SolrCLI.OPTION_CREDENTIALS.getLongOpt()));
208205
String zkHost = SolrCLI.getZkHost(cli);
209-
try (CloudSolrClient cloudSolrClient =
210-
new CloudHttp2SolrClient.Builder(Collections.singletonList(zkHost), Optional.empty())
211-
.withInternalClientBuilder(builder)
212-
.build()) {
206+
try (CloudSolrClient cloudSolrClient = SolrCLI.getCloudHttp2SolrClient(zkHost, builder)) {
213207
echoIfVerbose("Connecting to ZooKeeper at " + zkHost, cli);
214208
cloudSolrClient.connect();
215209
createCollection(cloudSolrClient, cli);

solr/core/src/java/org/apache/solr/cli/DeleteTool.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import java.io.PrintStream;
2222
import java.lang.invoke.MethodHandles;
23-
import java.util.Collections;
2423
import java.util.List;
2524
import java.util.Optional;
2625
import java.util.Set;
@@ -29,7 +28,6 @@
2928
import org.apache.commons.cli.Option;
3029
import org.apache.solr.client.solrj.SolrClient;
3130
import org.apache.solr.client.solrj.SolrServerException;
32-
import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient;
3331
import org.apache.solr.client.solrj.impl.CloudSolrClient;
3432
import org.apache.solr.client.solrj.impl.Http2SolrClient;
3533
import org.apache.solr.client.solrj.impl.JsonMapResponseParser;
@@ -111,10 +109,7 @@ protected void deleteCollection(CommandLine cli) throws Exception {
111109
.withOptionalBasicAuthCredentials(cli.getOptionValue(("credentials")));
112110

113111
String zkHost = SolrCLI.getZkHost(cli);
114-
try (CloudSolrClient cloudSolrClient =
115-
new CloudHttp2SolrClient.Builder(Collections.singletonList(zkHost), Optional.empty())
116-
.withInternalClientBuilder(builder)
117-
.build()) {
112+
try (CloudSolrClient cloudSolrClient = SolrCLI.getCloudHttp2SolrClient(zkHost, builder)) {
118113
echoIfVerbose("Connecting to ZooKeeper at " + zkHost, cli);
119114
cloudSolrClient.connect();
120115
deleteCollection(cloudSolrClient, cli);

solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@
2424
import java.lang.invoke.MethodHandles;
2525
import java.util.ArrayList;
2626
import java.util.Collection;
27-
import java.util.Collections;
2827
import java.util.LinkedHashMap;
2928
import java.util.List;
3029
import java.util.Map;
31-
import java.util.Optional;
3230
import java.util.Set;
3331
import org.apache.commons.cli.CommandLine;
3432
import org.apache.commons.cli.Option;
@@ -93,9 +91,7 @@ public void runImpl(CommandLine cli) throws Exception {
9391
CLIO.err("Healthcheck tool only works in Solr Cloud mode.");
9492
System.exit(1);
9593
}
96-
try (CloudHttp2SolrClient cloudSolrClient =
97-
new CloudHttp2SolrClient.Builder(Collections.singletonList(zkHost), Optional.empty())
98-
.build()) {
94+
try (CloudHttp2SolrClient cloudSolrClient = SolrCLI.getCloudHttp2SolrClient(zkHost)) {
9995
echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...", cli);
10096
cloudSolrClient.connect();
10197
runCloudTool(cloudSolrClient, cli);

solr/core/src/java/org/apache/solr/cli/SolrCLI.java

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,13 @@
5454
import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient;
5555
import org.apache.solr.client.solrj.impl.CloudSolrClient;
5656
import org.apache.solr.client.solrj.impl.Http2SolrClient;
57+
import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
5758
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
5859
import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest;
5960
import org.apache.solr.client.solrj.request.CoreAdminRequest;
6061
import org.apache.solr.client.solrj.request.GenericSolrRequest;
6162
import org.apache.solr.common.SolrException;
63+
import org.apache.solr.common.cloud.SolrZkClient;
6264
import org.apache.solr.common.cloud.ZkStateReader;
6365
import org.apache.solr.common.params.CommonParams;
6466
import org.apache.solr.common.util.ContentStreamBase;
@@ -557,9 +559,7 @@ public static String normalizeSolrUrl(CommandLine cli) throws Exception {
557559
+ ".");
558560
} else {
559561

560-
try (CloudSolrClient cloudSolrClient =
561-
new CloudHttp2SolrClient.Builder(Collections.singletonList(zkHost), Optional.empty())
562-
.build()) {
562+
try (CloudSolrClient cloudSolrClient = getCloudHttp2SolrClient(zkHost)) {
563563
cloudSolrClient.connect();
564564
Set<String> liveNodes = cloudSolrClient.getClusterState().getLiveNodes();
565565
if (liveNodes.isEmpty())
@@ -610,6 +610,34 @@ public static String getZkHost(CommandLine cli) throws Exception {
610610
return zkHost;
611611
}
612612

613+
public static SolrZkClient getSolrZkClient(CommandLine cli) throws Exception {
614+
return getSolrZkClient(cli, getZkHost(cli));
615+
}
616+
617+
public static SolrZkClient getSolrZkClient(CommandLine cli, String zkHost) throws Exception {
618+
if (zkHost == null) {
619+
throw new IllegalStateException(
620+
"Solr at "
621+
+ cli.getOptionValue("solrUrl")
622+
+ " is running in standalone server mode, this command can only be used when running in SolrCloud mode.\n");
623+
}
624+
return new SolrZkClient.Builder()
625+
.withUrl(zkHost)
626+
.withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT, TimeUnit.MILLISECONDS)
627+
.build();
628+
}
629+
630+
public static CloudHttp2SolrClient getCloudHttp2SolrClient(String zkHost) {
631+
return getCloudHttp2SolrClient(zkHost, null);
632+
}
633+
634+
public static CloudHttp2SolrClient getCloudHttp2SolrClient(
635+
String zkHost, Http2SolrClient.Builder builder) {
636+
return new CloudHttp2SolrClient.Builder(Collections.singletonList(zkHost), Optional.empty())
637+
.withInternalClientBuilder(builder)
638+
.build();
639+
}
640+
613641
public static boolean safeCheckCollectionExists(
614642
String solrUrl, String collection, String credentials) {
615643
boolean exists = false;

solr/core/src/java/org/apache/solr/cli/ZkCpTool.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,6 @@ public String getName() {
8787
public void runImpl(CommandLine cli) throws Exception {
8888
SolrCLI.raiseLogLevelUnlessVerbose(cli);
8989
String zkHost = SolrCLI.getZkHost(cli);
90-
if (zkHost == null) {
91-
throw new IllegalStateException(
92-
"Solr at "
93-
+ cli.getOptionValue("solrUrl")
94-
+ " is running in standalone server mode, cp can only be used when running in SolrCloud mode.\n");
95-
}
9690

9791
echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...", cli);
9892
String src = cli.getOptionValue("src");
@@ -153,7 +147,7 @@ public void runImpl(CommandLine cli) throws Exception {
153147
} catch (SolrException e) {
154148
// Failed to load solr.xml
155149
throw new IllegalStateException(
156-
"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.");
150+
"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.");
157151
} catch (ClassNotFoundException
158152
| NoSuchMethodException
159153
| InstantiationException
@@ -167,7 +161,6 @@ public void runImpl(CommandLine cli) throws Exception {
167161
if (minStateByteLenForCompression > -1) {
168162
echoIfVerbose("Compression of state.json has been enabled", cli);
169163
}
170-
171164
try (SolrZkClient zkClient =
172165
new SolrZkClient.Builder()
173166
.withUrl(zkHost)

solr/core/src/java/org/apache/solr/cli/ZkLsTool.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,8 @@
1919
import java.io.PrintStream;
2020
import java.lang.invoke.MethodHandles;
2121
import java.util.List;
22-
import java.util.concurrent.TimeUnit;
2322
import org.apache.commons.cli.CommandLine;
2423
import org.apache.commons.cli.Option;
25-
import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
2624
import org.apache.solr.common.cloud.SolrZkClient;
2725
import org.slf4j.Logger;
2826
import org.slf4j.LoggerFactory;
@@ -64,18 +62,7 @@ public void runImpl(CommandLine cli) throws Exception {
6462
SolrCLI.raiseLogLevelUnlessVerbose(cli);
6563
String zkHost = SolrCLI.getZkHost(cli);
6664

67-
if (zkHost == null) {
68-
throw new IllegalStateException(
69-
"Solr at "
70-
+ cli.getOptionValue("zkHost")
71-
+ " is running in standalone server mode, 'zk ls' can only be used when running in SolrCloud mode.\n");
72-
}
73-
74-
try (SolrZkClient zkClient =
75-
new SolrZkClient.Builder()
76-
.withUrl(zkHost)
77-
.withTimeout(SolrZkClientTimeout.DEFAULT_ZK_CLIENT_TIMEOUT, TimeUnit.MILLISECONDS)
78-
.build()) {
65+
try (SolrZkClient zkClient = SolrCLI.getSolrZkClient(cli, zkHost)) {
7966
echoIfVerbose("\nConnecting to ZooKeeper at " + zkHost + " ...", cli);
8067

8168
String znode = cli.getOptionValue("path");

0 commit comments

Comments
 (0)