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 ba20e02f01d [fix][admin] Clearly define REST API on Open API (#22783)
ba20e02f01d is described below

commit ba20e02f01d75f0d4ec38393841bcf5c417e9363
Author: Baodi Shi <[email protected]>
AuthorDate: Mon May 27 21:45:51 2024 +0800

    [fix][admin] Clearly define REST API on Open API (#22783)
---
 .../pulsar/broker/admin/impl/FunctionsBase.java    | 27 ++++++++++-----
 .../apache/pulsar/broker/admin/impl/SinksBase.java | 18 ++++++----
 .../pulsar/broker/admin/impl/SourcesBase.java      | 20 +++++++----
 .../pulsar/broker/admin/impl/TenantsBase.java      | 12 +++++--
 .../pulsar/broker/admin/v2/ResourceGroups.java     |  5 ++-
 .../pulsar/broker/admin/v2/ResourceQuotas.java     |  4 ++-
 .../org/apache/pulsar/broker/admin/v2/Worker.java  | 10 ++++--
 .../apache/pulsar/broker/admin/v3/Packages.java    |  9 ++---
 .../pulsar/broker/admin/v3/Transactions.java       | 39 +++++++++++++++-------
 9 files changed, 99 insertions(+), 45 deletions(-)

diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/FunctionsBase.java
 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/FunctionsBase.java
index 4350316e2f0..42971ae231c 100644
--- 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/FunctionsBase.java
+++ 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/FunctionsBase.java
@@ -39,7 +39,6 @@ import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.StreamingOutput;
 import org.apache.pulsar.broker.admin.AdminResource;
-import org.apache.pulsar.client.api.Message;
 import org.apache.pulsar.common.functions.FunctionConfig;
 import org.apache.pulsar.common.functions.FunctionDefinition;
 import org.apache.pulsar.common.functions.FunctionState;
@@ -486,7 +485,7 @@ public class FunctionsBase extends AdminResource {
     @POST
     @ApiOperation(
             value = "Triggers a Pulsar Function with a user-specified value or 
file data",
-            response = Message.class
+            response = String.class
     )
     @ApiResponses(value = {
             @ApiResponse(code = 400, message = "Invalid request"),
@@ -541,6 +540,7 @@ public class FunctionsBase extends AdminResource {
             value = "Put the state associated with a Pulsar Function"
     )
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid request"),
             @ApiResponse(code = 403, message = "The requester doesn't have 
admin permissions"),
             @ApiResponse(code = 404, message = "The Pulsar Function does not 
exist"),
@@ -557,8 +557,9 @@ public class FunctionsBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Restart an instance of a Pulsar Function", response 
= Void.class)
+    @ApiOperation(value = "Restart an instance of a Pulsar Function")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 307, message = "Current broker doesn't serve 
the namespace of this function"),
             @ApiResponse(code = 400, message = "Invalid request"),
             @ApiResponse(code = 404, message = "The Pulsar Function does not 
exist"),
@@ -578,8 +579,9 @@ public class FunctionsBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Restart all instances of a Pulsar Function", 
response = Void.class)
+    @ApiOperation(value = "Restart all instances of a Pulsar Function")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid request"),
             @ApiResponse(code = 404, message = "The Pulsar Function does not 
exist"),
             @ApiResponse(code = 500, message = "Internal server error")
@@ -597,8 +599,9 @@ public class FunctionsBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Stop an instance of a Pulsar Function", response = 
Void.class)
+    @ApiOperation(value = "Stop an instance of a Pulsar Function")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid request"),
             @ApiResponse(code = 404, message = "The Pulsar Function does not 
exist"),
             @ApiResponse(code = 500, message = "Internal server error")
@@ -617,8 +620,9 @@ public class FunctionsBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Stop all instances of a Pulsar Function", response 
= Void.class)
+    @ApiOperation(value = "Stop all instances of a Pulsar Function")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid request"),
             @ApiResponse(code = 404, message = "The Pulsar Function does not 
exist"),
             @ApiResponse(code = 500, message = "Internal server error")
@@ -636,8 +640,9 @@ public class FunctionsBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Start an instance of a Pulsar Function", response = 
Void.class)
+    @ApiOperation(value = "Start an instance of a Pulsar Function")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid request"),
             @ApiResponse(code = 404, message = "The Pulsar Function does not 
exist"),
             @ApiResponse(code = 500, message = "Internal server error")
@@ -656,8 +661,9 @@ public class FunctionsBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Start all instances of a Pulsar Function", response 
= Void.class)
+    @ApiOperation(value = "Start all instances of a Pulsar Function")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid request"),
             @ApiResponse(code = 404, message = "The Pulsar Function does not 
exist"),
             @ApiResponse(code = 500, message = "Internal server error")
@@ -718,7 +724,8 @@ public class FunctionsBase extends AdminResource {
     @GET
     @ApiOperation(
             value = "Fetches a list of supported Pulsar IO connectors 
currently running in cluster mode",
-            response = List.class
+            response = ConnectorDefinition.class,
+            responseContainer = "List"
     )
     @ApiResponses(value = {
             @ApiResponse(code = 403, message = "The requester doesn't have 
admin permissions"),
@@ -739,6 +746,7 @@ public class FunctionsBase extends AdminResource {
             value = "Reload the built-in Functions"
     )
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 401, message = "This operation requires 
super-user access"),
             @ApiResponse(code = 503, message = "Function worker service is now 
initializing. Please try again later."),
             @ApiResponse(code = 500, message = "Internal server error")
@@ -768,6 +776,7 @@ public class FunctionsBase extends AdminResource {
     @PUT
     @ApiOperation(value = "Updates a Pulsar Function on the worker leader", 
hidden = true)
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 403, message = "The requester doesn't have 
super-user permissions"),
             @ApiResponse(code = 404, message = "The function does not exist"),
             @ApiResponse(code = 400, message = "Invalid request"),
diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/SinksBase.java
 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/SinksBase.java
index 80ad72d6f9a..0a76fe27e0a 100644
--- 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/SinksBase.java
+++ 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/SinksBase.java
@@ -389,8 +389,9 @@ public class SinksBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Restart an instance of a Pulsar Sink", response = 
Void.class)
+    @ApiOperation(value = "Restart an instance of a Pulsar Sink")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 307, message = "Current broker doesn't serve 
the namespace of this sink"),
             @ApiResponse(code = 400, message = "Invalid restart request"),
             @ApiResponse(code = 401, message = "The client is not authorized 
to perform this operation"),
@@ -415,8 +416,9 @@ public class SinksBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Restart all instances of a Pulsar Sink", response = 
Void.class)
+    @ApiOperation(value = "Restart all instances of a Pulsar Sink")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid restart request"),
             @ApiResponse(code = 401, message = "The client is not authorized 
to perform this operation"),
             @ApiResponse(code = 404, message = "The Pulsar Sink does not 
exist"),
@@ -436,8 +438,9 @@ public class SinksBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Stop an instance of a Pulsar Sink", response = 
Void.class)
+    @ApiOperation(value = "Stop an instance of a Pulsar Sink")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid stop request"),
             @ApiResponse(code = 404, message = "The Pulsar Sink instance does 
not exist"),
             @ApiResponse(code = 500, message =
@@ -460,8 +463,9 @@ public class SinksBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Stop all instances of a Pulsar Sink", response = 
Void.class)
+    @ApiOperation(value = "Stop all instances of a Pulsar Sink")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid stop request"),
             @ApiResponse(code = 404, message = "The Pulsar Sink does not 
exist"),
             @ApiResponse(code = 500, message =
@@ -481,8 +485,9 @@ public class SinksBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Start an instance of a Pulsar Sink", response = 
Void.class)
+    @ApiOperation(value = "Start an instance of a Pulsar Sink")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid start request"),
             @ApiResponse(code = 404, message = "The Pulsar Sink does not 
exist"),
             @ApiResponse(code = 500, message =
@@ -505,8 +510,9 @@ public class SinksBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Start all instances of a Pulsar Sink", response = 
Void.class)
+    @ApiOperation(value = "Start all instances of a Pulsar Sink")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid start request"),
             @ApiResponse(code = 404, message = "The Pulsar Sink does not 
exist"),
             @ApiResponse(code = 500, message =
diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/SourcesBase.java
 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/SourcesBase.java
index 4af0afc0d6e..0d037dd4236 100644
--- 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/SourcesBase.java
+++ 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/SourcesBase.java
@@ -323,7 +323,7 @@ public class SourcesBase extends AdminResource {
     @ApiOperation(
             value = "Lists all Pulsar Sources currently deployed in a given 
namespace",
             response = String.class,
-            responseContainer = "Collection"
+            responseContainer = "List"
     )
     @ApiResponses(value = {
             @ApiResponse(code = 400, message = "Invalid request"),
@@ -342,8 +342,9 @@ public class SourcesBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Restart an instance of a Pulsar Source", response = 
Void.class)
+    @ApiOperation(value = "Restart an instance of a Pulsar Source")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 307, message = "Current broker doesn't serve 
the namespace of this source"),
             @ApiResponse(code = 400, message = "Invalid request"),
             @ApiResponse(code = 401, message = "Client is not authorized to 
perform operation"),
@@ -365,8 +366,9 @@ public class SourcesBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Restart all instances of a Pulsar Source", response 
= Void.class)
+    @ApiOperation(value = "Restart all instances of a Pulsar Source")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid request"),
             @ApiResponse(code = 401, message = "Client is not authorized to 
perform operation"),
             @ApiResponse(code = 404, message = "Not Found(The Pulsar Source 
doesn't exist)"),
@@ -386,8 +388,9 @@ public class SourcesBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Stop instance of a Pulsar Source", response = 
Void.class)
+    @ApiOperation(value = "Stop instance of a Pulsar Source")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid request"),
             @ApiResponse(code = 401, message = "Client is not authorized to 
perform operation"),
             @ApiResponse(code = 404, message = "Not Found(The Pulsar Source 
doesn't exist)"),
@@ -407,8 +410,9 @@ public class SourcesBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Stop all instances of a Pulsar Source", response = 
Void.class)
+    @ApiOperation(value = "Stop all instances of a Pulsar Source")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid request"),
             @ApiResponse(code = 401, message = "Client is not authorized to 
perform operation"),
             @ApiResponse(code = 404, message = "Not Found(The Pulsar Source 
doesn't exist)"),
@@ -428,8 +432,9 @@ public class SourcesBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Start an instance of a Pulsar Source", response = 
Void.class)
+    @ApiOperation(value = "Start an instance of a Pulsar Source")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid request"),
             @ApiResponse(code = 401, message = "Client is not authorized to 
perform operation"),
             @ApiResponse(code = 404, message = "Not Found(The Pulsar Source 
doesn't exist)"),
@@ -449,8 +454,9 @@ public class SourcesBase extends AdminResource {
     }
 
     @POST
-    @ApiOperation(value = "Start all instances of a Pulsar Source", response = 
Void.class)
+    @ApiOperation(value = "Start all instances of a Pulsar Source")
     @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid request"),
             @ApiResponse(code = 401, message = "Client is not authorized to 
perform operation"),
             @ApiResponse(code = 404, message = "Not Found(The Pulsar Source 
doesn't exist)"),
diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/TenantsBase.java
 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/TenantsBase.java
index 93eb7f33faf..0d1f79a09dc 100644
--- 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/TenantsBase.java
+++ 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/TenantsBase.java
@@ -103,7 +103,9 @@ public class TenantsBase extends PulsarWebResource {
     @PUT
     @Path("/{tenant}")
     @ApiOperation(value = "Create a new tenant.", notes = "This operation 
requires Pulsar super-user privileges.")
-    @ApiResponses(value = {@ApiResponse(code = 403, message = "The requester 
doesn't have admin permissions"),
+    @ApiResponses(value = {
+            @ApiResponse(code = 204, message = "Operation successful"),
+            @ApiResponse(code = 403, message = "The requester doesn't have 
admin permissions"),
             @ApiResponse(code = 409, message = "Tenant already exists"),
             @ApiResponse(code = 412, message = "Tenant name is not valid"),
             @ApiResponse(code = 412, message = "Clusters can not be empty"),
@@ -156,7 +158,9 @@ public class TenantsBase extends PulsarWebResource {
     @Path("/{tenant}")
     @ApiOperation(value = "Update the admins for a tenant.",
             notes = "This operation requires Pulsar super-user privileges.")
-    @ApiResponses(value = {@ApiResponse(code = 403, message = "The requester 
doesn't have admin permissions"),
+    @ApiResponses(value = {
+            @ApiResponse(code = 204, message = "Operation successful"),
+            @ApiResponse(code = 403, message = "The requester doesn't have 
admin permissions"),
             @ApiResponse(code = 404, message = "Tenant does not exist"),
             @ApiResponse(code = 409, message = "Tenant already exists"),
             @ApiResponse(code = 412, message = "Clusters can not be empty"),
@@ -192,7 +196,9 @@ public class TenantsBase extends PulsarWebResource {
     @DELETE
     @Path("/{tenant}")
     @ApiOperation(value = "Delete a tenant and all namespaces and topics under 
it.")
-    @ApiResponses(value = {@ApiResponse(code = 403, message = "The requester 
doesn't have admin permissions"),
+    @ApiResponses(value = {
+            @ApiResponse(code = 204, message = "Operation successful"),
+            @ApiResponse(code = 403, message = "The requester doesn't have 
admin permissions"),
             @ApiResponse(code = 404, message = "Tenant does not exist"),
             @ApiResponse(code = 405, message = "Broker doesn't allow forced 
deletion of tenants"),
             @ApiResponse(code = 409, message = "The tenant still has active 
namespaces")})
diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ResourceGroups.java
 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ResourceGroups.java
index 52fd03b18ed..58f593e20ce 100644
--- 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ResourceGroups.java
+++ 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ResourceGroups.java
@@ -60,7 +60,9 @@ public class ResourceGroups extends ResourceGroupsBase {
     @PUT
     @Path("/{resourcegroup}")
     @ApiOperation(value = "Creates a new resourcegroup with the specified rate 
limiters")
-    @ApiResponses(value = {@ApiResponse(code = 403, message = "Don't have 
admin permission"),
+    @ApiResponses(value = {
+            @ApiResponse(code = 204, message = "Operation successful"),
+            @ApiResponse(code = 403, message = "Don't have admin permission"),
             @ApiResponse(code = 404, message = "cluster doesn't exist")})
     public void createOrUpdateResourceGroup(@PathParam("resourcegroup") String 
name,
                                     @ApiParam(value = "Rate limiters for the 
resourcegroup")
@@ -72,6 +74,7 @@ public class ResourceGroups extends ResourceGroupsBase {
     @Path("/{resourcegroup}")
     @ApiOperation(value = "Delete a resourcegroup.")
     @ApiResponses(value = {
+            @ApiResponse(code = 204, message = "Operation successful"),
             @ApiResponse(code = 403, message = "Don't have admin permission"),
             @ApiResponse(code = 404, message = "ResourceGroup doesn't exist"),
             @ApiResponse(code = 409, message = "ResourceGroup is in use")})
diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ResourceQuotas.java
 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ResourceQuotas.java
index 58ccc1c1028..d2884e8ea6f 100644
--- 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ResourceQuotas.java
+++ 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ResourceQuotas.java
@@ -75,7 +75,7 @@ public class ResourceQuotas extends ResourceQuotasBase {
 
     @GET
     @Path("/{tenant}/{namespace}/{bundle}")
-    @ApiOperation(value = "Get resource quota of a namespace bundle.")
+    @ApiOperation(value = "Get resource quota of a namespace bundle.", 
response = ResourceQuota.class)
     @ApiResponses(value = {
             @ApiResponse(code = 307, message = "Current broker doesn't serve 
the namespace"),
             @ApiResponse(code = 403, message = "Don't have admin permission"),
@@ -103,6 +103,7 @@ public class ResourceQuotas extends ResourceQuotasBase {
     @Path("/{tenant}/{namespace}/{bundle}")
     @ApiOperation(value = "Set resource quota on a namespace.")
     @ApiResponses(value = {
+            @ApiResponse(code = 204, message = "Operation successful"),
             @ApiResponse(code = 307, message = "Current broker doesn't serve 
the namespace"),
             @ApiResponse(code = 403, message = "Don't have admin permission"),
             @ApiResponse(code = 409, message = "Concurrent modification") })
@@ -133,6 +134,7 @@ public class ResourceQuotas extends ResourceQuotasBase {
     @Path("/{tenant}/{namespace}/{bundle}")
     @ApiOperation(value = "Remove resource quota for a namespace.")
     @ApiResponses(value = {
+            @ApiResponse(code = 204, message = "Operation successful"),
             @ApiResponse(code = 307, message = "Current broker doesn't serve 
the namespace"),
             @ApiResponse(code = 403, message = "Don't have admin permission"),
             @ApiResponse(code = 409, message = "Concurrent modification") })
diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Worker.java 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Worker.java
index 3813790e4f4..7178b565719 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Worker.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Worker.java
@@ -87,7 +87,9 @@ public class Worker extends AdminResource implements 
Supplier<WorkerService> {
     @GET
     @ApiOperation(
             value = "Fetches information about which Pulsar Functions are 
assigned to which Pulsar clusters",
-            response = Map.class
+            response = Map.class,
+            notes = "Returns a nested map structure which Swagger does not 
fully support for display."
+                    + "Structure: Map<String, Set<String>>. Please refer to 
this structure for details."
     )
     @ApiResponses(value = {
             @ApiResponse(code = 403, message = "The requester doesn't have 
admin permissions"),
@@ -102,7 +104,8 @@ public class Worker extends AdminResource implements 
Supplier<WorkerService> {
     @GET
     @ApiOperation(
             value = "Fetches a list of supported Pulsar IO connectors 
currently running in cluster mode",
-            response = List.class
+            response = ConnectorDefinition.class,
+            responseContainer = "List"
     )
     @ApiResponses(value = {
             @ApiResponse(code = 403, message = "The requester doesn't have 
admin permissions"),
@@ -120,6 +123,7 @@ public class Worker extends AdminResource implements 
Supplier<WorkerService> {
             value = "Triggers a rebalance of functions to workers"
     )
     @ApiResponses(value = {
+            @ApiResponse(code = 204, message = "Operation successful"),
             @ApiResponse(code = 403, message = "The requester doesn't have 
admin permissions"),
             @ApiResponse(code = 400, message = "Invalid request"),
             @ApiResponse(code = 408, message = "Request timeout")
@@ -134,6 +138,7 @@ public class Worker extends AdminResource implements 
Supplier<WorkerService> {
             value = "Drains the specified worker, i.e., moves its 
work-assignments to other workers"
     )
     @ApiResponses(value = {
+            @ApiResponse(code = 204, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid request"),
             @ApiResponse(code = 403, message = "The requester doesn't have 
admin permissions"),
             @ApiResponse(code = 408, message = "Request timeout"),
@@ -150,6 +155,7 @@ public class Worker extends AdminResource implements 
Supplier<WorkerService> {
             value = "Drains this worker, i.e., moves its work-assignments to 
other workers"
     )
     @ApiResponses(value = {
+            @ApiResponse(code = 204, message = "Operation successful"),
             @ApiResponse(code = 400, message = "Invalid request"),
             @ApiResponse(code = 403, message = "The requester doesn't have 
admin permissions"),
             @ApiResponse(code = 408, message = "Request timeout"),
diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Packages.java 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Packages.java
index 15e7b69554d..4ca7e3948ff 100644
--- 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Packages.java
+++ 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Packages.java
@@ -80,7 +80,7 @@ public class Packages extends PackagesBase {
     )
     @ApiResponses(
         value = {
-            @ApiResponse(code = 200, message = "Update the metadata of the 
specified package successfully."),
+            @ApiResponse(code = 204, message = "Update the metadata of the 
specified package successfully."),
             @ApiResponse(code = 404, message = "The specified package is not 
existent."),
             @ApiResponse(code = 412, message = "The package name is illegal."),
             @ApiResponse(code = 500, message = "Internal server error."),
@@ -113,7 +113,7 @@ public class Packages extends PackagesBase {
     )
     @ApiResponses(
         value = {
-            @ApiResponse(code = 200, message = "Upload the specified package 
successfully."),
+            @ApiResponse(code = 204, message = "Upload the specified package 
successfully."),
             @ApiResponse(code = 412, message = "The package name is illegal."),
             @ApiResponse(code = 500, message = "Internal server error."),
             @ApiResponse(code = 503, message = "Package Management Service is 
not enabled in the broker.")
@@ -169,7 +169,7 @@ public class Packages extends PackagesBase {
     @Path("/{type}/{tenant}/{namespace}/{packageName}/{version}")
     @ApiResponses(
         value = {
-            @ApiResponse(code = 200, message = "Delete the specified package 
successfully."),
+            @ApiResponse(code = 204, message = "Delete the specified package 
successfully."),
             @ApiResponse(code = 404, message = "The specified package is not 
existent."),
             @ApiResponse(code = 412, message = "The package name is illegal."),
             @ApiResponse(code = 500, message = "Internal server error."),
@@ -218,7 +218,8 @@ public class Packages extends PackagesBase {
     @Path("/{type}/{tenant}/{namespace}")
     @ApiOperation(
         value = "Get all the specified type packages in a namespace.",
-        response = PackageMetadata.class
+        response = PackageMetadata.class,
+        responseContainer = "List"
     )
     @ApiResponses(
         value = {
diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Transactions.java
 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Transactions.java
index 19a93db0b51..7e3806aa9b4 100644
--- 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Transactions.java
+++ 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Transactions.java
@@ -43,6 +43,17 @@ import org.apache.bookkeeper.mledger.impl.PositionImpl;
 import org.apache.pulsar.broker.admin.impl.TransactionsBase;
 import org.apache.pulsar.broker.service.BrokerServiceException;
 import org.apache.pulsar.broker.web.RestException;
+import org.apache.pulsar.common.policies.data.TransactionBufferInternalStats;
+import org.apache.pulsar.common.policies.data.TransactionBufferStats;
+import org.apache.pulsar.common.policies.data.TransactionCoordinatorInfo;
+import 
org.apache.pulsar.common.policies.data.TransactionCoordinatorInternalStats;
+import org.apache.pulsar.common.policies.data.TransactionCoordinatorStats;
+import org.apache.pulsar.common.policies.data.TransactionInBufferStats;
+import org.apache.pulsar.common.policies.data.TransactionInPendingAckStats;
+import org.apache.pulsar.common.policies.data.TransactionMetadata;
+import 
org.apache.pulsar.common.policies.data.TransactionPendingAckInternalStats;
+import org.apache.pulsar.common.policies.data.TransactionPendingAckStats;
+import org.apache.pulsar.common.stats.PositionInPendingAckStats;
 import org.apache.pulsar.common.util.FutureUtil;
 import org.jetbrains.annotations.Nullable;
 
@@ -55,7 +66,8 @@ public class Transactions extends TransactionsBase {
 
     @GET
     @Path("/coordinators")
-    @ApiOperation(value = "List transaction coordinators.")
+    @ApiOperation(value = "List transaction coordinators.",
+            response = TransactionCoordinatorInfo.class, responseContainer = 
"List")
     @ApiResponses(value = {@ApiResponse(code = 403, message = "Don't have 
admin permission"),
             @ApiResponse(code = 503, message = "This Broker is not "
                     + "configured with transactionCoordinatorEnabled=true.")})
@@ -66,7 +78,7 @@ public class Transactions extends TransactionsBase {
 
     @GET
     @Path("/coordinatorStats")
-    @ApiOperation(value = "Get transaction coordinator stats.")
+    @ApiOperation(value = "Get transaction coordinator stats.", response = 
TransactionCoordinatorStats.class)
     @ApiResponses(value = {@ApiResponse(code = 403, message = "Don't have 
admin permission"),
             @ApiResponse(code = 503, message = "This Broker is not "
                     + "configured with transactionCoordinatorEnabled=true."),
@@ -82,7 +94,7 @@ public class Transactions extends TransactionsBase {
 
     @GET
     
@Path("/transactionInBufferStats/{tenant}/{namespace}/{topic}/{mostSigBits}/{leastSigBits}")
-    @ApiOperation(value = "Get transaction state in transaction buffer.")
+    @ApiOperation(value = "Get transaction state in transaction buffer.", 
response = TransactionInBufferStats.class)
     @ApiResponses(value = {@ApiResponse(code = 403, message = "Don't have 
admin permission"),
             @ApiResponse(code = 404, message = "Tenant or cluster or namespace 
or topic doesn't exist"),
             @ApiResponse(code = 503, message = "This Broker is not configured "
@@ -119,7 +131,7 @@ public class Transactions extends TransactionsBase {
 
     @GET
     
@Path("/transactionInPendingAckStats/{tenant}/{namespace}/{topic}/{subName}/{mostSigBits}/{leastSigBits}")
-    @ApiOperation(value = "Get transaction state in pending ack.")
+    @ApiOperation(value = "Get transaction state in pending ack.", response = 
TransactionInPendingAckStats.class)
     @ApiResponses(value = {@ApiResponse(code = 403, message = "Don't have 
admin permission"),
             @ApiResponse(code = 404, message = "Tenant or cluster or namespace 
or topic doesn't exist"),
             @ApiResponse(code = 503, message = "This Broker is not configured "
@@ -157,7 +169,7 @@ public class Transactions extends TransactionsBase {
 
     @GET
     @Path("/transactionBufferStats/{tenant}/{namespace}/{topic}")
-    @ApiOperation(value = "Get transaction buffer stats in topic.")
+    @ApiOperation(value = "Get transaction buffer stats in topic.", response = 
TransactionBufferStats.class)
     @ApiResponses(value = {@ApiResponse(code = 403, message = "Don't have 
admin permission"),
             @ApiResponse(code = 404, message = "Tenant or cluster or namespace 
or topic doesn't exist"),
             @ApiResponse(code = 503, message = "This Broker is not configured "
@@ -195,7 +207,7 @@ public class Transactions extends TransactionsBase {
 
     @GET
     @Path("/pendingAckStats/{tenant}/{namespace}/{topic}/{subName}")
-    @ApiOperation(value = "Get transaction pending ack stats in topic.")
+    @ApiOperation(value = "Get transaction pending ack stats in topic.", 
response = TransactionPendingAckStats.class)
     @ApiResponses(value = {@ApiResponse(code = 403, message = "Don't have 
admin permission"),
             @ApiResponse(code = 404, message = "Tenant or cluster or namespace 
or topic or subName doesn't exist"),
             @ApiResponse(code = 503, message = "This Broker is not configured "
@@ -231,7 +243,7 @@ public class Transactions extends TransactionsBase {
 
     @GET
     @Path("/transactionMetadata/{mostSigBits}/{leastSigBits}")
-    @ApiOperation(value = "Get transaction metadata")
+    @ApiOperation(value = "Get transaction metadata", response = 
TransactionMetadata.class)
     @ApiResponses(value = {@ApiResponse(code = 403, message = "Don't have 
admin permission"),
             @ApiResponse(code = 404, message = "Tenant or cluster or namespace 
or topic "
                     + "or coordinator or transaction doesn't exist"),
@@ -252,7 +264,7 @@ public class Transactions extends TransactionsBase {
 
     @GET
     @Path("/slowTransactions/{timeout}")
-    @ApiOperation(value = "Get slow transactions.")
+    @ApiOperation(value = "Get slow transactions.", response = 
TransactionMetadata.class, responseContainer = "Map")
     @ApiResponses(value = {@ApiResponse(code = 403, message = "Don't have 
admin permission"),
             @ApiResponse(code = 404, message = "Tenant or cluster or namespace 
or topic "
                     + "or coordinator or transaction doesn't exist"),
@@ -272,7 +284,7 @@ public class Transactions extends TransactionsBase {
 
     @GET
     @Path("/coordinatorInternalStats/{coordinatorId}")
-    @ApiOperation(value = "Get coordinator internal stats.")
+    @ApiOperation(value = "Get coordinator internal stats.", response = 
TransactionCoordinatorInternalStats.class)
     @ApiResponses(value = {@ApiResponse(code = 403, message = "Don't have 
admin permission"),
             @ApiResponse(code = 503, message = "This Broker is not "
                     + "configured with transactionCoordinatorEnabled=true."),
@@ -290,7 +302,8 @@ public class Transactions extends TransactionsBase {
 
     @GET
     @Path("/pendingAckInternalStats/{tenant}/{namespace}/{topic}/{subName}")
-    @ApiOperation(value = "Get transaction pending ack internal stats.")
+    @ApiOperation(value = "Get transaction pending ack internal stats.",
+            response = TransactionPendingAckInternalStats.class)
     @ApiResponses(value = {@ApiResponse(code = 403, message = "Don't have 
admin permission"),
             @ApiResponse(code = 404, message = "Tenant or cluster or namespace 
or topic "
                     + "or subscription name doesn't exist"),
@@ -343,7 +356,7 @@ public class Transactions extends TransactionsBase {
 
     @GET
     @Path("/transactionBufferInternalStats/{tenant}/{namespace}/{topic}")
-    @ApiOperation(value = "Get transaction buffer internal stats.")
+    @ApiOperation(value = "Get transaction buffer internal stats.", response = 
TransactionBufferInternalStats.class)
     @ApiResponses(value = {
             @ApiResponse(code = 403, message = "Don't have admin permission"),
             @ApiResponse(code = 404, message = "Tenant or cluster or namespace 
or topic doesn't exist"),
@@ -379,6 +392,7 @@ public class Transactions extends TransactionsBase {
     @POST
     @Path("/transactionCoordinator/replicas")
     @ApiResponses(value = {
+            @ApiResponse(code = 204, message = "Operation successful"),
             @ApiResponse(code = 503, message = "This Broker is not configured "
                     + "with transactionCoordinatorEnabled=true."),
             @ApiResponse(code = 406, message = "The number of replicas should 
be more than "
@@ -401,7 +415,7 @@ public class Transactions extends TransactionsBase {
 
     @GET
     
@Path("/positionStatsInPendingAck/{tenant}/{namespace}/{topic}/{subName}/{ledgerId}/{entryId}")
-    @ApiOperation(value = "Get position stats in pending ack.")
+    @ApiOperation(value = "Get position stats in pending ack.", response = 
PositionInPendingAckStats.class)
     @ApiResponses(value = {@ApiResponse(code = 403, message = "Don't have 
admin permission"),
             @ApiResponse(code = 404, message = "Tenant or cluster or namespace 
or topic "
                     + "or subscription name doesn't exist"),
@@ -443,6 +457,7 @@ public class Transactions extends TransactionsBase {
     @Path("/abortTransaction/{mostSigBits}/{leastSigBits}")
     @ApiOperation(value = "Abort transaction")
     @ApiResponses(value = {
+            @ApiResponse(code = 204, message = "Operation successful"),
             @ApiResponse(code = 404, message = "Tenant or cluster or namespace 
or topic "
                     + "or coordinator or transaction doesn't exist"),
             @ApiResponse(code = 503, message = "This Broker is not configured "


Reply via email to