Repository navigation
fix(upgrade): preserve preparation-failure evidence and complete the upgrade matrix - #149
Merged
Merged
Conversation
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved critical issues can expose credentials, allow truncated reports to pass, and release a shared fleet after incomplete cleanup.
7 open issues
Keep fleet quarantined until all touched resources are verified clean · New Require complete records for every planned matrix group · New Redact quoted credential keys and generic token fields · New Mark diagnostics complete only after successful collection · New Initialize the test plan and evidence before preflight checks · New Prevent dry-run log setup from truncating existing files · New Classify failures with no failing cases as harness failures · New
What changed in this PR
This PR strengthens the RustFS upgrade harness’s failure reporting and evidence retention, helping distinguish preparation failures from upgrade regressions.
Changes:
- Bounds large-object seeding, validates deletion responses, and compares seed inventories and content across upgrades.
- Records matrix execution, diagnostics, and cleanup outcomes in Markdown and JSON reports.
- Updates Actions reporting and issue classification, and adds regression tests and evidence documentation.
| File | Description |
|---|---|
test_rustfs_upgrade.py |
Adds lifecycle, deletion-protocol, integrity, and redaction regression tests. |
scripts/upgrade_evidence.py |
Adds evidence sanitization, deletion validation, and seed-integrity helpers. |
scripts/issue_manager.py |
Recognizes NOT_RUN results and incomplete upgrade matrices. |
scripts/functional_case_report.py |
Adds phase outcomes, cleanup details, and structured JSON reports. |
rustfs-upgrade-test.sh |
Adds bounded seeding, content verification, evidence collection, and matrix finalization. |
docs/upgrade-test-evidence.md |
Documents evidence artifacts, statuses, and validation limits. |
.github/workflows/upgrade-script-tests.yml |
Adds dedicated upgrade-script regression CI. |
.github/workflows/rustfs-upgrade-test.yml |
Uses synchronous events, counts incomplete cases, and uploads evidence. |
Review effort: Balanced
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.


The legacy upgrade harness only checked the AWS CLI exit code while trimming seeds. Per-object
Errorsin an HTTP 200 response were ignored, so the final report only saidtrim left 182 objects (wanted exactly 2). Preparation failures also omitted combinations that never ran, while temporary Warp output and product file logs were lost during cleanup, making the actual deletion errors impossible to trace.This change makes preparation failures traceable and records every selected case in the upgrade matrix.
Changes
NOT_RUNfor the remaining cases and recordPREPARE,UPGRADE, andVERIFYfailures separately, along with diagnostic and cleanup outcomes. Clean up only after archiving is complete, and stop subsequent combinations when recovery fails.golden.tsvin a private temporary directory. Sanitize evidence before upload and delete the private directory on exit.events.log, countPASSand incomplete cases correctly, and upload the secure evidence directory. Do not automatically close historical Issues when results contain bothPASSandNOT_RUN.RUSTFS_NODESconsistently for node isolation, the harness, and outer cleanup. RecordPENDINGbefore touching the environment. Release the shared environment only after harness-node and Vault cleanup verification, plus outer cleanup, all succeed. Redaction covers unknown quoted credentials and generic token fields. An interrupted diagnostic collection no longer changes the result to success.All 54 assertions in the previous three local combinations passed. The first Vault group then failed while preparing seeds on the old version, so the remaining 54 assertions did not run. The run never reached the Vault upgrade and therefore cannot establish a new-version Vault compatibility regression. New tests verify that this scenario is reported as 54 PASS / 54 NOT_RUN and retains
PREPARE_FAILED.Validation
python3 -B -m unittest -v test_rustfs_upgrade.py test_sensitive_diagnostics.py test_issue_manager.py: 29 tests passed.cd scripts && python3 -B -m unittest -v test_functional_dispatch.py test_prepare_functional_package.py: 20 tests passed.keep-env, evidence-directory conflicts, and credential redaction.git diff --checkpassed.actionlintalso passed, ignoring the repository’s pre-existing smoke-testing custom-runner-label warning.Validation used local protocol fixtures and simulated environment boundaries. No VM upgrade or live retest was performed. Product-environment validation must be scheduled after merge.