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
NamedEntity
to 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=false
and 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=true
in the next major release. and mark that this config will be removed in the future.