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;