zjncs opened a new issue, #5596:
URL: https://github.com/apache/rocketmq-dashboard/issues/5596
`SystemTopicFilter.isSystem`
(`server/src/main/java/org/apache/rocketmq/studio/common/util/SystemTopicFilter.java:46-59`,
the create-path/non-paged guard) matches case-SENSITIVELY
(`TopicValidator.isSystemTopic` + `startsWith("%RETRY%"/"%DLQ%")`; verified
against rocketmq-common 5.5.0 bytecode: set-contains +
`startsWith("rmq_sys_")`, both cs).
`RocketMQMetadataProvider.listTopicsPage` (`:186-189`, the paged path)
filters in SQL: `notIn(name, TopicValidator.getSystemTopicSet())` +
`notLikeRight(name, "rmq_sys_"/"%RETRY%"/"%DLQ%")`; `rmq_instance_topic.name`
is `CHARSET=utf8mb4` with no explicit collation (schema.sql:122-140) →
case-INSENSITIVE comparison on production MySQL.
**Trigger:** create a topic named with a case variant of a system pattern —
`RMQ_SYS_foo`, `tbw102`, `%retry%grp`. Creation succeeds (guard is cs; the
broker's own check is also cs), the row is stored.
**Wrong behavior:** on production MySQL the console topic list
(`/api/topics/page`, `web/src/pages/instance/topic.tsx`) silently hides the row
(`NOT LIKE 'rmq_sys_%'` matches `RMQ_SYS_foo` under ci collation), while the
non-paged list (`/api/topics`, CSV export, `findTopic`, AI tools) shows it. The
user creates a topic that never appears in the list; retrying yields "already
exists" confusion.
The H2 dev harness (MODE=MySQL) compares LIKE case-sensitively — which is
exactly why this slipped through CI.
Expected: all paths agree on the same set of system names — case-insensitive
matching in `isSystem` plus explicit `LOWER(name)` predicates in the paged
filter (collation-independent).
main @ rocketmq-studio tip.
--
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]