You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by mm...@apache.org on 2020/08/06 20:30:41 UTC
[pulsar] 01/01: Ensure deleting a partitioned-topic on a non
existing namespace returns 404
This is an automated email from the ASF dual-hosted git repository.
mmerli pushed a commit to branch delete-topic-idempotent
in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit ebe9e6802b6d73038c422526317b75eeee2bcef4
Author: Matteo Merli <mm...@apache.org>
AuthorDate: Thu Aug 6 13:27:02 2020 -0700
Ensure deleting a partitioned-topic on a non existing namespace returns 404
---
.../broker/admin/impl/PersistentTopicsBase.java | 2 +-
.../apache/pulsar/broker/admin/NamespacesTest.java | 58 ++++++++++++++++++++++
2 files changed, 59 insertions(+), 1 deletion(-)
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java
index 866180f..835a5fe 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java
@@ -613,7 +613,7 @@ public class PersistentTopicsBase extends AdminResource {
return;
}
final CompletableFuture<Void> future = new CompletableFuture<>();
- getPartitionedTopicMetadataAsync(topicName, authoritative, false).thenAccept(partitionMeta -> {
+ pulsar().getBrokerService().fetchPartitionedTopicMetadataAsync(topicName).thenAccept(partitionMeta -> {
final int numPartitions = partitionMeta.partitions;
if (numPartitions > 0) {
final AtomicInteger count = new AtomicInteger(numPartitions);
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 21235b6..5158352 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
@@ -69,6 +69,7 @@ import org.apache.pulsar.broker.namespace.OwnershipCache;
import org.apache.pulsar.broker.web.PulsarWebResource;
import org.apache.pulsar.broker.web.RestException;
import org.apache.pulsar.client.admin.PulsarAdminException;
+import org.apache.pulsar.client.admin.PulsarAdminException.NotFoundException;
import org.apache.pulsar.client.api.Consumer;
import org.apache.pulsar.client.api.Producer;
import org.apache.pulsar.client.api.SubscriptionType;
@@ -1298,4 +1299,61 @@ public class NamespacesTest extends MockedPulsarServiceBaseTest {
doReturn(true).when(nsSvc)
.isServiceUnitOwned(Mockito.argThat(bundle -> bundle.getNamespaceObject().equals(namespace)));
}
+
+ @Test
+ public void testDeleteNonPartitionedTopicMultipleTimes() throws Exception {
+ String namespace = this.testTenant + "/namespace-" + System.nanoTime();
+ String topic = namespace + "/topic";
+
+ admin.namespaces().createNamespace(namespace, Sets.newHashSet(testLocalCluster));
+
+ admin.topics().createNonPartitionedTopic(topic);
+
+ admin.topics().delete(topic);
+
+ try {
+ admin.topics().delete(topic);
+ fail("should have failed");
+ } catch (NotFoundException e) {
+ // Expected
+ }
+
+ admin.namespaces().deleteNamespace(namespace);
+
+ try {
+ admin.topics().delete(topic);
+ fail("should have failed");
+ } catch (NotFoundException e) {
+ // Expected
+ }
+ }
+
+ @Test
+ public void testDeletePartitionedTopicMultipleTimes() throws Exception {
+ String namespace = this.testTenant + "/namespace-" + System.nanoTime();
+ String topic = namespace + "/topic";
+
+ admin.namespaces().createNamespace(namespace, Sets.newHashSet(testLocalCluster));
+
+ admin.topics().createPartitionedTopic(topic, 3);
+ assertEquals(admin.topics().getPartitionedTopicMetadata(topic).partitions, 3);
+
+ admin.topics().deletePartitionedTopic(topic);
+
+ try {
+ admin.topics().deletePartitionedTopic(topic);
+ fail("should have failed");
+ } catch (NotFoundException e) {
+ // Expected
+ }
+
+ admin.namespaces().deleteNamespace(namespace);
+
+ try {
+ admin.topics().deletePartitionedTopic(topic);
+ fail("should have failed");
+ } catch (NotFoundException e) {
+ // Expected
+ }
+ }
}
\ No newline at end of file