zjncs opened a new pull request, #5597:
URL: https://github.com/apache/rocketmq-dashboard/pull/5597

   ## 问题
   
   **两个路径对系统 topic 的判定大小写不一致**:
   
   - 
`SystemTopicFilter.isSystem`(`common/util/SystemTopicFilter.java:46-59`,create 
路径与非分页守卫)**大小写敏感**——`TopicValidator.isSystemTopic` + 
`startsWith("%RETRY%"/"%DLQ%")`(已对照 rocketmq-common 5.5.0 字节码核实:set-contains + 
`startsWith("rmq_sys_")`,均 cs)
   - 
`RocketMQMetadataProvider.listTopicsPage`(`provider/apache/RocketMQMetadataProvider.java:186-189`,分页路径)在
 SQL 中过滤——`rmq_instance_topic.name` 为 `CHARSET=utf8mb4` 无显式 
collation(schema.sql:122-140)→ **生产 MySQL 上大小写不敏感比较**
   
   **触发**:创建系统模式的大小写变体——`RMQ_SYS_foo`、`tbw102`、`%retry%grp`。创建成功(守卫 cs、broker 
检查也 cs),行已存储。
   
   **错误行为**:生产 MySQL 上控制台 topic 列表(`/api/topics/page`)**静默隐藏该行**(ci collation 下 
`NOT LIKE 'rmq_sys_%'` 匹配 `RMQ_SYS_foo`),而非分页列表(`/api/topics`、CSV 
导出、findTopic、AI 工具)显示它——用户创建的 topic 永不出现在列表里,重试得到 "already exists" 困惑。**H2 dev 
环境的 LIKE 是 cs 的——这正是 CI 从未发现分歧的原因**。
   
   ## 修复
   
   - `isSystem`:大小写不敏感匹配(小写前缀检查含 `rmq_sys_`、系统 topic 集 equalsIgnoreCase)
   - `listTopicsPage`:显式 `LOWER(name) NOT LIKE {0} apply()` 谓词 + 转义通配符(吸收开放 
#4955 的转义关注点)——H2 与 MySQL 上行为一致
   
   ## 验证(三段)
   
   1. **先红**:新增 4 用例中 2 红(`RMQ_SYS_foo`/`%retry%` 变体未被识别为系统 topic),canonical 
与普通 topic 两对照绿——在还原代码上运行
   2. **后绿 + 回归**:修复后 4/4;爆炸半径 115 
测试(SystemTopicFilter/RocketMQMetadataProvider/MetadataService/TopicController)全绿
   3. **突变**:还原两源文件 → 2 用例红;恢复 → 绿
   
   ## 碰撞核查
   
   `SystemTopicFilter.java` 无任何开放 PR 触碰。`RocketMQMetadataProvider.java` 被 6 个开放 
PR 触碰;**#4955**(分页前缀 LIKE 通配符转义)已逐一读 diff——修的是同一区域的**不同缺陷**(转义而非大小写),同文件不同 
bug;本修复已包含其转义,合并时需组合。
   
   Closes #5596


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