project-nju-learner opened a new pull request, #7331: URL: https://github.com/apache/rocketmq-dashboard/pull/7331
### Which Issue(s) This PR Fixes - Fixes #7330 ### Brief Description Two physical dead letters can share one producer `UNIQ_KEY`. Using that logical ID for row selection can collapse two selected messages into one replay reported as `SUCCESS`, or export both when only one was selected. Preserve `msgId` and add an optional server-generated `selectionId`, with explicit `selectionType: "queue"`. The UI echoes the locator string; replay resolves the queue through the instance's DLQ route and validates the returned topic, queue ID, queue offset and commit-log offset. Exact selection also flows through Excel filtering and failure details. Existing replay, FIFO and partial-result handling remain in use. Omitting the discriminator preserves legacy ID semantics, including custom IDs starting with `queue:`. Excel retains its time-window, 5,000-record and payload limits. Locators require a fresh list after Broker storage rebuilds or restores. Draft for the API discussion in #7330: the public locator/discriminator contract still needs maintainer feedback. Separate `selectionIds` or an explicitly interpreted `offsetMsgId` remain alternatives. ### How Did You Test This Change? JDK 21.0.12.1, Maven 3.9.12, Node.js 23.4.0, RocketMQ 5.5.0. Existing local results were reused because the patch and upstream baseline are unchanged. - Focused backend command below: **206 passed**, 0 failures/errors/skips; Checkstyle 0 violations. - Original page: 3 new core regressions failed as expected. Fixed `DLQPage.test.tsx`: **43 passed**. - `tsc -b`, changed-file ESLint, Vite build, web license check and changed-file Prettier passed. ESLint reports one existing react-refresh warning. - Backend `mvn -B -ntp -DskipTests package` with the license Python configured passed, including the binary license gate. `git diff --check` passed. - Real producer sends and `sendMessageBack` created A/B dead letters sharing a logical ID. With indexing enabled and disabled, exact selection replayed B, then A, then both as `[B,A,A,B]`; invalid locators added nothing. - Two real brokers with indexing disabled held records with identical numeric coordinates. Single/batch selections were exact. After B stopped, `[B,A]` returned `PARTIAL` and replayed only A; route-excluded B-only selections added nothing. All 7 requests returned normal results with target-queue read-back. ```text mvn -o -B -ntp -Dtest=RocketMQDLQProviderTest,RocketMQDLQPayloadBudgetTest,DLQServiceTest,DLQControllerTest,DLQMessageExcelRowTest,MessageQueryDlqToolHandlerTest,MessageRedeliveryDlqToolHandlerTest test node node_modules/vitest/vitest.mjs run src/pages/instance/__tests__/DLQPage.test.tsx --maxWorkers=1 ``` The original-provider comparison used original provider/interface bytecode with current supporting classes. Real-Broker fixtures replaced database-backed instance wiring and audit persistence. Full backend/MySQL/ArchUnit and full frontend suites, browser end-to-end, ACL, static-topic migration, replica failover, cross-cluster isolation and physically aged messages were not tested. The offline timing was controlled; observations are limited to recorded target read-backs. ### Checklist - [x] One coherent change; unrelated modifications are not bundled in - [x] Commit subject follows Conventional Commits - [x] Tests added or updated for non-trivial changes, Java test methods named `...Test` - [x] New UI text has both Chinese and English entries under `web/src/i18n/` - [ ] Architecture constraints stay green (full ArchUnit suite not run locally) - [x] New source files carry the ASF license header (no new source files) - [x] Documentation touched where behaviour changed -- 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]
