test(storage): verify rejected rollback inspection on real disks (#8331)

This commit is contained in:
Chris
2026-10-04 01:13:39 +08:00
committed by GitHub
parent d087416ff9
commit 47d208325e
@@ -9887,9 +9887,20 @@ mod tests {
.await;
}
#[tokio::test]
#[tokio::test(flavor = "current_thread")]
#[serial_test::serial]
#[serial_test::serial(capacity_dirty_scope)]
async fn rename_rollback_incomplete_preserves_overwrite_data_dirs_and_staging() {
let heal_sender_state = match rustfs_heal_contracts::heal_channel::get_heal_channel_sender() {
None => "not_initialized",
Some(sender) => {
assert!(sender.is_closed(), "the global heal receiver must not admit rollback inspection");
"closed"
}
};
// Spawned rollback coordinators share this current-thread recorder.
let recorder = crate::test_metrics::CapturingRecorder::default();
let _recorder_guard = metrics::set_default_local_recorder(&recorder);
temp_env::async_with_vars([(ENV_RUSTFS_PUT_RENAME_EARLY_ACK_ENABLE, Some("true"))], async {
for fault in [
rollback_fault_injection::Fault::Io,
@@ -9941,6 +9952,8 @@ mod tests {
let _rename_fault = rename_fault_injection::fail_rename_on(&object, &[2, 3]);
let _undo_fault = rollback_fault_injection::arm(&object, 0, fault);
let receipt = RenameRollbackReceipt::default();
let rejected_inspections_before =
recorder.counter_value("rustfs_rename_rollback_inspection_total", &[("admission", "failed")]);
assert!(
SetDisks::rename_data_owned_with_fence(
&disks,
@@ -9954,6 +9967,16 @@ mod tests {
.is_err()
);
assert!(receipt.is_incomplete());
let rejected_inspections =
recorder.counter_value("rustfs_rename_rollback_inspection_total", &[("admission", "failed")]);
assert_eq!(
rejected_inspections,
rejected_inspections_before + 1,
"the actual rollback inspection must retain its rejected admission evidence"
);
eprintln!(
"rollback inspection sender={heal_sender_state}, fault={fault:?}, early_ack={early_ack}, failed_admission_total={rejected_inspections}"
);
if !matches!(fault, rollback_fault_injection::Fault::Io) {
assert!(
matches!(