Skip to content

fix(tiers): explain blocked deletion and retry object cleanup - #282

Merged
cxymds merged 1 commit into
mainfrom
cxymds/fix-tier-deletion-feedback
Oct 28, 2026
Merged

cxymds merged 1 commit into
mainfrom
cxymds/fix-tier-deletion-feedback

Conversation

@cxymds

@cxymds cxymds commented Oct 28, 2026 •

Copy link
Copy Markdown
Member

Pull Request

Description

When a tier DELETE reports that its backend is still in use, show the server's deletion diagnosis and the next action instead of leaving the user with a generic error. Support rechecking, a bounded object-cleanup retry, and an explicit final DELETE when the advisory check finds no local blockers.

Accepted or busy cleanup requests keep the tier visible. Only a successful final DELETE reports deletion success and reloads the list. Unsupported servers, unknown response values, and request failures preserve the original deletion error. Ignore stale responses across tier changes and unmounts, prevent duplicate requests, and restore focus to the initiating Delete button when the dialog closes. Add translations for all 14 supported locales.

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update
  • Code refactoring
  • Performance improvement
  • Test improvements
  • Security fix

Testing

Validated Console commit 3117e3e (base 994fc921ccbdf96b600ce6d5a8b47f43c58efc83); the 20 committed files match the final reviewed and tested source manifest.

  • nvm use v22 followed by pnpm install --frozen-lockfile, pnpm type-check, pnpm lint, pnpm format:check and pnpm test:run: all passed; 847 tests passed, zero failures or skips. git diff --check passed.
  • The 36 new tests exercise the actual parser, hook, dialog and tier page: original-error retention, unsupported/unknown responses, accepted/busy cleanup, explicit final DELETE, duplicate requests, stale tier/unmount responses and focus return. Six independent reviewer probes for additional async edge cases also passed.
  • Playwright exercised the actual local Next.js app against controlled admin API responses: before/after desktop/mobile, light/dark, loading, accepted/busy cleanup, legacy-server fallback, failures, unknown data, advisory-clear rejection and successful final DELETE. No page exceptions occurred. These UI checks are mocked transport checks, not a live Console-to-RustFS storage integration run.

Production build and a complete live Console/storage end-to-end matrix were not run; type checking, the full test suite and browser scenarios bound the changed UI behavior.

  • Unit tests added/updated
  • Manual testing completed

Checklist

  • Code follows the project's style guidelines
  • Self-review completed
  • TypeScript types are properly defined
  • All commit messages are in English (Conventional Commits)
  • All existing tests pass
  • No new dependencies added, or they are justified

Related Issues

Backend integration: rustfs/rustfs#9035. Older servers retain the original deletion error and supported actions.

Regression coverage: https://github.com/rustfs/auto-testing/pull/120.

Screenshots (if applicable)

Actual local Next.js Console at /tiers/ with Playwright-controlled admin API responses. These captures demonstrate Console rendering and interaction; they do not establish live RustFS cleanup worker integration. Cleanup retry acceptance is not tier deletion success.

Images are hosted on a dedicated screenshot branch, separately from the product diff, and pinned to an immutable commit.

Viewport Before: blocked deletion After: deletion diagnostics
Desktop 1440 x 1000 Before After
Mobile 390 x 844 Before After

Additional states:

Accepted limited cleanup pass; zero enqueued and truncated scan

Accepted limited cleanup pass; zero enqueued and truncated scan

Busy: retry deferred

Busy: retry deferred

Dark mode, mobile

Dark mode, mobile

Older server preserves original deletion error

Older server preserves original deletion error

Diagnostic failure

Diagnostic failure

Unknown blocker

Unknown blocker

Advisory clear still requires authoritative Delete

Advisory clear still requires authoritative Delete

Additional Notes

Two independent final reviewers covered the following lenses on the frozen source diff:

  • Correctness: no unresolved findings; original errors and authoritative DELETE outcomes are retained.
  • Concurrency: no unresolved findings; duplicate, stale, cross-tier and unmounted callbacks are covered.
  • Tester: no findings; full suite, six independent edge-case probes and browser evidence passed.
  • Simplifier: no findings; no new dependencies or shared UI primitive changes.
  • UX auditor: no findings across all 17 screenshots, mobile/desktop and light/dark; focus return is covered.
  • Compatibility: no findings; unsupported servers and unknown payloads fail conservatively.
  • Security: no findings; existing signed admin transport is reused and no credentials enter diagnosis responses.

Rollback: revert this Console change. Existing tier DELETE remains available independently of the additive backend APIs.

Browser verification uses mocked admin responses to exercise loading, blockers, accepted and busy retries, unsupported servers, failures, unknown responses and authoritative DELETE outcomes. Backend HTTP behavior is verified in the linked RustFS PR. No production credentials or data are used.

@cxymds
cxymds merged commit 55da842 into main Oct 28, 2026
10 checks passed
@cxymds
cxymds deleted the cxymds/fix-tier-deletion-feedback branch October 28, 2026 12:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant