You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by "iloveeyjafjalla (via GitHub)" <gi...@apache.org> on 2026/10/13 01:14:24 UTC

[PR] fix(ops): report a failed alert read instead of an empty backlog [rocketmq-dashboard]

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

   ### Which Issue(s) This PR Fixes
   
   - Fixes #6491
   
   ### Brief Description
   
   The system alerts feed treated a failed read as an empty feed. The list effect in
   `web/src/pages/ops/systemAlerts.tsx` announced a failure only through a transient toast
   (`message.error(t('sysAlerts.loadFailed'))`), while everything the operator reads stayed derived
   from the result that never arrived: the header kept claiming `本页 0 条未确认`, because
   `unackCount` is computed from the still-empty `alerts` array, the level chips counted the same
   empty array, and the page offered no way to retry without touching a filter.
   
   - The page keeps the failure visible: `Alert type="error"` with `common.fetchDataFailed` and a
     retry button that re-runs the query through the existing `refreshNonce`, so the feed recovers
     in place.
   - The header stops asserting a count it never read: `{ n: loadFailed ? '-' : unackCount }` — the
     same `-` convention this codebase already uses for an unread count.
   - The per-level chip counters are hidden while the failure is on screen, so the previous read's
     numbers are not re-presented as current. (On a first failure those counters are zeros, which
     antd already hides; after a failed refetch they would otherwise still show the previous page's
     counts while the feed claims to be current.)
   - No new UI text: `common.fetchDataFailed` and `common.retry` already exist, so there is no
     i18n change.
   
   ### How Did You Test This Change?
   
   Red first, on the current target branch (779b8c0e), with the added tests in place and only the
   source change reverted:
   
   ```
   $ cd web && npx vitest run src/pages/ops/__tests__/SystemAlertsPage.test.tsx --maxWorkers=1 -t "failed alert read|drops the per-level counters"
    × reports a failed alert read instead of an empty backlog
      TestingLibraryElementError: Unable to find an element with the text: 获取数据失败
    × drops the per-level counters when a later read fails
      TestingLibraryElementError: Unable to find an element with the text: 获取数据失败
    Test Files  1 failed (1)
         Tests  2 failed | 21 skipped (23)
   ```
   
   Green with the change:
   
   ```
   $ cd web && npx vitest run src/pages/ops/__tests__/SystemAlertsPage.test.tsx --maxWorkers=1
    Test Files  1 passed (1)
         Tests  23 passed (23)
   $ npx eslint src/pages/ops/systemAlerts.tsx src/pages/ops/__tests__/SystemAlertsPage.test.tsx
     (0 errors; the one warning is the pre-existing react-hooks/exhaustive-deps warning on that effect)
   $ npx prettier --check src/pages/ops/systemAlerts.tsx src/pages/ops/__tests__/SystemAlertsPage.test.tsx
    All matched files use Prettier code style!
   $ npx tsc -b
     (clean)
   ```
   
   The two added cases:
   
   - `reports a failed alert read instead of an empty backlog` — the first read rejects, so the page
     must show 获取数据失败, must not claim `本页 0 条未确认`, must offer 重试, and that retry must
     bring the rows back.
   - `drops the per-level counters when a later read fails` — after one successful read a rejected
     refetch must surface the banner and drop the chip counters, while the previously loaded page
     stays readable.
   
   ### Checklist
   
   - [x] One coherent change; unrelated modifications are not bundled in
   - [x] Commit subject follows Conventional Commits (`fix(ops): ...`)
   - [x] Tests added or updated for non-trivial changes (new cases in the existing
         `web/src/pages/ops/__tests__/SystemAlertsPage.test.tsx`)
   - [x] New UI text has both Chinese and English entries under `web/src/i18n/` — no new text, only
         existing keys are reused
   - [x] Architecture constraints stay green — no Java/backend change, so the ArchUnit checks are
         untouched
   - [x] New source files carry the ASF license header — no new files
   - [x] Documentation touched where behaviour changed — not applicable, the page keeps the same
         controls and wording
   
   Disclosed rather than left to be discovered on merge, because these open PRs touch the same file:
   
   - #5527 re-arms the loading flag at the top of this same list effect; this change touches only the
     effect's `.then`/`.catch` bodies, so whichever merges second needs a small rebase.
   - #5536 removes the level-chip `Badge` block entirely; this change adds a `!loadFailed` guard to
     that same conditional. If #5536 lands first, that guard disappears with the block and the rest
     of this change is unaffected.
   - #6127 fixed the same class of problem (a failed read reported as an empty list) in the
     maintenance-windows dialog of this page; this PR covers the feed itself, not the dialog.
   
   AI assistance: the analysis, the change and these tests were produced with AI assistance (an agent
   working in this repository) and reviewed by me before submission; the verification output above is
   from the actual runs.
   


-- 
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: commits-unsubscribe@rocketmq.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] fix(ops): report a failed alert read instead of an empty backlog [rocketmq-dashboard]

Posted by "lizhimins (via GitHub)" <gi...@apache.org>.
lizhimins merged PR #6492:
URL: https://github.com/apache/rocketmq-dashboard/pull/6492


-- 
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: commits-unsubscribe@rocketmq.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org