You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by pe...@apache.org on 2021/12/20 16:30:15 UTC
[pulsar] 04/19: [pulsar-admin] Perfect judgment conditions of pulsar-admin (#12315)
This is an automated email from the ASF dual-hosted git repository.
penghui pushed a commit to branch branch-2.9
in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit c4e491b827c60ada575862eb2a64988ac558020a
Author: Ruguo Yu <ji...@163.com>
AuthorDate: Mon Nov 8 19:12:37 2021 +0800
[pulsar-admin] Perfect judgment conditions of pulsar-admin (#12315)
### Motivation
Perfect judgment conditions of `bin/pulsar-admin`, included parameter `CONF_FILE_PATH` and field `serviceUrl`.
**Details are as follows:**
**First of all**, the configuration file `CONF_FILE_PATH` is a required option rather than an optional option (from the [source code](https://github.com/apache/pulsar/blob/master/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/PulsarAdminTool.java#L288-L299), the configuration file is regarded as an optional option) , because some very important [default values](https://github.com/apache/pulsar/blob/master/conf/client.conf#L22-L30) (such as `webServiceUrl=http://localhos [...]
```
./bin/pulsar-admin topics list-partitioned-topics test/app1
Exception in thread "main" java.io.FileNotFoundException: topics (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at org.apache.pulsar.admin.cli.PulsarAdminTool.main(PulsarAdminTool.java:296)
```
so we first need to judge whether the configuration file `CONF_FILE_PATH` exists, and give the correct command line format (`Usage: pulsar-admin CONF_FILE_PATH [options] [command] [command options]`) if it is illegal.
**Secondly**, `serviceUrl` is a very important field, because pulsarAdmin can connect to the pulsar server through this value. If the configuration file does not have releated `key`=`value`(such as `webServiceUrl`=, `brokerServiceUrl`=) and the user does not specify option `--admin-url`, then NPE will appear, as follows:
```
./bin/pulsar-admin topics list-partitioned-topics test/app1
java.lang.NullPointerException
at org.apache.pulsar.client.admin.internal.PulsarAdminImpl.<init>(PulsarAdminImpl.java:189)
at org.apache.pulsar.client.admin.internal.PulsarAdminBuilderImpl.build(PulsarAdminBuilderImpl.java:47)
at org.apache.pulsar.admin.cli.PulsarAdminTool.lambda$main$2(PulsarAdminTool.java:320)
at org.apache.pulsar.admin.cli.PulsarAdminTool$PulsarAdminSupplier.get(PulsarAdminTool.java:174)
at org.apache.pulsar.admin.cli.PulsarAdminTool$PulsarAdminSupplier.get(PulsarAdminTool.java:161)
at org.apache.pulsar.admin.cli.CmdBase.getAdmin(CmdBase.java:111)
at org.apache.pulsar.admin.cli.CmdTopics.getTopics(CmdTopics.java:2360)
at org.apache.pulsar.admin.cli.CmdTopics.access$11000(CmdTopics.java:73)
at org.apache.pulsar.admin.cli.CmdTopics$PartitionedTopicListCmd.run(CmdTopics.java:275)
at org.apache.pulsar.admin.cli.CmdBase.run(CmdBase.java:86)
at org.apache.pulsar.admin.cli.PulsarAdminTool.run(PulsarAdminTool.java:282)
at org.apache.pulsar.admin.cli.PulsarAdminTool.main(PulsarAdminTool.java:330)
class java.lang.NullPointerException: null
```
so we need to judge whether field `serviceUrl` exists.
(cherry picked from commit f976500029514e5275dc97e1e51748e8ed4fc0b2)
---
.../org/apache/pulsar/admin/cli/PulsarAdminTool.java | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/PulsarAdminTool.java b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/PulsarAdminTool.java
index 5f0cd58..a41f444 100644
--- a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/PulsarAdminTool.java
+++ b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/PulsarAdminTool.java
@@ -37,6 +37,8 @@ import org.apache.pulsar.client.admin.PulsarAdmin;
import org.apache.pulsar.client.admin.PulsarAdminBuilder;
import org.apache.pulsar.client.admin.internal.PulsarAdminImpl;
+import static org.apache.commons.lang3.StringUtils.isBlank;
+
public class PulsarAdminTool {
private static boolean allowSystemExit = true;
@@ -249,6 +251,11 @@ public class PulsarAdminTool {
return false;
}
+ if (isBlank(serviceUrl)) {
+ jcommander.usage();
+ return false;
+ }
+
if (version) {
System.out.println("Current version of pulsar admin client is: " + PulsarVersion.getVersion());
return true;
@@ -285,11 +292,12 @@ public class PulsarAdminTool {
public static void main(String[] args) throws Exception {
lastExitCode = 0;
- String configFile = null;
- if (args.length > 0) {
- configFile = args[0];
- args = Arrays.copyOfRange(args, 1, args.length);
+ if (args.length == 0) {
+ System.out.println("Usage: pulsar-admin CONF_FILE_PATH [options] [command] [command options]");
+ exit(0);
+ return;
}
+ String configFile = args[0];
Properties properties = new Properties();
if (configFile != null) {
@@ -301,6 +309,7 @@ public class PulsarAdminTool {
PulsarAdminTool tool = new PulsarAdminTool(properties);
int cmdPos;
+ args = Arrays.copyOfRange(args, 1, args.length);
for (cmdPos = 0; cmdPos < args.length; cmdPos++) {
if (tool.commandMap.containsKey(args[cmdPos])) {
break;