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

   ### Motivation
   
   The MCP tool set needs several server-side capabilities that the metadata, 
ACL and admin layers do not provide today. Each gap below is independently 
observable from the REST layer, not only from MCP.
   
   1. **Topic message type is mutable.** `topic.update` accepts a different 
message type for an existing topic and overwrites it. Type is a creation-only 
attribute: changing it does not re-create the underlying physical topic, so the 
record ends up disagreeing with the broker.
   2. **No per-queue topic stats.** There is no way to read queue-level offsets 
for a topic, which message-consumption tooling needs.
   3. **Redelivery leaks system properties.** Redelivering a message re-sends 
it with the original properties intact, including the RocketMQ system-reserved 
ones, instead of publishing a clean copy through `%RETRY%<group>`.
   4. **Deleting a consumer group orphans its DLQ.** `%DLQ%<group>` survives 
group deletion and stays listed.
   5. **ACL 2.0 calls are not version-guarded.** ACL 2.0 requests are issued to 
brokers that do not support them, surfacing as opaque broker errors rather than 
a clear unsupported-version result. There is also no get-by-id lookup.
   6. **Sending does not map message semantics.** Tag and key are not mapped 
explicitly, FIFO sends do not select the queue by message-group hash, and 
delayed sends do not set `TIMER_DELIVER_MS`.
   7. **No nameserver config read.** There is no `read()` over a safe key 
allowlist, so nameserver configuration cannot be exposed read-only.
   8. **Default-cluster discovery silently drops ACL credentials** (security). 
`RocketMQDefaultClusterResolver.execute()` calls `instance(null)`, leaving 
`adminCredentialRef` empty, so the call falls through to the anonymous 
3-argument `MqAdminExtFactory.execute` and the configured credentials are 
discarded without any error. It also calls `instance(cluster)`, which sets the 
credential reference to the cluster name; 
`RuntimeAdminClientResolver.resolveCredential` then looks up 
`credentials["DefaultCluster"]`, fails, and the request ends up 401 via 422. 
The existing tests 
`RocketMQClusterResolverTest.credentialReferenceProtectsTheConfiguredAdminConnection`
 and `McpCredentialAuthenticationTest$TargetResolutionIntegration` pin the 
broken behaviour.
   
   ### Expected
   
   - `MetadataService`: reject topic type changes, add `getTopicStats`, 
redeliver through `%RETRY%<group>` with system-reserved properties filtered 
out, cascade `%DLQ%<group>` deletion on group delete
   - `AclService`: guard ACL 2.0 by broker version, add get-by-id lookups
   - `RocketMQAdminClientImpl`: filter system-reserved properties on send, map 
tag and key explicitly, select the FIFO queue by message-group hash, set 
`TIMER_DELIVER_MS` for delayed messages
   - `NameServerConfigDiffService`: add `read()` over a safe key allowlist
   - `RocketMQDefaultClusterResolver`: advertise the configured admin 
credential reference only when it actually exists, and fail closed with 422 
rather than degrading to an anonymous connection; keep the public shape 
`find/names/instance/execute` unchanged and retain anonymous discovery during 
bootstrap


-- 
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