[Enhancement] Improve Lite subscription quota validation for remove actions
- Dominant language
- Java
- Stars
- 22.6k
- Forks
- 12k
- Avg merge
- 3d 1h
- Merged PRs (30d)
- 27
Description
### Before Creating the Enhancement Request
- [x] I have confirmed that this should be classified as an enhancement rather than a bug/feature.
### Summary
Improve Lite subscription quota validation in proxy by applying the quota check only to Lite subscription add actions.
Currently, proxy validates `liteTopicSet.size()` against `liteSubClientQuota + quotaBuffer` before syncing Lite subscriptions. This validation should apply to `PARTIAL_ADD` and `COMPLETE_ADD`, but not to remove actions.
### Motivation
Lite subscription quota is used to limit subscription growth. Remove actions release existing subscriptions and should not be blocked by the same quota validation.
For example, a client may add Lite subscriptions in several smaller `PARTIAL_ADD` requests and later remove them in one larger `PARTIAL_REMOVE` request. The remove request can contain more Lite topics than the quota threshold, but it only reduces the active subscription set.
### Describe the Solution You'd Like
Update `ClientProcessor#syncLiteSubscription` so that Lite subscription quota validation is only applied to add actions:
- `PARTIAL_ADD`
- `COMPLETE_ADD`
Skip this quota validation for remove actions:
- `PARTIAL_REMOVE`
- `COMPLETE_REMOVE`
This keeps the quota protection for subscription growth while allowing large unsubscribe requests to release resources normally.
### Describe Alternatives You've Considered
One alternative is to keep validating all actions with non-empty `liteTopicSet`, but this treats remove requests as if they were adding subscriptions.
Another alternative is to introduce a separate request-size limit for Lite subscription sync requests. That may be useful independently, but it should not reuse `LITE_SUBSCRIPTION_QUOTA_EXCEEDED`, because subscription quota and request size are different concepts.
### Additional Context
_No response_
Contributor guide
Research direction
Start at ClientProcessor#syncLiteSubscription and trace how liteTopicSet, liteSubClientQuota, quotaBuffer, and the four subscription actions are handled. Done means quota validation remains for PARTIAL_ADD and COMPLETE_ADD, is skipped for PARTIAL_REMOVE and COMPLETE_REMOVE, and the relevant behavior is covered by the repository's existing tests.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- distributed-systems
- Issue type
- Feature
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 76/100