fix: skip usage observation metadata recreation

This commit is contained in:
Hiroaki KAWAI
2026-09-26 21:28:14 +09:00
parent c7e03eb926
commit d500661be6
2 changed files with 32 additions and 1 deletions
@@ -1296,9 +1296,14 @@ pub(super) fn classify_get_size_failure(item: &ScannerItem, err: &StorageError)
return GetSizeFailureAction::Skip;
}
let metadata_object = item.metadata_object_path();
if is_scanner_owned_usage_observation(&item.bucket, &metadata_object) {
return GetSizeFailureAction::Skip;
}
if is_scanner_metadata_corrupt_error(err) {
return GetSizeFailureAction::HealMetadata {
object: item.metadata_object_path(),
object: metadata_object,
};
}
@@ -583,6 +583,32 @@ fn test_classify_get_size_failure_marks_metadata_heal_object_path() {
);
}
#[test]
fn test_classify_get_size_failure_skips_scanner_owned_usage_observation() {
let temp_dir = std::env::temp_dir();
let file_type = std::fs::metadata(&temp_dir)
.expect("temp dir metadata should be readable")
.file_type();
let item = ScannerItem {
path: temp_dir.join("internal/buckets/.usage.observed.json/xl.meta").to_string_lossy().to_string(),
bucket: crate::RUSTFS_META_BUCKET.to_string(),
prefix: crate::data_usage_define::DATA_USAGE_OBSERVED_OBJ_NAME_PATH.to_string(),
object_name: "xl.meta".to_string(),
file_type,
lifecycle: None,
object_lock: None,
replication: None,
heal_enabled: false,
heal_bitrot: false,
debug: false,
};
let err = StorageError::other(format!("{}: corrupt metadata", crate::scanner_io::SCANNER_METADATA_CORRUPT_ERROR));
let action = classify_get_size_failure(&item, &err);
assert_eq!(action, GetSizeFailureAction::Skip);
}
#[test]
fn test_classify_get_size_failure_records_transient_metadata_error_without_heal() {
let temp_dir = std::env::temp_dir();