You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by te...@apache.org on 2022/08/11 01:40:58 UTC
[pulsar] branch master updated: [improve][admin] Not allow to terminate system topic. (#17006)
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 96930fda8a7 [improve][admin] Not allow to terminate system topic. (#17006)
96930fda8a7 is described below
commit 96930fda8a7776aaf6e61235a1d77ffe6e564052
Author: Jiwei Guo <te...@apache.org>
AuthorDate: Thu Aug 11 09:40:52 2022 +0800
[improve][admin] Not allow to terminate system topic. (#17006)
---
.../pulsar/broker/admin/impl/PersistentTopicsBase.java | 5 +++++
.../org/apache/pulsar/broker/admin/AdminApi2Test.java | 15 +++++++++++++++
2 files changed, 20 insertions(+)
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 4b635f205e3..de11d49d773 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
@@ -102,6 +102,7 @@ import org.apache.pulsar.common.compression.CompressionCodec;
import org.apache.pulsar.common.compression.CompressionCodecProvider;
import org.apache.pulsar.common.naming.NamespaceBundle;
import org.apache.pulsar.common.naming.PartitionedManagedLedgerInfo;
+import org.apache.pulsar.common.naming.SystemTopicNames;
import org.apache.pulsar.common.naming.TopicDomain;
import org.apache.pulsar.common.naming.TopicName;
import org.apache.pulsar.common.partition.PartitionedTopicMetadata;
@@ -3688,6 +3689,10 @@ public class PersistentTopicsBase extends AdminResource {
throw new RestException(Status.METHOD_NOT_ALLOWED,
"Termination of a partitioned topic is not allowed");
}
+ if (SystemTopicNames.isSystemTopic(topicName)) {
+ throw new RestException(Status.METHOD_NOT_ALLOWED,
+ "Termination of a system topic is not allowed");
+ }
})
.thenCompose(__ -> getTopicReferenceAsync(topicName))
.thenCompose(topic -> {
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java
index 1fedcbf7318..410ad097f6a 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java
@@ -28,6 +28,7 @@ import static org.testng.Assert.assertNotEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.expectThrows;
import static org.testng.Assert.fail;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -2533,4 +2534,18 @@ public class AdminApi2Test extends MockedPulsarServiceBaseTest {
ListNamespaceTopicsOptions.builder().mode(Mode.NON_PERSISTENT).build());
Assert.assertTrue(notPersistentTopics.contains(nonPersistentTopic));
}
+
+ @Test
+ private void testTerminateSystemTopic() throws Exception {
+ final String topic = "persistent://prop-xyz/ns1/testTerminateSystemTopic";
+ admin.topics().createNonPartitionedTopic(topic);
+ final String eventTopic = "persistent://prop-xyz/ns1/__change_events";
+ admin.topicPolicies().setMaxConsumers(topic, 2);
+ Awaitility.await().untilAsserted(() -> {
+ Assert.assertEquals(admin.topicPolicies().getMaxConsumers(topic), Integer.valueOf(2));
+ });
+ PulsarAdminException ex = expectThrows(PulsarAdminException.class,
+ () -> admin.topics().terminateTopic(eventTopic));
+ assertTrue(ex instanceof PulsarAdminException.NotAllowedException);
+ }
}