mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-07 05:43:14 +00:00
726f3dc185
An object transitioned to an unversioned remote tier legally records an empty remote version_id (per CLAUDE.md: a tier version of `None`/`""` means the tier bucket is unversioned, so remote GET/DELETE must omit the versionId). Two recovery paths wrongly treated that empty sentinel as an incomplete/unrecoverable record while the persist/encode and worker paths accept it, producing permanent leaks in the crash-recovery window. - tier_delete_journal::into_jentry rejected entries with an empty version_id as "incomplete", so unversioned-tier WAL entries could never be decoded during recovery: the remote object was orphaned and the journal file leaked forever. Drop the version_id emptiness check; keep the obj_name/tier_name checks. Truncated payloads are still rejected at JSON deserialization (all fields are required, non-Option, no default, with deny_unknown_fields). - tier_free_version_recovery::is_recoverable_tier_free_version required a non-empty version_id, silently filtering out free versions of unversioned-tier objects so a first enqueue failure leaked the remote object and local free version permanently. Drop the version_id check; keep free_version + name + tier checks. Both downstream paths already issue a versionless remote delete for an empty version_id, so no further changes are needed. Adds regression tests covering the empty-version_id case and the preserved guards. Co-authored-by: heihutu <heihutu@gmail.com>
RustFS ECStore - Erasure Coding Storage
High-performance erasure coding storage engine for RustFS distributed object storage
📖 Documentation
· 🐛 Bug Reports
· 💬 Discussions
📖 Overview
RustFS ECStore provides erasure coding storage capabilities for the RustFS distributed object storage system. For the complete RustFS experience, please visit the main RustFS repository.
✨ Features
- Reed-Solomon erasure coding implementation
- Configurable redundancy levels (N+K schemes)
- Automatic data healing and reconstruction
- Multi-drive support with intelligent placement
- Parallel encoding/decoding for performance
- Efficient disk space utilization
📚 Documentation
For comprehensive documentation, examples, and usage guides, please visit the main RustFS repository.
📄 License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Copyright 2024 RustFS Team
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
RustFS is a trademark of RustFS, Inc.
All other trademarks are the property of their respective owners.
Made with ❤️ by the RustFS Storage Team
