iloveeyjafjalla opened a new issue, #11381: URL: https://github.com/apache/rocketmq/issues/11381
### Before Creating the Bug Report - [x] I found a bug, not just asking a question, which should be created in [GitHub Discussions](https://github.com/apache/rocketmq/discussions). - [x] I have searched the [GitHub Issues](https://github.com/apache/rocketmq/issues) and [GitHub Discussions](https://github.com/apache/rocketmq/discussions) of this repository and believe that this is not a duplicate. - [x] I have confirmed that this bug belongs to the current repository, not other repositories of RocketMQ. ### Runtime platform environment OS: any (mqadmin, `tools` module) ### RocketMQ version branch: develop Git commit id: 9ea2ccdc2b41445aee5e177e14e501d606f5a1ed (verified against this base; the files are unchanged on develop@b76420599) ### JDK Version Compiler: Temurin 1.8.0_504 (target 1.8, same as CI) ### Describe the Bug The map-file mode of the two static-topic commands is unreachable, and the documented invocation silently does something else. Both commands register the option under the key `mf` and then read a different key: ```java // UpdateStaticTopicSubCommand / RemappingStaticTopicSubCommand, buildCommandlineOptions opt = new Option("mf", "mapFile", true, "The mapping data file name"); ... // execute(...) if (commandLine.hasOption("f")) { // "f" is registered nowhere executeFromFile(commandLine, options, rpcHook); return; } ... // executeFromFile(...) String mapFileName = commandLine.getOptionValue('f').trim(); // null -> NPE if ever reached ``` So `mqadmin updateStaticTopic -t T -b brokerA -qn 8 -mf plan.json` parses (the help text advertises `-mf,--mapFile <arg>`), never reads `plan.json`, and takes the *recompute* path instead — the command rewrites the static topic mapping computed from the cluster's current state rather than applying the mapping the operator supplied. The only way to reach the file mode is to pass `-f`, which the parser rejects with `Unrecognized option: -f`. In addition, the file mode cannot even be invoked the way it is meant to be, because the parser demands options that mode does not use: - `OptionGroup("-b", "-c")` is `setRequired(true)`; - `UpdateStaticTopicSubCommand` also marks `-qn/--totalQueueNum` required; so `mqadmin updateStaticTopic -t T -mf plan.json` (the target brokers and the queue count come from the file) fails to parse; `ServerUtil.parseCmdLine` then prints the help and calls `System.exit(1)`. Both recompute paths already validate these options themselves (`if (!hasOption("b") && !hasOption("c") || !hasOption("qn")) { printCommandLineHelp(...); return; }`). Finally, once the file mode is reachable, `UpdateStaticTopicSubCommand` ignores `-fr/--forceReplace`: `force` is parsed and then `MQAdminUtils.updateTopicConfigMappingAll(..., false)` is called with a literal. ### Steps to Reproduce 1. `mqadmin updateStaticTopic -t T -b brokerA -qn 8 -mf plan.json` with a plan file whose mapping differs from the current cluster state → the file is not read; a recomputed mapping is written instead. 2. `mqadmin updateStaticTopic -t T -mf plan.json` → `Missing required option`, help, exit code 1. 3. `mqadmin remappingStaticTopic -t T -mf plan.json` → same as 2 (`-b|-c` required). ### Expected behavior The documented `-mf/--mapFile` invocation reads the mapping from the named file and applies it (honoring `-fr`), and the from-file mode does not require the target brokers or the queue count, which the file carries. ### Actual behavior The map file is ignored and the mapping is recomputed; without `-b|-c` (and `-qn`) the invocation does not even parse; `-fr` is discarded in `updateStaticTopic`. ### Additional context Fix: read the option key the commands register, stop requiring `-b|-c|-qn` in the from-file mode (the recompute mode still validates them), and pass the parsed `force` through. -- 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]
