This is an automated email from the ASF dual-hosted git repository.
yubiao pushed a commit to branch branch-2.11
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/branch-2.11 by this push:
new 420663e624a [fix] [admin] Make response code to 400 instead of 500
when delete topic fails due to enabled geo-replication (#19879)
420663e624a is described below
commit 420663e624a40dadd4b4caedb58dcdfe34d6ae27
Author: fengyubiao <[email protected]>
AuthorDate: Wed Mar 22 16:49:13 2023 +0800
[fix] [admin] Make response code to 400 instead of 500 when delete topic
fails due to enabled geo-replication (#19879)
Motivation: As expected, If geo-replication is enabled, a topic cannot be
deleted. However deleting that topic returns a 500, and no further info.
Modifications: Make response code to 400 instead of 500 when delete topic
fails due to enabled geo-replication
(cherry picked from commit a9037334a399af905fae94d2aefa5db339cbd5b1)
---
.../pulsar/broker/admin/v2/PersistentTopics.java | 4 +++-
.../pulsar/broker/service/ReplicatorTest.java | 28 ++++++++++++++++++++++
2 files changed, 31 insertions(+), 1 deletion(-)
diff --git
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/PersistentTopics.java
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/PersistentTopics.java
index f5b120f67a5..b0266f74106 100644
---
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/PersistentTopics.java
+++
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/PersistentTopics.java
@@ -1074,7 +1074,9 @@ public class PersistentTopics extends
PersistentTopicsBase {
ex = new
RestException(Response.Status.PRECONDITION_FAILED,
t.getMessage());
}
- if (isManagedLedgerNotFoundException(t)) {
+ if (t instanceof IllegalStateException){
+ ex = new RestException(422/* Unprocessable entity*/,
t.getMessage());
+ } else if (isManagedLedgerNotFoundException(t)) {
ex = new RestException(Response.Status.NOT_FOUND,
getTopicNotFoundErrorMessage(topicName.toString()));
} else if (!isRedirectException(ex)) {
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorTest.java
index 3bf96794b44..77d2ea9f680 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorTest.java
@@ -70,6 +70,7 @@ import
org.apache.pulsar.broker.service.BrokerServiceException.NamingException;
import org.apache.pulsar.broker.service.persistent.PersistentReplicator;
import org.apache.pulsar.broker.service.persistent.PersistentTopic;
import org.apache.pulsar.client.admin.PulsarAdmin;
+import org.apache.pulsar.client.admin.PulsarAdminException;
import org.apache.pulsar.client.api.Consumer;
import org.apache.pulsar.client.api.Message;
import org.apache.pulsar.client.api.MessageId;
@@ -870,6 +871,33 @@ public class ReplicatorTest extends ReplicatorTestBase {
assertNull(producer);
}
+ @Test
+ public void testDeleteTopicFailure() throws Exception {
+ final String topicName =
BrokerTestUtil.newUniqueName("persistent://pulsar/ns/tp_" + UUID.randomUUID());
+ admin1.topics().createNonPartitionedTopic(topicName);
+ try {
+ admin1.topics().delete(topicName);
+ fail("Delete topic should fail if enabled replicator");
+ } catch (Exception ex) {
+ assertTrue(ex instanceof PulsarAdminException);
+ assertEquals(((PulsarAdminException) ex).getStatusCode(), 422/*
Unprocessable entity*/);
+ }
+ }
+
+ @Test
+ public void testDeletePartitionedTopicFailure() throws Exception {
+ final String topicName =
BrokerTestUtil.newUniqueName("persistent://pulsar/ns/tp_" + UUID.randomUUID());
+ admin1.topics().createPartitionedTopic(topicName, 2);
+ admin1.topics().createSubscription(topicName, "sub1",
MessageId.earliest);
+ try {
+ admin1.topics().deletePartitionedTopic(topicName);
+ fail("Delete topic should fail if enabled replicator");
+ } catch (Exception ex) {
+ assertTrue(ex instanceof PulsarAdminException);
+ assertEquals(((PulsarAdminException) ex).getStatusCode(), 422/*
Unprocessable entity*/);
+ }
+ }
+
@Test(priority = 4, timeOut = 30000)
public void testReplicatorProducerName() throws Exception {
log.info("--- Starting ReplicatorTest::testReplicatorProducerName
---");