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]
