This is an automated email from the ASF dual-hosted git repository.
yuruguo 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 f4386c868b3 [fix][broker] Support getStats/update partitioned topic
with `-partition-` (#19235)
f4386c868b3 is described below
commit f4386c868b3100487ee075c75f4cb78ff9c1d971
Author: Ruguo Yu <[email protected]>
AuthorDate: Tue Jun 6 21:43:44 2023 +0800
[fix][broker] Support getStats/update partitioned topic with `-partition-`
(#19235)
---
.../apache/pulsar/broker/admin/v2/NonPersistentTopics.java | 6 +++++-
.../org/apache/pulsar/broker/admin/v2/PersistentTopics.java | 12 ++++++++++--
.../persistent/PartitionKeywordCompatibilityTest.java | 3 +++
3 files changed, 18 insertions(+), 3 deletions(-)
diff --git
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/NonPersistentTopics.java
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/NonPersistentTopics.java
index cc269d02831..a21aff3b365 100644
---
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/NonPersistentTopics.java
+++
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/NonPersistentTopics.java
@@ -217,7 +217,11 @@ public class NonPersistentTopics extends PersistentTopics {
@ApiParam(value = "If return the earliest time in backlog")
@QueryParam("getEarliestTimeInBacklog") @DefaultValue("false")
boolean getEarliestTimeInBacklog) {
try {
- validatePartitionedTopicName(tenant, namespace, encodedTopic);
+ validateTopicName(tenant, namespace, encodedTopic);
+ if (topicName.isPartitioned()) {
+ throw new RestException(Response.Status.PRECONDITION_FAILED,
+ "Partitioned Topic Name should not contain
'-partition-'");
+ }
if (topicName.isGlobal()) {
try {
validateGlobalNamespaceOwnership(namespaceName);
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 eee363aeed8..0fac3a8e005 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
@@ -810,7 +810,11 @@ public class PersistentTopics extends PersistentTopicsBase
{
@ApiParam(value = "The number of partitions for the topic",
required = true, type = "int", defaultValue = "0")
int numPartitions) {
- validatePartitionedTopicName(tenant, namespace, encodedTopic);
+ validateTopicName(tenant, namespace, encodedTopic);
+ if (topicName.isPartitioned()) {
+ throw new RestException(Response.Status.PRECONDITION_FAILED,
+ "Partitioned Topic Name should not contain '-partition-'");
+ }
validateTopicPolicyOperationAsync(topicName, PolicyName.PARTITION,
PolicyOperation.WRITE)
.thenCompose(__ ->
internalUpdatePartitionedTopicAsync(numPartitions, updateLocalTopic, force))
.thenAccept(__ -> {
@@ -1286,7 +1290,11 @@ public class PersistentTopics extends
PersistentTopicsBase {
@ApiParam(value = "If return the earliest time in backlog")
@QueryParam("getEarliestTimeInBacklog") @DefaultValue("false")
boolean getEarliestTimeInBacklog) {
try {
- validatePartitionedTopicName(tenant, namespace, encodedTopic);
+ validateTopicName(tenant, namespace, encodedTopic);
+ if (topicName.isPartitioned()) {
+ throw new RestException(Response.Status.PRECONDITION_FAILED,
+ "Partitioned Topic Name should not contain
'-partition-'");
+ }
internalGetPartitionedStats(asyncResponse, authoritative,
perPartition, getPreciseBacklog,
subscriptionBacklogSize, getEarliestTimeInBacklog);
} catch (WebApplicationException wae) {
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PartitionKeywordCompatibilityTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PartitionKeywordCompatibilityTest.java
index 86a5fcdc05a..3eabb12b889 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PartitionKeywordCompatibilityTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PartitionKeywordCompatibilityTest.java
@@ -28,6 +28,7 @@ import org.apache.pulsar.client.api.PulsarClientException;
import org.apache.pulsar.client.api.SubscriptionType;
import org.apache.pulsar.common.naming.TopicName;
import org.apache.pulsar.common.policies.data.AutoTopicCreationOverride;
+import org.apache.pulsar.common.policies.data.PartitionedTopicStats;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
@@ -70,6 +71,8 @@ public class PartitionKeywordCompatibilityTest extends
BrokerTestBase {
Assert.assertTrue(topics.contains(TopicName.get(topicName).getPartition(0).toString()));
Assert.assertTrue(partitionedTopicList.contains(topicName));
consumer.close();
+ PartitionedTopicStats stats =
admin.topics().getPartitionedStats(topicName, false);
+ Assert.assertEquals(stats.getSubscriptions().size(), 1);
admin.topics().deletePartitionedTopic(topicName);
topics = admin.topics().getList("public/default");
partitionedTopicList =
admin.topics().getPartitionedTopicList("public/default");