diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Namespaces.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Namespaces.java index cf84374f34bc9..e14ea8f01ad74 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Namespaces.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Namespaces.java @@ -19,6 +19,7 @@ package org.apache.pulsar.broker.admin.v2; import static org.apache.pulsar.common.policies.data.PoliciesUtil.getBundles; +import com.google.common.collect.Sets; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -1615,6 +1616,18 @@ public void setSubscriptionTypesEnabled( internalSetSubscriptionTypesEnabled(subscriptionTypesEnabled); } + @DELETE + @Path("/{tenant}/{namespace}/subscriptionTypesEnabled") + @ApiOperation(value = " Remove subscription types enabled on a namespace.") + @ApiResponses(value = { + @ApiResponse(code = 403, message = "Don't have admin permission"), + @ApiResponse(code = 404, message = "Tenant or Namespace does not exist"), + @ApiResponse(code = 409, message = "Concurrent modification")}) + public void removeSubscriptionTypesEnabled(@PathParam("tenant") String tenant, + @PathParam("namespace") String namespace) { + validateNamespaceName(tenant, namespace); + internalSetSubscriptionTypesEnabled(Sets.newHashSet()); + } @GET @Path("/{tenant}/{namespace}/schemaValidationEnforced") diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java index 9a366a2cc7c1a..e59f42d6d97ee 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java @@ -1698,8 +1698,8 @@ public void testSubscriptionTypesEnabled() throws PulsarAdminException, PulsarCl } // clear all namespace subType enabled, add failover to broker.conf and sub with shared will fail - subscriptionTypes.clear(); - admin.namespaces().setSubscriptionTypesEnabled(namespace, subscriptionTypes); + admin.namespaces().removeSubscriptionTypesEnabled(namespace); + assertEquals(admin.namespaces().getSubscriptionTypesEnabled(namespace), Sets.newHashSet()); consumerBuilder.subscriptionType(SubscriptionType.Shared); HashSet subscriptions = new HashSet<>(); subscriptions.add("Failover"); diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/Namespaces.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/Namespaces.java index 6ea4bab025cd3..ccd69ed8cabf3 100644 --- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/Namespaces.java +++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/Namespaces.java @@ -1396,6 +1396,31 @@ CompletableFuture setSubscriptionTypesEnabledAsync(String namespace, */ CompletableFuture> getSubscriptionTypesEnabledAsync(String namespace); + /** + * Removes the subscriptionTypesEnabled policy for a given namespace. + * + * @param namespace + * Namespace name + * + * @throws NotAuthorizedException + * Don't have admin permission + * @throws NotFoundException + * Namespace does not exist + * @throws PulsarAdminException + * Unexpected error + * @return + */ + void removeSubscriptionTypesEnabled(String namespace) throws PulsarAdminException; + + /** + * Removes the subscriptionTypesEnabled policy for a given namespace. + * + * @param namespace + * Namespace name + * @return + */ + CompletableFuture removeSubscriptionTypesEnabledAsync(String namespace); + /** * Removes the autoSubscriptionCreation policy for a given namespace. *

diff --git a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/NamespacesImpl.java b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/NamespacesImpl.java index 610423b18c101..a4eb390a3d407 100644 --- a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/NamespacesImpl.java +++ b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/NamespacesImpl.java @@ -1098,6 +1098,27 @@ public void failed(Throwable throwable) { return future; } + @Override + public void removeSubscriptionTypesEnabled(String namespace) throws PulsarAdminException { + try { + removeSubscriptionTypesEnabledAsync(namespace).get(this.readTimeoutMs, TimeUnit.MILLISECONDS); + } catch (ExecutionException e) { + throw (PulsarAdminException) e.getCause(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new PulsarAdminException(e); + } catch (TimeoutException e) { + throw new PulsarAdminException.TimeoutException(e); + } + } + + @Override + public CompletableFuture removeSubscriptionTypesEnabledAsync(String namespace) { + NamespaceName ns = NamespaceName.get(namespace); + WebTarget path = namespacePath(ns, "subscriptionTypesEnabled"); + return asyncDeleteRequest(path); + } + @Override public void removeAutoSubscriptionCreation(String namespace) throws PulsarAdminException { try { diff --git a/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/PulsarAdminToolTest.java b/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/PulsarAdminToolTest.java index 60fb6acf1d9a6..d75ec9a40898a 100644 --- a/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/PulsarAdminToolTest.java +++ b/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/PulsarAdminToolTest.java @@ -368,6 +368,9 @@ public void namespaces() throws Exception { namespaces.run(split("get-subscription-types-enabled myprop/clust/ns1")); verify(mockNamespaces).getSubscriptionTypesEnabled("myprop/clust/ns1"); + namespaces.run(split("remove-subscription-types-enabled myprop/clust/ns1")); + verify(mockNamespaces).removeSubscriptionTypesEnabled("myprop/clust/ns1"); + namespaces.run(split("get-schema-validation-enforce myprop/clust/ns1 -ap")); verify(mockNamespaces).getSchemaValidationEnforced("myprop/clust/ns1", true); diff --git a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdNamespaces.java b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdNamespaces.java index c642288383aeb..d379b7fbb33c6 100644 --- a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdNamespaces.java +++ b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdNamespaces.java @@ -342,6 +342,18 @@ void run() throws PulsarAdminException { } } + @Parameters(commandDescription = "Remove subscription types enabled for a namespace") + private class RemoveSubscriptionTypesEnabled extends CliCommand { + @Parameter(description = "tenant/namespace", required = true) + private java.util.List params; + + @Override + void run() throws PulsarAdminException { + String namespace = validateNamespace(params); + getAdmin().namespaces().removeSubscriptionTypesEnabled(namespace); + } + } + @Parameters(commandDescription = "Set Message TTL for a namespace") private class SetMessageTTL extends CliCommand { @Parameter(description = "tenant/namespace", required = true) @@ -2336,6 +2348,7 @@ public CmdNamespaces(Supplier admin) { jcommander.addCommand("set-subscription-types-enabled", new SetSubscriptionTypesEnabled()); jcommander.addCommand("get-subscription-types-enabled", new GetSubscriptionTypesEnabled()); + jcommander.addCommand("remove-subscription-types-enabled", new RemoveSubscriptionTypesEnabled()); jcommander.addCommand("get-backlog-quotas", new GetBacklogQuotaMap()); jcommander.addCommand("set-backlog-quota", new SetBacklogQuota());