mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-15 09:33:13 +00:00
ci: gate rio-v2 full-suite jobs on schedule; document lifecycle (#6036)
Co-authored-by: cxymds <cxymds@gmail.com> Co-authored-by: houseme <housemecn@gmail.com>
This commit is contained in:
@@ -34,6 +34,7 @@ for later deletion.
|
||||
- `tonic-013-status-render` peer RPC failure classification: internode failures that reach a node only as text (a peer's error_info payload, a status flattened through format!) are classified by matching the rendering of an Unavailable gRPC status. Releases up to 1.0.0-alpha.38 shipped tonic 0.13, which rendered that status as "status: Unavailable, message: ..."; tonic 0.14 renders it as "code: 'The service is currently unavailable', message: ...". Both forms are matched so an older peer's relayed text still marks an unreachable peer offline. Remove the tonic 0.13 form after the minimum supported RustFS peer version ships tonic 0.14 or later.
|
||||
- `rustfs-5063` pre-beta.9 Local KMS recovery: persisted Local KMS configs from beta.8 and earlier predate the explicit insecure-development flag, and encrypted key files use the legacy SHA-256 KDF. Remove the config fallback after supported upgrades have rewritten or explicitly resaved all pre-beta.9 configs with the development-default field, and remove the legacy KDF after supported upgrades have rewritten all pre-beta.9 Local KMS key files with explicit at-rest protection.
|
||||
- `sse-local-dek-json-v1` legacy local SSE DEK decoding: releases before the JSON envelope wrote wrapped DEKs as `base64(nonce):base64(ciphertext)`, so readers retain that decoder while all new writes use the versioned JSON envelope. Remove the colon decoder after the minimum supported direct-upgrade release writes JSON envelopes and migration tooling has rewritten every retained legacy object.
|
||||
- `rio-v2-dormant-variant` dormant `rio-v2` build variant: `crates/rio-v2` and the `rio-v2` feature ship in no default or release build and exist only as the candidate MinIO stream-format implementation for the rustfs/backlog#1638 SSE-interop adjudication. Per-PR CI keeps only `test-and-lint-rio-v2` to guard the `#[cfg(feature = "rio-v2")]` seam; the full-suite lanes (`build-rustfs-debug-binary-rio-v2`, `e2e-tests-rio-v2` in `.github/workflows/ci.yml`) run on schedule/workflow_dispatch only — see the "`rio-v2` variant lifecycle" section in [minio-file-format-compat.md](minio-file-format-compat.md). While both implementations exist, DARE/S2 stream fixes must land in both `crates/rio` and `crates/rio-v2`. No `RUSTFS_COMPAT_TODO` source marker applies: the temporary surface is CI workflow YAML plus an entire feature-gated candidate crate, not a compatibility code path inside shipping code, and workflow files are outside the marker convention's Rust scope. Remove after the #1638 adjudication lands and converges on one implementation: delete the losing implementation, its feature seam, and the gating CI jobs.
|
||||
|
||||
## Review Checklist
|
||||
|
||||
|
||||
@@ -271,6 +271,32 @@ Seam 2 surfaces its own error, but only for objects that got past seam 1.
|
||||
|
||||
The interop harness reflects this. The reader tests are `#[ignore]` (`rustfs/src/storage/minio_generated_read_test.rs:244`, `:250`), the workflow that would run them is disabled at the GitHub Actions level and states in its own header that end-to-end MinIO-to-RustFS SSE interop is not implemented (`.github/workflows/minio-interop.yml:24-29`, `:34-39`), and the fixture suite's scope note says the tests "do not yet validate full plaintext reconstruction from MinIO-written encrypted data" (`crates/rio-v2/tests/README.md:55`).
|
||||
|
||||
### `rio-v2` variant lifecycle
|
||||
|
||||
The variant is deliberately **dormant** until rustfs/backlog#1638 is
|
||||
adjudicated. Dormant means:
|
||||
|
||||
- **Per-PR CI keeps one guard job.** Only `test-and-lint-rio-v2` in
|
||||
`.github/workflows/ci.yml` runs per PR; its job is to keep the
|
||||
`#[cfg(feature = "rio-v2")]` seam compiling and its unit tests green so the
|
||||
variant does not bit-rot. The full-suite lanes —
|
||||
`build-rustfs-debug-binary-rio-v2` and `e2e-tests-rio-v2` — run only on the
|
||||
weekly `schedule` and on `workflow_dispatch`, not per PR, per main push, or
|
||||
in the merge queue.
|
||||
- **Post-1.0 the variant is promoted or deleted.** The #1638 adjudication
|
||||
converges on one implementation: either `rio-v2` becomes a shipped
|
||||
configuration, or the losing side is removed together with its feature seam
|
||||
and its gating CI jobs. Tracked as `rio-v2-dormant-variant` in
|
||||
[compat-cleanup-register.md](compat-cleanup-register.md).
|
||||
- **DARE/S2 fixes land in both crates.** While both implementations exist,
|
||||
any fix to the DARE V2 stream format or the S2 compression framing/index
|
||||
must be applied to `crates/rio` **and** `crates/rio-v2` (each has its own
|
||||
`encrypt_reader.rs` and `compress_reader.rs`). Both implement the same
|
||||
stream primitives; a single-sided fix forks on-disk behavior between
|
||||
default and `rio-v2` builds and invalidates the dormant variant as an
|
||||
interop baseline — and with full-suite CI now weekly-only, the divergence
|
||||
could go unnoticed for up to a week.
|
||||
|
||||
### Reverse direction
|
||||
|
||||
Migrating back is also unsupported. Under `rio-v2` RustFS writes its own DEK envelope into MinIO's sealed-key metadata slots and labels it with MinIO's seal algorithm (`rustfs/src/storage/sse.rs:1830-1852`), so the metadata is MinIO-shaped while the key bytes are not MinIO-openable. Default builds do not populate those slots at all (`rustfs/src/storage/sse.rs:1796-1798`). Treat RustFS-written SSE objects as readable only by RustFS.
|
||||
|
||||
Reference in New Issue
Block a user