-
Notifications
You must be signed in to change notification settings - Fork 3.7k
Description
Motivation
Currently, the Apache Pulsar has no restrictions on the topic name. For example, we allowed users to create topic with -partition- keyword, which is confusing for our developers to identify whether this is a partition of a partitioned topic. Plus, we need to add more logic to be compatible with this special topic name. for example:
- [fix][broker] Support deleting partitioned topics with the keyword
-partition-(#19230) #19240 - [fix][broker] Support deleting partitioned topics with the keyword
-partition-#19230 - [fix][broker] Allow user lookup topic name with
-partition-but no metadata #19171 - [fix][broker] Reject create non-existent persistent partitions #19086
- ...
Goal
This proposal aimed to add more restrictions for a topic name. that includes three parts as follows:
- Using
NamedEntityto validate the topic name characters. - Make the
-partition-string the keyword. That allows the user to use it when it's a partitioned topic.
Create a topic:
no corresponding partitioned topic
- persistent://public/default/local-name (passed)
- persistent://public/default/local-name-partition-z (rejected by keyword)
- persistent://public/default/local-name-partition-0 (rejected by keyword)
Has corresponding partitioned topic, partitions=2 and topic partition name is persistent://public/default/local-name
- persistent://public/default/local-name-partition-0 (passed, Because it is the partition topic's sub-partition)
- persistent://public/default/local-name-partition-z (rejected by keyword)
- persistent://public/default/local-name-partition-4 (rejected, Because it exceeds the number of maximum partitions)
Create a partitioned topic(topic metadata)
- persistent://public/default/local-name (passed)
- persistent://public/default/local-name-partition-z (rejected by keyword)
- persistent://public/default/local-name-partition-0 (rejected by keyword)
Compatibility
We will introduce the new configuration strictTopicNameEnabled to support compatibility. Users can easily disable it to get rid of the restrictions.
API Changes
Add a new configuration, strictTopicNameEnabled=false.
Implementation
- Add configuration
strictTopicNameEnabled=falseand make it dynamic. - Add topic name validation by
NamedEntity - Add partitioned topic rejection logic.
- Add warning logs to inform users that we do not recommend creating topics that name with the restrictions name when users disable
enableStrictTopicName. - Make
strictTopicNameEnabled=truein the next major release. and mark that this config will be removed in the future.