mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-24 21:26:28 +00:00
chore(ecstore): remove test-only BitrotErrorType and pin wire-only disk variants (#6032)
BitrotErrorType (disk/error.rs) was constructed only by its own unit test: production bitrot mismatches never flow through it (they surface as DiskError::other strings). Delete the enum, its From<BitrotErrorType> for DiskError impl, the self-test, and the api facade re-export. The facade inventory doc does not name the type, so no doc change is needed. DiskError::SourceStalled and DiskError::CrossDeviceLink are never constructed locally — they are reachable only through wire decoding and no current node sends them. Their decode arms stay per the cross-version compatibility constraint; each variant now carries a doc comment saying exactly that so the next dead-code sweep does not re-litigate them. Their consumer arms (heal classifier, batch processor) are left untouched — the values cannot appear, so removing the arms would be unobservable, and the heal classifier is pinned by the issue as do-not-touch. Ref rustfs/backlog#1831 (PR4).
This commit is contained in:
@@ -346,7 +346,7 @@ pub mod disk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub mod error {
|
pub mod error {
|
||||||
pub use crate::disk::error::{BitrotErrorType, DiskError, Error, FileAccessDeniedWithContext, Result};
|
pub use crate::disk::error::{DiskError, Error, FileAccessDeniedWithContext, Result};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod error_reduce {
|
pub mod error_reduce {
|
||||||
|
|||||||
@@ -113,6 +113,9 @@ pub enum DiskError {
|
|||||||
#[error("bit-rot hash algorithm is invalid")]
|
#[error("bit-rot hash algorithm is invalid")]
|
||||||
BitrotHashAlgoInvalid,
|
BitrotHashAlgoInvalid,
|
||||||
|
|
||||||
|
/// Never constructed locally by RustFS (only reachable through wire
|
||||||
|
/// decoding, and no current node sends it). The wire code is kept for
|
||||||
|
/// cross-version compatibility — do not renumber or remove (backlog#1831).
|
||||||
#[error("Rename across devices not allowed, please fix your backend configuration")]
|
#[error("Rename across devices not allowed, please fix your backend configuration")]
|
||||||
CrossDeviceLink,
|
CrossDeviceLink,
|
||||||
|
|
||||||
@@ -143,6 +146,9 @@ pub enum DiskError {
|
|||||||
#[error("io error {0}")]
|
#[error("io error {0}")]
|
||||||
Io(#[source] io::Error),
|
Io(#[source] io::Error),
|
||||||
|
|
||||||
|
/// Never constructed locally by RustFS (only reachable through wire
|
||||||
|
/// decoding, and no current node sends it). The wire code is kept for
|
||||||
|
/// cross-version compatibility — do not renumber or remove (backlog#1831).
|
||||||
#[error("source stalled")]
|
#[error("source stalled")]
|
||||||
SourceStalled,
|
SourceStalled,
|
||||||
|
|
||||||
@@ -642,19 +648,6 @@ impl Hash for DiskError {
|
|||||||
// is currently commented out to avoid complexity. These can be re-enabled
|
// is currently commented out to avoid complexity. These can be re-enabled
|
||||||
// when needed for specific disk quorum checking and error aggregation logic.
|
// when needed for specific disk quorum checking and error aggregation logic.
|
||||||
|
|
||||||
/// Bitrot errors
|
|
||||||
#[derive(Debug, thiserror::Error)]
|
|
||||||
pub enum BitrotErrorType {
|
|
||||||
#[error("bitrot checksum verification failed")]
|
|
||||||
BitrotChecksumMismatch { expected: String, got: String },
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<BitrotErrorType> for DiskError {
|
|
||||||
fn from(e: BitrotErrorType) -> Self {
|
|
||||||
DiskError::other(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Context wrapper for file access errors
|
/// Context wrapper for file access errors
|
||||||
#[derive(Debug, thiserror::Error)]
|
#[derive(Debug, thiserror::Error)]
|
||||||
pub struct FileAccessDeniedWithContext {
|
pub struct FileAccessDeniedWithContext {
|
||||||
@@ -869,19 +862,6 @@ mod tests {
|
|||||||
let _disk_error: DiskError = json_error.into();
|
let _disk_error: DiskError = json_error.into();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_bitrot_error_type() {
|
|
||||||
let bitrot_error = BitrotErrorType::BitrotChecksumMismatch {
|
|
||||||
expected: "abc123".to_string(),
|
|
||||||
got: "def456".to_string(),
|
|
||||||
};
|
|
||||||
|
|
||||||
assert!(bitrot_error.to_string().contains("bitrot checksum verification failed"));
|
|
||||||
|
|
||||||
let disk_error: DiskError = bitrot_error.into();
|
|
||||||
assert!(matches!(disk_error, DiskError::Io(_)));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_file_access_denied_with_context() {
|
fn test_file_access_denied_with_context() {
|
||||||
let path = PathBuf::from("/test/path");
|
let path = PathBuf::from("/test/path");
|
||||||
|
|||||||
Reference in New Issue
Block a user