fix(ecstore): harden issue3031 multipart validation path#3106
Merged
Conversation
- clear stale multipart part destinations before rename fan-out - add repeated part overwrite regression coverage - reduce remote disk startup false-fault escalation to suspect-first - refine remote locker diagnostics and lower scanner leader-lock log noise - add a dedicated 4-node issue3031 docker validation script
- drop the unused serde_json::json import in admin console - call serde_json::json! inline in version_handler - keep the console version response behavior unchanged
Contributor
|
CLA requirements are satisfied for this pull request. |
Contributor
There was a problem hiding this comment.
Pull request overview
This PR hardens RustFS’s multipart upload handling (issue #3031) to better match MinIO overwrite semantics under repeated part uploads, while also refining distributed diagnostics/health handling and adding a local 4-node Docker validation workflow.
Changes:
- Clear stale multipart part payload/metadata before per-disk rename fan-out and add a regression test for repeated part overwrites.
- De-sensitize remote-disk health transitions (Suspect before Offline) and reduce warning noise for scanner leader-lock remote locker traffic.
- Add a dedicated 4-node Docker validation script and small admin console cleanup (inline
serde_json::json!).
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/validate_issue_3031_docker.sh | Adds a 4-node docker-compose + mc/warp validation harness with readiness gating and log/summary collection. |
| .docker/compose/docker-compose.cluster.local-build.yml | Passes lock acquire timeout env vars into local 4-node cluster containers for reproducer/validation. |
| rustfs/src/admin/console.rs | Inlines serde_json::json! and removes the unused import without behavior change. |
| crates/ecstore/src/set_disk/write.rs | Clears stale multipart destination paths prior to rename fan-out to support part overwrite semantics. |
| crates/ecstore/src/bucket/lifecycle/bucket_lifecycle_ops.rs | Adds regression coverage ensuring repeated uploads of the same part number overwrite prior state. |
| crates/ecstore/src/rpc/remote_disk.rs | Adjusts remote-disk health handling toward Suspect-first behavior and updates tests accordingly. |
| crates/ecstore/src/rpc/remote_locker.rs | Refines remote lock RPC diagnostics and demotes scanner leader-lock eviction warnings to debug. |
- record probe success during remote disk health checks so suspect drives recover - use async_with_vars for the remote disk health probe test - make the missing-listener test assert the state transition more robustly
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Related Issues
Fixes #3031.
Summary of Changes
partandpart.metadestinations before the per-disk rename fan-out so repeated uploads of the same part number follow the MinIO overwrite behavior.Suspectbefore escalating toOffline, reducing false startup fault noise.serde_json::json!in the admin console version handler and drop the now-unused import without changing behavior.Verification
cargo test -p rustfs-ecstore repeated_upload_part_overwrites_previous_part_state -- --nocapturecargo test -p rustfs-ecstore multipart -- --nocapturecargo test -p rustfs-ecstore remote_disk -- --nocapturecargo test -p rustfs-ecstore remote_locker -- --nocapturecargo check -p rustfs-ecstorebash scripts/validate_issue_3031_docker.sh --skip-buildbash scripts/validate_issue_3031_docker.sh --force-buildmake pre-commitImpact
warp multipart-putprofile.Additional Notes
target/issue3031/20260528-205330/summary.txt.