Frun1na opened a new issue, #5651:
URL: https://github.com/apache/rocketmq-dashboard/issues/5651

   ### Before Creating the Bug Report
   
   - [x] I have searched the [open 
issues](https://github.com/apache/rocketmq-dashboard/issues) of this repository 
and believe that this is not a duplicate.
   - [x] This is a defect in RocketMQ Studio, not a usage question and not a 
defect in another Apache RocketMQ repository.
   - [x] I can reproduce this on the current `master` branch, or I have stated 
the exact version I am running below.
   
   ### Studio Version
   
   branch: `rocketmq-studio`
   git commit id: `6a68042f`
   deployed as: built from source
   
   ### Runtime Environment
   
   OS: Ubuntu 22.04 (WSL2)
   MySQL: not applicable — the defect is in the provider dispatch, covered by 
the provider test
   browser: not applicable
   
   ### Connected RocketMQ Cluster
   
   RocketMQ version: not applicable — the defect is in the Aliyun / Tencent 
provider adapters
   access mode: cloud provider adapters (Aliyun consumer-group OpenAPI, Tencent 
TDMQ DescribeMessage/consumer-group API)
   deployment: not applicable
   
   ### Describe the Bug
   
   `rmq.group.update` is documented as an upsert: 
`ConsumerGroupUpdateToolHandler.execute` updates the group when it already 
exists and creates it otherwise. On Aliyun and Tencent instances the update 
branch never updates anything:
   
   ```java
   // InstanceProvider.java
   default ConsumerGroupVO updateConsumerGroup(String instanceId, 
ConsumerGroupVO group) {
       return createConsumerGroup(instanceId, group);   // only 
ApacheInstanceProvider overrides this
   }
   ```
   
   Only `ApacheInstanceProvider` overrides `updateConsumerGroup` (it writes 
through `adminClient.updateConsumerGroup`), so on a cloud instance an update of 
an existing group is sent to the vendor's **create** API. That is not an 
update: the vendor either rejects the call because the group already exists — 
surfacing to the operator as an error that has nothing to do with the requested 
change — or answers success while the requested configuration is not applied, 
and Studio reports the call as executed.
   
   The tool is open to cloud instances by design: `rmq.group.update` requires 
the `CONSUMER_GROUP_MANAGEMENT` capability, which both `AliyunInstanceProvider` 
and `TencentInstanceProvider` declare, and `rmqctl group update` maps to the 
same tool. Other group operations that cloud instances cannot serve already say 
so explicitly (`BusinessException(501, "... are not supported for cloud 
instances")`); the update path silently does something else instead.
   
   ### Steps to Reproduce
   
   1. Point Studio at an Aliyun or Tencent instance whose cluster contains a 
consumer group, e.g. `orders-group`.
   2. Call the tool: `rmqctl group update --group-name orders-group 
--retry-max-times 20` (or the MCP/AI equivalent) against that instance.
   3. Observe the outgoing vendor call: it is the create API, not an update — 
with a mock client the request captured is `CreateConsumerGroupRequest`, and 
the vendor's already-exists error is what an operator sees.
   4. 
`InstanceProviderTest#updateConsumerGroupShouldRejectProvidersThatCannotUpdateTest`
 pins the dispatch: on the current code the default implementation calls 
`createConsumerGroup`; with the fix it rejects the request instead.
   
   ### What Did You Expect to See?
   
   Either a real update, or an explicit refusal — the same 501 the neighbouring 
cloud-unsupported group operations already return, so an operator learns the 
operation is unavailable instead of getting a create call in its place.
   
   ### What Did You See Instead?
   
   An update request answered by the vendor's create API, whose outcome is an 
already-exists failure or a success that leaves the group configuration 
unchanged.
   
   ### Additional Context
   
   - Only the Apache provider has a real update path 
(`ApacheInstanceProvider#updateConsumerGroup` → 
`adminClient.updateConsumerGroup`); neither cloud adapter overrides the default.
   - Real cloud support looks feasible as a follow-up: the Aliyun SDK carries 
`UpdateConsumerGroupRequest` and the Tencent SDK carries 
`ModifyConsumerGroupRequest`; wiring them up is a larger change than this 
report asks for, and cannot be verified here without a live cloud account.
   
   ### Are You Willing to Submit a Pull Request?
   
   - [x] Yes, I am willing to submit a pull request.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to