Hi : issue link : https://github.com/streamnative/support-tickets/issues/408 <https://github.com/streamnative/support-tickets/issues/408>
# Background Now we have many clear namespace backlog interfaces etc. ``` clearNamespaceBacklog(String namespace) clearNamespaceBacklogAsync(String namespace) clearNamespaceBacklogForSubscription(String namespace, String subscription) clearNamespaceBacklogForSubscriptionAsync(String namespace, String subscription) clearNamespaceBundleBacklog(String namespace, String bundle) clearNamespaceBundleBacklogAsync(String namespace, String bundle) clearNamespaceBundleBacklogForSubscription(String namespace, String bundle, String subscription) clearNamespaceBundleBacklogForSubscriptionAsync(String namespace, String bundle, String subscription) ``` There are two types of interfaces: 1. clear namespace backlog with subscriptionName 2. clear namespace backlog no subscriptionName But there have a problem, users do not know that there are many system topics in the namespace. ``` /** * Local topic name for the namespace events. */ public static final String NAMESPACE_EVENTS_LOCAL_NAME = "__change_events"; /** * Local topic name for the transaction buffer snapshot. */ public static final String TRANSACTION_BUFFER_SNAPSHOT = "__transaction_buffer_snapshot"; public static final String SUBSCRIPTION_NAME = "transaction-buffer-sub"; ``` User only want to clear the backlog witch they own created and sub. But now we have clear the system topic sub backlog when user don't specify subName and clear system sub with a topic witch user created. It will bring many problems. etc. 1. clear `NAMESPACE_EVENTS_LOCAL_NAME` will clear any topic policy in this namespace, but user don't know and they don't want to be cleared. If the user does not understand the problems caused by this interface, it will delete many topic policy configurations and is difficult to recover, which will lead to unpredictable and disastrous problems. 2. clear `TRANSACTION_BUFFER_SNAPSHOT` topic backlog will cause transaction buffer recover incompletely. 3. clear `transaction-buffer-sub` sub also will cause transaction buffer recover incompletely. 4. if add new system topic and system sub, we should think about this problem. # Motivation We want to solve the above problems, but we can't make users unable to delete the backlog of system topic and system sub. So, we should solve types of interface There are two types of interfaces: 1. clear namespace backlog with subscriptionName 2. clear namespace backlog no subscriptionName when clear namespace backlog no subscriptionName: It represents user know the sub name is system subName and really want to delete it, We should not block the user clear system sub backlog and do not allow the user to create system sub. If the user uses it, it means that the user has considered the result of the clear system sub backlog when clear namespace backlog with subscriptionName: Because the user may not consider the existence of system topic and system sub, and the wrong clear backlog may lead to serious results. Therefore, this interface cannot delete the backlog of system topic and the backlog of system sub. If the user really wants to clear backlog, please bring subscriptionName and use another type of interface with subscriptionName. **Clear namespace and clear namespace bundle all need to handle is logical.** # implement ``` class SystemTopicName { /** * Local topic name for the namespace events. */ public static final String NAMESPACE_EVENTS_LOCAL_NAME = "__change_events"; /** * Local topic name for the transaction buffer snapshot. */ public static final String TRANSACTION_BUFFER_SNAPSHOT = "__transaction_buffer_snapshot"; } ``` ``` class SystemSubName { public static final String SUBSCRIPTION_NAME = "transaction-buffer-sub"; } ``` 1. In order to make the code easier to maintain and reduce redundancy, we need to move systemTopic and systemSub to a specific classes to manage. 2. If the newly added systemTopic and systemSub are created from this class, unpredictable problems can be prevented Let me know if you have different ideas or suggestions!! Thanks! Bo Cong