Skip to content

feat: add on-demand migration management - #224

Merged
overtrue merged 1 commit into
mainfrom
cxymds/feat-on-demand-migration
Sep 8, 2026
Merged

feat: add on-demand migration management#224
overtrue merged 1 commit into
mainfrom
cxymds/feat-on-demand-migration

Conversation

@cxymds

@cxymds cxymds commented Sep 7, 2026

Copy link
Copy Markdown
Member

Pull Request

Description

Adds the complete bucket-level On-Demand Migration management experience:

  • configure AWS S3, S3-compatible, MinIO, RustFS, R2, GCS HMAC, Azure Blob Native, and GCS Native sources
  • validate and probe a source with the server dry-run API before saving
  • preserve write-only credential semantics and redact Azure/GCS Native secrets from development request logs
  • expose node-local runtime counters, circuit-breaker state, and counter-based backfill progress without inventing percentages
  • handle module-disabled, older-server, permission, field-validation, source-unreachable, backend-not-compiled, conflict, and explicit license-denial responses
  • provide responsive dialogs, failure-closed reads, dark mode, and complete English/Chinese copy

The staged source setup, connection test, and separate job/status surfaces follow the interaction patterns used by AWS DataSync and Google Storage Transfer Service, translated into the existing RustFS Console design system.

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

  • Unit tests added/updated
  • Manual testing completed
pnpm install --frozen-lockfile
pnpm type-check
pnpm lint
pnpm format:check
pnpm test:run
pnpm build

Additional verification:

  • 563 Console unit/source tests passed
  • latest rustfs/rustfs@149929539 built successfully
  • 8 Chromium flows passed in rustfs/console-tests, including Azure/GCS Native, write-only secrets, backfill races, failure states, mobile, dark mode, and Chinese
  • Console test coverage: https://github.com/rustfs/console-tests/pull/3

Checklist

  • Code follows the project 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

Closes #220

Screenshots (if applicable)

This is a new page, so there is no meaningful before state.

Core states

Empty Configured
Empty migration state Configured migration state

Native providers

Azure Blob Native GCS Native
Azure Blob Native configuration GCS Native configuration
Backfill, error, responsive, dark, and Chinese states

Runtime states

Backfill running Server error
Backfill running Server error state

Responsive states

Configured mobile Edit dialog mobile
Configured state on mobile Edit dialog on mobile

Theme and localization

Dark mode Simplified Chinese
Configured state in dark mode Empty state in Simplified Chinese

Additional Notes

The wire model, routes, defaults, validation bounds, provider behavior, error codes, and mocks were checked directly against the latest RustFS server code and crates/madmin/fixtures/on_demand_migration. Azure Blob Native and GCS Native are enabled immediately because the current server implements them. Open-source builds pass the license gate; the Console links to License settings only when the server explicitly reports a license or entitlement denial.

@cxymds
cxymds requested a review from overtrue September 7, 2026 04:57
@overtrue
overtrue merged commit 764a136 into main Sep 8, 2026
10 checks passed
@overtrue
overtrue deleted the cxymds/feat-on-demand-migration branch September 8, 2026 05:48
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.

Add the On-Demand Migration bucket settings UI

2 participants