The original discussion mail : https://lists.apache.org/thread/m9dkhq1fs6stsdwh78h84fsl5hs5v67f
Introduce the ability to store metadata about topics.
This would be very useful as with metadata you could add labels and other pieces of information that would allow defining the purpose of a topic, custom application-level properties. This feature will allow application-level diagnostic tools and maintenance tools to not need external databases to store such metadata.
Imagine that we could add a simple key value map (String keys and String values) to the topic. These metadata could be set during topic creation and also updated.
We need to add a map type field called metadata
to the below methods signature:
PersistentTopics#createPartitionedTopic(AsyncResponse asyncResponse, String tenant, String namespace,String encodedTopic,int numPartitions,boolean createLocalTopicOnly, Map<String, String> metadata);
PersistentTopics#createNonPartitionedTopic(String tenant, String namespace, String encodedTopic, boolean authoritative, Map<String, String> metadata);
For PartitionedTopic We will put these metadata to the PartitionedTopicMetadata, serialized to store in configurationMetadataStore, like partitioned-topic partitions.
public class PartitionedTopicMetadata { /* Number of partitions for the topic */ public int partitions; /* Topic metadata */ public Map<String, String> metadata;
For NonPartitionedTopic We will store the metadata to ML(ManagedLedger) which already supports storing custom properties.
ManagedLedger#setProperties(Map<String, String> properties)
The proposal will not introduce any compatibility issues.
Unit tests & integration tests