Skip to content

Commit f4386c8

Browse files
authored
[fix][broker] Support getStats/update partitioned topic with -partition- (#19235)
1 parent d7f3558 commit f4386c8

3 files changed

Lines changed: 18 additions & 3 deletions

File tree

pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/NonPersistentTopics.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,11 @@ public void getPartitionedStats(
217217
@ApiParam(value = "If return the earliest time in backlog")
218218
@QueryParam("getEarliestTimeInBacklog") @DefaultValue("false") boolean getEarliestTimeInBacklog) {
219219
try {
220-
validatePartitionedTopicName(tenant, namespace, encodedTopic);
220+
validateTopicName(tenant, namespace, encodedTopic);
221+
if (topicName.isPartitioned()) {
222+
throw new RestException(Response.Status.PRECONDITION_FAILED,
223+
"Partitioned Topic Name should not contain '-partition-'");
224+
}
221225
if (topicName.isGlobal()) {
222226
try {
223227
validateGlobalNamespaceOwnership(namespaceName);

pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/PersistentTopics.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -810,7 +810,11 @@ public void updatePartitionedTopic(
810810
@ApiParam(value = "The number of partitions for the topic",
811811
required = true, type = "int", defaultValue = "0")
812812
int numPartitions) {
813-
validatePartitionedTopicName(tenant, namespace, encodedTopic);
813+
validateTopicName(tenant, namespace, encodedTopic);
814+
if (topicName.isPartitioned()) {
815+
throw new RestException(Response.Status.PRECONDITION_FAILED,
816+
"Partitioned Topic Name should not contain '-partition-'");
817+
}
814818
validateTopicPolicyOperationAsync(topicName, PolicyName.PARTITION, PolicyOperation.WRITE)
815819
.thenCompose(__ -> internalUpdatePartitionedTopicAsync(numPartitions, updateLocalTopic, force))
816820
.thenAccept(__ -> {
@@ -1286,7 +1290,11 @@ public void getPartitionedStats(
12861290
@ApiParam(value = "If return the earliest time in backlog")
12871291
@QueryParam("getEarliestTimeInBacklog") @DefaultValue("false") boolean getEarliestTimeInBacklog) {
12881292
try {
1289-
validatePartitionedTopicName(tenant, namespace, encodedTopic);
1293+
validateTopicName(tenant, namespace, encodedTopic);
1294+
if (topicName.isPartitioned()) {
1295+
throw new RestException(Response.Status.PRECONDITION_FAILED,
1296+
"Partitioned Topic Name should not contain '-partition-'");
1297+
}
12901298
internalGetPartitionedStats(asyncResponse, authoritative, perPartition, getPreciseBacklog,
12911299
subscriptionBacklogSize, getEarliestTimeInBacklog);
12921300
} catch (WebApplicationException wae) {

pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PartitionKeywordCompatibilityTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.apache.pulsar.client.api.SubscriptionType;
2929
import org.apache.pulsar.common.naming.TopicName;
3030
import org.apache.pulsar.common.policies.data.AutoTopicCreationOverride;
31+
import org.apache.pulsar.common.policies.data.PartitionedTopicStats;
3132
import org.testng.Assert;
3233
import org.testng.annotations.AfterClass;
3334
import org.testng.annotations.BeforeClass;
@@ -70,6 +71,8 @@ public void testAutoCreatePartitionTopicWithKeywordAndDeleteIt()
7071
Assert.assertTrue(topics.contains(TopicName.get(topicName).getPartition(0).toString()));
7172
Assert.assertTrue(partitionedTopicList.contains(topicName));
7273
consumer.close();
74+
PartitionedTopicStats stats = admin.topics().getPartitionedStats(topicName, false);
75+
Assert.assertEquals(stats.getSubscriptions().size(), 1);
7376
admin.topics().deletePartitionedTopic(topicName);
7477
topics = admin.topics().getList("public/default");
7578
partitionedTopicList = admin.topics().getPartitionedTopicList("public/default");

0 commit comments

Comments
 (0)