1.0.0-rc.5-preview.2
Pre-release
rustfs/rustfs1.0.0-rc.5-preview.2Aug 31, 2026by github-actions[bot]
AI Summary
This preview release focuses on consolidating ECStore logic, adding performance tests, and fixing various S3 and storage engine issues. It includes refactoring efforts to reuse shared constructors and improves operational stability.
Key Highlights
- Consolidated ECStore logic with shared constructors for audit/notify and warm backends
- Performance optimizations for small-object GET and PUT paths
- Refactored warm backends to reuse shared S3 constructors
- Fixed replication, tier, and KMS behaviors
- Added NixOS service module and remote target credential capabilities
New Features
- Temporary target credentials for replication
- S3 Tables object-backed table rename
- S3 Select streaming progress events
- NixOS service module and client package
Full Release Notes
<!-- rustfs-generated-release-notes: managed; remove this marker before manual edits --> ## What's Changed * ci: add RustFS 4x4 performance test workflow and scripts by @majinghe in https://github.com/rustfs/rustfs/pull/6752 * test(heal): relative disk target and fail fast on terminal-but-short by @majinghe in https://github.com/rustfs/rustfs/pull/6748 * test(table-catalog): generate DuckDB REST attach SQL by @GatewayJ in https://github.com/rustfs/rustfs/pull/6749 * test(table-catalog): automate DuckDB REST conformance by @GatewayJ in https://github.com/rustfs/rustfs/pull/6750 * ci: use dedicated RUSTFS_PERF_NODES for performance test by @majinghe in https://github.com/rustfs/rustfs/pull/6754 * fix(api): preserve server-side storage error surface by @houseme in https://github.com/rustfs/rustfs/pull/6753 * refactor(ecstore): extract shared audit/notify KVS table constructors by @overtrue in https://github.com/rustfs/rustfs/pull/6756 * refactor(ecstore): extract shared warm backend S3 constructor by @overtrue in https://github.com/rustfs/rustfs/pull/6755 * refactor(concurrency): consolidate ForegroundPressure into workload owner by @overtrue in https://github.com/rustfs/rustfs/pull/6757 * refactor(s3-client): reuse rustfs-utils header classification instead of duplicating it by @overtrue in https://github.com/rustfs/rustfs/pull/6758 * refactor(rustfs): consolidate bucket metadata import match arms by @overtrue in https://github.com/rustfs/rustfs/pull/6760 * refactor(lifecycle): reuse the replication tag parser by @overtrue in https://github.com/rustfs/rustfs/pull/6761 * fix(deps): move off the yanked chacha20 0.10.1 by @overtrue in https://github.com/rustfs/rustfs/pull/6768 * refactor(ecstore,rustfs): reuse canonical starts_with_ignore_ascii_case by @overtrue in https://github.com/rustfs/rustfs/pull/6759 * chore(tier): remove dead trailing_headers config from warm backends by @overtrue in https://github.com/rustfs/rustfs/pull/6762 * fix(tier): validate outbound URLs for all warm backend providers by @overtrue in https://github.com/rustfs/rustfs/pull/6764 * fix(s3): round-trip null-version delete-marker identity by @overtrue in https://github.com/rustfs/rustfs/pull/6765 * test(e2e): finish the helper consolidation onto common.rs by @overtrue in https://github.com/rustfs/rustfs/pull/6766 * fix(startup): never panic when the system CA bundle is absent by @overtrue in https://github.com/rustfs/rustfs/pull/6769 * fix(test): restore #[serial] markers the fallback runner still needs by @overtrue in https://github.com/rustfs/rustfs/pull/6767 * docs(agents): make branch naming identity-neutral by @GatewayJ in https://github.com/rustfs/rustfs/pull/6772 * docs: fix Getting Started links by @teyfix in https://github.com/rustfs/rustfs/pull/6782 * fix(ci): restore tier e2e and locked builds by @overtrue in https://github.com/rustfs/rustfs/pull/6773 * fix(storage): gate multipart upload part pressure by @houseme in https://github.com/rustfs/rustfs/pull/6781 * test(pool): abort stale multipart uploads before decommission by @majinghe in https://github.com/rustfs/rustfs/pull/6771 * refactor(ecstore): migrate audit.rs default KVS tables to shared constructors by @overtrue in https://github.com/rustfs/rustfs/pull/6777 * refactor(ecstore): migrate notify.rs default KVS tables to shared constructors by @overtrue in https://github.com/rustfs/rustfs/pull/6778 * fix(ci): sync Linux full E2E selection by @overtrue in https://github.com/rustfs/rustfs/pull/6787 * perf(storage): optimize small-object GET/PUT paths by @houseme in https://github.com/rustfs/rustfs/pull/6770 * refactor(ecstore): migrate data movement backpressure to shared ForegroundPressure by @overtrue in https://github.com/rustfs/rustfs/pull/6779 * docs(kms): reconcile bulk-rekey contract with the shipped sweep by @reatang in https://github.com/rustfs/rustfs/pull/6783 * refactor(heal): migrate mainline throttle to shared ForegroundPressure by @overtrue in https://github.com/rustfs/rustfs/pull/6780 * chore(deps): update s3s revision by @houseme in https://github.com/rustfs/rustfs/pull/6795 * fix(s3): preserve atomic 1 MiB conditional writes by @overtrue in https://github.com/rustfs/rustfs/pull/6798 * refactor(ecstore): migrate aliyun/azure warm backends to shared S3 constructor by @overtrue in https://github.com/rustfs/rustfs/pull/6774 * fix(sse): diagnose unresolvable encrypted metadata on reads by @reatang in https://github.com/rustfs/rustfs/pull/6784 * fix(site-replication): send the reverse-reachability probe as POST by @reatang in https://github.com/rustfs/rustfs/pull/6790 * fix(iam): stop stamping the wall clock on policy-less group reads by @reatang in https://github.com/rustfs/rustfs/pull/6791 * fix(heal): skip dangling delete grace failures by @houseme in https://github.com/rustfs/rustfs/pull/6799 * test(e2e): restore tier and inline full-suite checks by @overtrue in https://github.com/rustfs/rustfs/pull/6794 * refactor(ecstore): migrate huaweicloud/tencent warm backends to shared S3 constructor by @overtrue in https://github.com/rustfs/rustfs/pull/6775 * fix(s3-client): rename-align CommonPrefix for tier in-use XML parsing by @overtrue in https://github.com/rustfs/rustfs/pull/6805 * Extend functional test workflow with S3/KMS/tier suites by @majinghe in https://github.com/rustfs/rustfs/pull/6806 * refactor(ecstore): migrate minio/r2/rustfs warm backends to shared S3 constructor by @overtrue in https://github.com/rustfs/rustfs/pull/6776 * fix(site-replication): rotate-svc-acct no longer wedges replication by @reatang in https://github.com/rustfs/rustfs/pull/6793 * fix(tier): harden reference proof and audit output by @houseme in https://github.com/rustfs/rustfs/pull/6807 * fix(ecstore): move conditional PUT lock to commit-time recheck by @reatang in https://github.com/rustfs/rustfs/pull/6801 * fix(ci): pass --repo to gh release delete in preview cleanup by @overtrue in https://github.com/rustfs/rustfs/pull/6810 * fix(data-usage): preserve cold buckets in partial admin usage by @houseme in https://github.com/rustfs/rustfs/pull/6811 * fix(ecstore): reject Azure tier storageClass/spAuth instead of silently ignoring them by @overtrue in https://github.com/rustfs/rustfs/pull/6817 * perf(ecstore): optimize bounded small-object GET paths by @houseme in https://github.com/rustfs/rustfs/pull/6808 * fix(ecstore): document audit/notify KVS divergence and fix auth_token redaction by @overtrue in https://github.com/rustfs/rustfs/pull/6816 * fix(version): do not bump version when HEAD equals latest tag by @cuishuang in https://github.com/rustfs/rustfs/pull/6828 * fix: provide cross-repo token for auto-testing checkout by @majinghe in https://github.com/rustfs/rustfs/pull/6831 * fix(logging): bound ECStore debug output by @houseme in https://github.com/rustfs/rustfs/pull/6809 * fix(ecstore): tier force removal bypasses lifecycle reference check by @overtrue in https://github.com/rustfs/rustfs/pull/6835 * fix(heal): bound read-repair object commit locks by @houseme in https://github.com/rustfs/rustfs/pull/6839 * fix(replication): keep versionId on version-purge delete replication by @reatang in https://github.com/rustfs/rustfs/pull/6841 * fix(replication): surface failed objects and abort orphaned uploads by @reatang in https://github.com/rustfs/rustfs/pull/6840 * ci: upload performance report to rustfs/dashboard reports/YYYY-MM-DD.md by @majinghe in https://github.com/rustfs/rustfs/pull/6843 * ci: make MQTT broker setup deterministic in functional test suite by @majinghe in https://github.com/rustfs/rustfs/pull/6837 * fix(kms): restore persisted configuration after restart by @reatang in https://github.com/rustfs/rustfs/pull/6821 * fix(s3): return BadDigest for Content-MD5 mismatch by @overtrue in https://github.com/rustfs/rustfs/pull/6842 * fix: remove redundant --repo flag in preview release cleanup by @majinghe in https://github.com/rustfs/rustfs/pull/6847 * ci: pass package selector to test run steps (fix rc.3 fallback) by @majinghe in https://github.com/rustfs/rustfs/pull/6846 * fix(s3): accept empty put without content length by @houseme in https://github.com/rustfs/rustfs/pull/6849 * fix(ci): split workflows and add perf version reporting by @majinghe in https://github.com/rustfs/rustfs/pull/6848 * fix(s3select): return encryption response headers by @GatewayJ in https://github.com/rustfs/rustfs/pull/6819 * test(s3select): cover SelectRequest XML root alias by @GatewayJ in https://github.com/rustfs/rustfs/pull/6820 * feat(nix): add NixOS service module and client package by @houseme in https://github.com/rustfs/rustfs/pull/6856 * feat(admin): expose remote target credential capability state by @cxymds in https://github.com/rustfs/rustfs/pull/6857 * fix(scanner): retain usage across transient peer failures by @houseme in https://github.com/rustfs/rustfs/pull/6859 * fix(ecstore): keep 1MiB GET off mid-size reader by @houseme in https://github.com/rustfs/rustfs/pull/6861 * fix(ecstore): classify system metadata failures by @houseme in https://github.com/rustfs/rustfs/pull/6862 * perf(put): adapt eager threshold to concurrency by @houseme in https://github.com/rustfs/rustfs/pull/6863 * perf(ecstore): converge disk metric atomic loads by @houseme in https://github.com/rustfs/rustfs/pull/6866 * fix(scanner): bound publication proof retries on main by @houseme in https://github.com/rustfs/rustfs/pull/6870 * feat(replication): support temporary target credentials by @cxymds in https://github.com/rustfs/rustfs/pull/6860 * fix(ecstore): require durable decommission ledger format by @cxymds in https://github.com/rustfs/rustfs/pull/6871 * perf(ecstore): reuse local fd metadata snapshots by @houseme in https://github.com/rustfs/rustfs/pull/6868 * fix(scanner): own publication mutations through storage drain by @houseme in https://github.com/rustfs/rustfs/pull/6867 * fix(admin): version remote target credential capabilities by @cxymds in https://github.com/rustfs/rustfs/pull/6876 * fix(ci): refresh Linux full E2E selection by @overtrue in https://github.com/rustfs/rustfs/pull/6875 * fix(test): serialize transition matrix tests under nextest by @overtrue in https://github.com/rustfs/rustfs/pull/6874 * fix(ci): stabilize tier MQTT bootstrap on shared runner by @majinghe in https://github.com/rustfs/rustfs/pull/6877 * feat(s3select): report uncompressed input byte metrics by @GatewayJ in https://github.com/rustfs/rustfs/pull/6865 * chore(deps): update flake.lock by @houseme in https://github.com/rustfs/rustfs/pull/6880 * perf(ecstore): gate GET metadata timing when metrics off by @houseme in https://github.com/rustfs/rustfs/pull/6879 * feat(table-catalog): vend credentials from LoadTable by @GatewayJ in https://github.com/rustfs/rustfs/pull/6878 * feat(s3select): expand typed JSON source paths by @GatewayJ in https://github.com/rustfs/rustfs/pull/6864 * perf(ecstore): gate quorum-aware GET early stop by @houseme in https://github.com/rustfs/rustfs/pull/6885 * test(ci): refresh cluster nightly selection by @houseme in https://github.com/rustfs/rustfs/pull/6886 * test(ecstore): cover multipart snapshot overwrite race by @houseme in https://github.com/rustfs/rustfs/pull/6887 * fix(ecstore): preserve parity reserves for data-only GET by @houseme in https://github.com/rustfs/rustfs/pull/6888 * docs(security): add unsigned presign header lesson by @overtrue in https://github.com/rustfs/rustfs/pull/6894 * test(s3): promote passing compatibility cases by @overtrue in https://github.com/rustfs/rustfs/pull/6891 * fix(admin): replicate user secret-key rotation to peer sites by @reatang in https://github.com/rustfs/rustfs/pull/6893 * perf(ecstore): reuse prepared metadata across pools by @houseme in https://github.com/rustfs/rustfs/pull/6889 * fix(replication): retry failed multipart aborts on bounded backoff by @reatang in https://github.com/rustfs/rustfs/pull/6897 * fix(scanner): unblock quota usage baseline on never-converged sites by @reatang in https://github.com/rustfs/rustfs/pull/6896 * docs(architecture): reconcile generation contract by @houseme in https://github.com/rustfs/rustfs/pull/6901 * feat(s3-tables): support object-backed table rename by @GatewayJ in https://github.com/rustfs/rustfs/pull/6899 * perf(ecstore): consolidate non-inline read planning by @houseme in https://github.com/rustfs/rustfs/pull/6892 * test(e2e): cover four-node four-drive cluster topology by @houseme in https://github.com/rustfs/rustfs/pull/6902 * fix(replication): verify replica integrity and default to plain signed payloads by @reatang in https://github.com/rustfs/rustfs/pull/6895 * fix(rpc): reject unsigned v2 control mutations by @houseme in https://github.com/rustfs/rustfs/pull/6905 * fix(replication): surface object-lock denied purges and back off heal retries by @reatang in https://github.com/rustfs/rustfs/pull/6900 * perf(get): release disk permits for buffered bodies by @houseme in https://github.com/rustfs/rustfs/pull/6906 * test(ecstore): prove in-flight prefetch cancellation by @houseme in https://github.com/rustfs/rustfs/pull/6904 * test(e2e): route cluster volume endpoints through fault proxy by @houseme in https://github.com/rustfs/rustfs/pull/6909 * test(perf): align GET attribution harness with backlog 2093 by @houseme in https://github.com/rustfs/rustfs/pull/6912 * perf(ecstore): reuse prepared Select metadata by @houseme in https://github.com/rustfs/rustfs/pull/6911 * fix(ecstore): fail closed on unverifiable data quorum by @houseme in https://github.com/rustfs/rustfs/pull/6903 * fix(scanner): recover legacy empty usage floor by @houseme in https://github.com/rustfs/rustfs/pull/6914 * fix(ecstore): supervise decommission worker recovery by @overtrue in https://github.com/rustfs/rustfs/pull/6908 * test(e2e): exercise cluster volume fault proxy by @houseme in https://github.com/rustfs/rustfs/pull/6919 * docs: register persisted XML compatibility cleanup by @overtrue in https://github.com/rustfs/rustfs/pull/6918 * test(ecstore): pin default bucket config bytes by @overtrue in https://github.com/rustfs/rustfs/pull/6920 * fix(scanner): preserve cache cycle during usage recovery by @houseme in https://github.com/rustfs/rustfs/pull/6921 * fix(ci): keep functional workflow chain running after failures by @majinghe in https://github.com/rustfs/rustfs/pull/6926 * test(ecstore): add targeted refresh-loss harness by @houseme in https://github.com/rustfs/rustfs/pull/6924 * fix(scanner): persist decommission catch-up debt by @overtrue in https://github.com/rustfs/rustfs/pull/6922 * test(replication): bind writable paths to DTO fields by @overtrue in https://github.com/rustfs/rustfs/pull/6923 * test(ecstore): pin bucket metadata rollback reads by @overtrue in https://github.com/rustfs/rustfs/pull/6928 * test(admin): prove backup import rollback compatibility by @overtrue in https://github.com/rustfs/rustfs/pull/6929 * fix(ecstore): fence snapshot stream polls on lock loss by @houseme in https://github.com/rustfs/rustfs/pull/6930 * fix(ecstore): recover late parity after exact quorum by @houseme in https://github.com/rustfs/rustfs/pull/6927 * test(ecstore): make heal rename fixture deterministic by @houseme in https://github.com/rustfs/rustfs/pull/6934 * test(ecstore): stabilize tier recovery cursor fixture by @houseme in https://github.com/rustfs/rustfs/pull/6935 * fix(admin): preserve raw XML in metadata backups by @overtrue in https://github.com/rustfs/rustfs/pull/6936 * perf(ecstore): retry degraded GET with late parity by @houseme in https://github.com/rustfs/rustfs/pull/6933 * feat(s3select): support compressed CSV and JSON input by @GatewayJ in https://github.com/rustfs/rustfs/pull/6915 * feat(table-catalog): update object namespace properties by @GatewayJ in https://github.com/rustfs/rustfs/pull/6815 * feat(s3select): schedule streaming progress events by @GatewayJ in https://github.com/rustfs/rustfs/pull/6913 * chore(capacity): update default refresh tuning by @houseme in https://github.com/rustfs/rustfs/pull/6938 * fix(ci): continue functional chain and publish heal/pool reports by @majinghe in https://github.com/rustfs/rustfs/pull/6932 * fix(ecstore): reserve decommission capacity safely by @overtrue in https://github.com/rustfs/rustfs/pull/6917 * fix(ecstore): complete decommission capacity recovery by @overtrue in https://github.com/rustfs/rustfs/pull/6949 * fix(ecstore): finalize decommission capacity recovery by @overtrue in https://github.com/rustfs/rustfs/pull/6955 * test(scanner): serialize tests sharing process-global scanner state by @reatang in https://github.com/rustfs/rustfs/pull/6940 * fix(s3): harden Snowball archive extraction by @cxymds in https://github.com/rustfs/rustfs/pull/6942 * ci(kms): add enforcement/frame/config-secret lane inputs by @majinghe in https://github.com/rustfs/rustfs/pull/6946 * feat(ci): add upgrade compatibility suite and reorder functional chain by @majinghe in https://github.com/rustfs/rustfs/pull/6950 * fix(heal): resume remote rebuilds after target restart by @marshawcoco in https://github.com/rustfs/rustfs/pull/6941 * fix(s3): align snowball codec compatibility by @cxymds in https://github.com/rustfs/rustfs/pull/6943 * ci(pool): add stage-aware expansion diagnostics by @cxymds in https://github.com/rustfs/rustfs/pull/6963 * fix(replication): let replicated version purges pass the peer WORM gate by @reatang in https://github.com/rustfs/rustfs/pull/6960 * fix(admin): converge site replication IAM deletions and retry backoff by @reatang in https://github.com/rustfs/rustfs/pull/6962 * test(perf): add PUT after-probes and node telemetry by @houseme in https://github.com/rustfs/rustfs/pull/6965 * fix(ecstore): stabilize decommission capacity retries by @houseme in https://github.com/rustfs/rustfs/pull/6959 * fix(scanner): fit usage persistence within publication lease by @houseme in https://github.com/rustfs/rustfs/pull/6967 * ci: add storage engine workflow to functional test chain by @majinghe in https://github.com/rustfs/rustfs/pull/6971 * fix(s3): align snowball member semantics by @cxymds in https://github.com/rustfs/rustfs/pull/6944 * chore(release): prepare 1.0.0-rc.5 by @overtrue in https://github.com/rustfs/rustfs/pull/6968 * fix(scanner): recover legacy usage floor from backup by @houseme in https://github.com/rustfs/rustfs/pull/6964 * perf(s3): bound snowball member imports by @cxymds in https://github.com/rustfs/rustfs/pull/6945 * fix(admin): allow re-pairing non-empty sites in site replication add by @reatang in https://github.com/rustfs/rustfs/pull/6961 * test(ecstore): cover disk metric sequence snapshot by @overtrue in https://github.com/rustfs/rustfs/pull/6872 * fix(put): honor bucket default SSE in path selection by @houseme in https://github.com/rustfs/rustfs/pull/6970 * ci: allow macOS release builds to finish by @overtrue in https://github.com/rustfs/rustfs/pull/6976 ## New Contributors * @teyfix made their first contribution in https://github.com/rustfs/rustfs/pull/6782 * @cuishuang made their first contribution in https://github.com/rustfs/rustfs/pull/6828 **Full Changelog**: https://github.com/rustfs/rustfs/compare/1.0.0-rc.4...1.0.0-rc.5-preview.2