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