You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by te...@apache.org on 2022/06/14 10:42:13 UTC

[pulsar] branch master updated: [PulsarAdmin] add get active brokers api without cluster name (#14702)

This is an automated email from the ASF dual-hosted git repository.

technoboy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new 72dfcc628da [PulsarAdmin] add get active brokers api without cluster name (#14702)
72dfcc628da is described below

commit 72dfcc628da24ef99af85156ce0e0c29483c39e3
Author: WangJialing <65...@users.noreply.github.com>
AuthorDate: Tue Jun 14 18:42:08 2022 +0800

    [PulsarAdmin] add get active brokers api without cluster name (#14702)
---
 .../pulsar/broker/admin/impl/BrokersBase.java      | 14 +++++++++
 .../apache/pulsar/broker/admin/AdminApiTest.java   |  4 +++
 .../org/apache/pulsar/client/admin/Brokers.java    | 35 ++++++++++++++++++++++
 .../pulsar/client/admin/internal/BrokersImpl.java  | 12 +++++++-
 .../org/apache/pulsar/admin/cli/CmdBrokers.java    |  4 +--
 site2/docs/admin-api-brokers.md                    | 27 ++++++++++++++++-
 6 files changed, 92 insertions(+), 4 deletions(-)

diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/BrokersBase.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/BrokersBase.java
index 7f6740e3ed2..2aa6ee78864 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/BrokersBase.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/BrokersBase.java
@@ -114,6 +114,20 @@ public class BrokersBase extends AdminResource {
                 });
     }
 
+    @GET
+    @ApiOperation(
+            value = "Get the list of active brokers (web service addresses) in the local cluster."
+                    + "If authorization is not enabled",
+            response = String.class,
+            responseContainer = "Set")
+    @ApiResponses(
+            value = {
+                    @ApiResponse(code = 401, message = "Authentication required"),
+                    @ApiResponse(code = 403, message = "This operation requires super-user access") })
+    public void getActiveBrokers(@Suspended final AsyncResponse asyncResponse) throws Exception {
+        getActiveBrokers(asyncResponse, null);
+    }
+
     @GET
     @Path("/leaderBroker")
     @ApiOperation(
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
index cd8b94f2ed0..60034257b15 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
@@ -470,6 +470,10 @@ public class AdminApiTest extends MockedPulsarServiceBaseTest {
         Assert.assertNotNull(list);
         Assert.assertEquals(list.size(), 1);
 
+        List<String> list1 = admin.brokers().getActiveBrokers();
+        Assert.assertNotNull(list1);
+        Assert.assertEquals(list1.size(), 1);
+
         List<String> list2 = otheradmin.brokers().getActiveBrokers("test");
         Assert.assertNotNull(list2);
         Assert.assertEquals(list2.size(), 1);
diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/Brokers.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/Brokers.java
index caa6046cb3d..9f77e4615b1 100644
--- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/Brokers.java
+++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/Brokers.java
@@ -32,6 +32,41 @@ import org.apache.pulsar.common.policies.data.NamespaceOwnershipStatus;
  * Admin interface for brokers management.
  */
 public interface Brokers {
+    /**
+     * Get the list of active brokers in the local cluster.
+     * <p/>
+     * Get the list of active brokers (web service addresses) in the local cluster.
+     * <p/>
+     * Response Example:
+     *
+     * <pre>
+     * <code>["prod1-broker1.messaging.use.example.com:8080", "prod1-broker2.messaging.use.example.com:8080"
+     * * * "prod1-broker3.messaging.use.example.com:8080"]</code>
+     * </pre>
+     *
+     * @return a list of (host:port)
+     * @throws NotAuthorizedException
+     *             You don't have admin permission to get the list of active brokers in the cluster
+     * @throws PulsarAdminException
+     *             Unexpected error
+     */
+    List<String> getActiveBrokers() throws PulsarAdminException;
+
+    /**
+     * Get the list of active brokers in the local cluster asynchronously.
+     * <p/>
+     * Get the list of active brokers (web service addresses) in the local cluster.
+     * <p/>
+     * Response Example:
+     *
+     * <pre>
+     * <code>["prod1-broker1.messaging.use.example.com:8080", "prod1-broker2.messaging.use.example.com:8080",
+     * "prod1-broker3.messaging.use.example.com:8080"]</code>
+     * </pre>
+     *
+     * @return a list of (host:port)
+     */
+    CompletableFuture<List<String>> getActiveBrokersAsync();
     /**
      * Get the list of active brokers in the cluster.
      * <p/>
diff --git a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/BrokersImpl.java b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/BrokersImpl.java
index 7556d0c21a4..3257ad2067e 100644
--- a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/BrokersImpl.java
+++ b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/BrokersImpl.java
@@ -42,6 +42,16 @@ public class BrokersImpl extends BaseResource implements Brokers {
         adminBrokers = web.path("admin/v2/brokers");
     }
 
+    @Override
+    public List<String> getActiveBrokers() throws PulsarAdminException {
+        return sync(() -> getActiveBrokersAsync(null));
+    }
+
+    @Override
+    public CompletableFuture<List<String>> getActiveBrokersAsync() {
+        return getActiveBrokersAsync(null);
+    }
+
     @Override
     public List<String> getActiveBrokers(String cluster) throws PulsarAdminException {
         return sync(() -> getActiveBrokersAsync(cluster));
@@ -49,7 +59,7 @@ public class BrokersImpl extends BaseResource implements Brokers {
 
     @Override
     public CompletableFuture<List<String>> getActiveBrokersAsync(String cluster) {
-        WebTarget path = adminBrokers.path(cluster);
+        WebTarget path = cluster == null ? adminBrokers : adminBrokers.path(cluster);
         final CompletableFuture<List<String>> future = new CompletableFuture<>();
         asyncGetRequest(path,
                 new InvocationCallback<List<String>>() {
diff --git a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdBrokers.java b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdBrokers.java
index 6e806bb369a..a713198db10 100644
--- a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdBrokers.java
+++ b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdBrokers.java
@@ -29,12 +29,12 @@ public class CmdBrokers extends CmdBase {
 
     @Parameters(commandDescription = "List active brokers of the cluster")
     private class List extends CliCommand {
-        @Parameter(description = "cluster-name", required = true)
+        @Parameter(description = "cluster-name")
         private java.util.List<String> params;
 
         @Override
         void run() throws Exception {
-            String cluster = getOneArgument(params);
+            String cluster = params == null ? null : getOneArgument(params);
             print(getAdmin().brokers().getActiveBrokers(cluster));
         }
     }
diff --git a/site2/docs/admin-api-brokers.md b/site2/docs/admin-api-brokers.md
index 2066d1510d1..b583dec5970 100644
--- a/site2/docs/admin-api-brokers.md
+++ b/site2/docs/admin-api-brokers.md
@@ -39,7 +39,32 @@ In addition to being configurable when you start them up, brokers can also be [d
 
 ### List active brokers
 
-Fetch all available active brokers that are serving traffic.
+Fetch all available active brokers that are serving traffic for local cluster .
+
+<!--DOCUSAURUS_CODE_TABS-->
+<!--pulsar-admin-->
+
+```shell
+$ pulsar-admin brokers list
+```
+
+```
+broker1.use.org.com:8080
+```
+
+<!--REST API-->
+
+{@inject: endpoint|GET|/admin/v2/brokers|operation/getActiveBrokers?version=[[pulsar:version_number]]}
+
+<!--JAVA-->
+
+```java
+admin.brokers().getActiveBrokers()
+```
+
+<!--END_DOCUSAURUS_CODE_TABS-->
+
+Fetch all available active brokers that are serving traffic with cluster name.
 
 ````mdx-code-block
 <Tabs groupId="api-choice"