apache / apache/rocketmq

[Enhancement] Improve Lite subscription quota validation for remove actions

Open Beginner friendly
#10,962 4 comments 0 reactions 0 assignees View on GitHub
type/enhancement
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.