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/21 00:56:56 UTC

[pulsar] 10/15: Fix deleting tenants with active namespaces with 500. (#12848)

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 a0db36fd5c54e05180709f19317c0dfcdbb31063
Author: Jiwei Guo <te...@apache.org>
AuthorDate: Fri Nov 19 22:56:42 2021 +0800

    Fix deleting tenants with active namespaces with 500. (#12848)
    
    (cherry picked from commit 1646be2e29ed1109cc76b11081e829f30809362d)
---
 .../java/org/apache/pulsar/broker/resources/TenantResources.java  | 4 ++--
 .../java/org/apache/pulsar/broker/admin/impl/TenantsBase.java     | 6 +++++-
 .../test/java/org/apache/pulsar/broker/admin/AdminApiTest.java    | 8 ++++++++
 3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/TenantResources.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/TenantResources.java
index 9582057..36c88cf 100644
--- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/TenantResources.java
+++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/TenantResources.java
@@ -134,7 +134,7 @@ public class TenantResources extends BaseResources<TenantInfo> {
                             }
                             if (children != null && !children.isEmpty()) {
                                 checkNs.completeExceptionally(
-                                        new IllegalStateException("Tenant has active namespace"));
+                                        new IllegalStateException("The tenant still has active namespaces"));
                                 return;
                             }
                             String namespace = NamespaceName.get(tenant, clusterOrNamespace).toString();
@@ -145,7 +145,7 @@ public class TenantResources extends BaseResources<TenantInfo> {
                             getAsync(joinPath(BASE_POLICIES_PATH, namespace)).thenApply(data -> {
                                 if (data.isPresent()) {
                                     checkNs.completeExceptionally(new IllegalStateException(
-                                            "Tenant has active namespace"));
+                                            "The tenant still has active namespaces"));
                                 } else {
                                     checkNs.complete(null);
                                 }
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 c5f5402..209a532 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
@@ -268,7 +268,11 @@ public class TenantsBase extends PulsarWebResource {
                     .whenComplete((ignore, ex) -> {
                         if (ex != null) {
                             log.error("[{}] Failed to delete tenant {}", clientAppId(), tenant, ex);
-                            asyncResponse.resume(new RestException(ex));
+                            if (ex.getCause() instanceof IllegalStateException) {
+                                asyncResponse.resume(new RestException(Status.CONFLICT, ex.getCause()));
+                            } else {
+                                asyncResponse.resume(new RestException(ex));
+                            }
                         } else {
                             log.info("[{}] Deleted tenant {}", clientAppId(), tenant);
                             asyncResponse.resume(Response.noContent().build());
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 2c3f704..3e87f13 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
@@ -670,6 +670,14 @@ public class AdminApiTest extends MockedPulsarServiceBaseTest {
 
         assertEquals(admin.tenants().getTenantInfo("prop-xyz"), newTenantAdmin);
 
+        try {
+            admin.tenants().deleteTenant("prop-xyz");
+            fail("should have failed");
+        } catch (PulsarAdminException e) {
+            assertTrue(e instanceof ConflictException);
+            assertEquals(e.getStatusCode(), 409);
+            assertEquals(e.getMessage(), "The tenant still has active namespaces");
+        }
         admin.namespaces().deleteNamespace("prop-xyz/ns1");
         admin.tenants().deleteTenant("prop-xyz");
         assertEquals(admin.tenants().getTenants(), Lists.newArrayList());