gaozhangmin commented on code in PR #16232:
URL: https://github.com/apache/pulsar/pull/16232#discussion_r907023347
##########
pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v1/PersistentTopics.java:
##########
@@ -356,12 +358,29 @@ public void unloadTopic(@Suspended final AsyncResponse
asyncResponse, @PathParam
@ApiResponse(code = 403, message = "Don't have admin permission"),
@ApiResponse(code = 404, message = "Topic does not exist"),
@ApiResponse(code = 412, message = "Topic has active
producers/subscriptions")})
- public void deleteTopic(@PathParam("property") String property,
@PathParam("cluster") String cluster,
+ public void deleteTopic(
+ @Suspended AsyncResponse asyncResponse,
+ @PathParam("property") String property, @PathParam("cluster")
String cluster,
@PathParam("namespace") String namespace, @PathParam("topic")
@Encoded String encodedTopic,
@QueryParam("force") @DefaultValue("false") boolean force,
@QueryParam("authoritative") @DefaultValue("false") boolean
authoritative) {
validateTopicName(property, cluster, namespace, encodedTopic);
- internalDeleteTopic(authoritative, force);
+ internalDeleteTopicAsync(authoritative, force)
+ .thenAccept(__ ->
asyncResponse.resume(Response.noContent().build()))
+ .exceptionally(ex -> {
+ Throwable t = FutureUtil.unwrapCompletionException(ex);
+ if (t instanceof
BrokerServiceException.TopicBusyException) {
Review Comment:
According to the previous code `internalDeleteTopicForcefully`, it didn't
catch `TopicBusyException` exception.
##########
pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java:
##########
@@ -1029,32 +1028,10 @@ private void
internalUnloadTransactionCoordinatorAsync(AsyncResponse asyncRespon
});
}
- protected void internalDeleteTopic(boolean authoritative, boolean force) {
- if (force) {
- internalDeleteTopicForcefully(authoritative);
- } else {
- internalDeleteTopic(authoritative);
- }
- }
-
- protected void internalDeleteTopic(boolean authoritative) {
- validateNamespaceOperation(topicName.getNamespaceObject(),
NamespaceOperation.DELETE_TOPIC);
- validateTopicOwnership(topicName, authoritative);
-
- try {
- pulsar().getBrokerService().deleteTopic(topicName.toString(),
false).get();
- log.info("[{}] Successfully removed topic {}", clientAppId(),
topicName);
- } catch (Exception e) {
- Throwable t = e.getCause();
- log.error("[{}] Failed to delete topic {}", clientAppId(),
topicName, t);
- if (t instanceof TopicBusyException) {
- throw new RestException(Status.PRECONDITION_FAILED, "Topic has
active producers/subscriptions");
- } else if (isManagedLedgerNotFoundException(e)) {
- throw new RestException(Status.NOT_FOUND,
getTopicNotFoundErrorMessage(topicName.toString()));
- } else {
- throw new RestException(t);
- }
- }
+ protected CompletableFuture<Void> internalDeleteTopicAsync(boolean
authoritative, boolean force) {
Review Comment:
It seems that `internalDeleteTopicForcefully ` is no longer used after this
change. maybe we should delete this unused method like `internalDeleteTopic `
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]