Remove eprintln from library — library code should not print to stderr

Drive recovery is silent. Results communicated through return values.
This commit is contained in:
MattJackson
2026-04-15 02:00:45 +00:00
parent e2349c56c6
commit 4625bb45f6
+8 -25
View File
@@ -437,77 +437,60 @@ impl Drive {
self.recovery_bytes_remaining = self.recovery_bytes_remaining =
self.recovery_bytes_remaining.saturating_sub(bytes_read); self.recovery_bytes_remaining.saturating_sub(bytes_read);
if self.recovery_bytes_remaining == 0 { if self.recovery_bytes_remaining == 0 {
eprintln!("[drive] recovery window complete — resuming full speed");
self.set_speed(0xFFFF); self.set_speed(0xFFFF);
} }
} }
return Ok(result.bytes_transferred); return Ok(result.bytes_transferred);
} }
Err(e) => { Err(_) => {}
eprintln!("[drive] read error at LBA {} count {}{}", lba, count, e);
}
} }
// Phase 1: gentle — sleep 30s, retry. 5 times. // Phase 1: gentle — sleep 30s, retry. 5 times.
// No intervention, just patience.
self.set_speed(0); self.set_speed(0);
for attempt in 1..=5 { for _ in 0..5 {
eprintln!("[drive] phase 1 retry {}/5 at LBA {} — sleep 30s", attempt, lba);
std::thread::sleep(std::time::Duration::from_secs(30)); std::thread::sleep(std::time::Duration::from_secs(30));
match self.scsi.as_mut().execute( match self.scsi.as_mut().execute(
&cdb, crate::scsi::DataDirection::FromDevice, buf, 30_000, &cdb, crate::scsi::DataDirection::FromDevice, buf, 30_000,
) { ) {
Ok(result) => { Ok(result) => {
eprintln!("[drive] phase 1 retry {}/5 OK at LBA {}", attempt, lba);
self.recovery_bytes_remaining = RECOVERY_WINDOW; self.recovery_bytes_remaining = RECOVERY_WINDOW;
return Ok(result.bytes_transferred); return Ok(result.bytes_transferred);
} }
Err(e) => { Err(_) => {}
eprintln!("[drive] phase 1 retry {}/5 FAILED at LBA {}{}", attempt, lba, e);
}
} }
} }
// Phase 2: fresh start — close, reset, open, init. Like restarting the app. // Phase 2: fresh start — close, reset, open, init.
eprintln!("[drive] phase 2: fresh start at LBA {}", lba);
let device = std::path::PathBuf::from(&self.device_path); let device = std::path::PathBuf::from(&self.device_path);
std::thread::sleep(std::time::Duration::from_secs(5)); std::thread::sleep(std::time::Duration::from_secs(5));
let _ = crate::scsi::reset(&device); let _ = crate::scsi::reset(&device);
std::thread::sleep(std::time::Duration::from_secs(5)); std::thread::sleep(std::time::Duration::from_secs(5));
self.scsi = match crate::scsi::open(&device) { self.scsi = match crate::scsi::open(&device) {
Ok(s) => s, Ok(s) => s,
Err(e) => { Err(e) => return Err(e),
eprintln!("[drive] reopen failed: {}", e);
return Err(e);
}
}; };
let _ = self.init(); let _ = self.init();
let _ = self.wait_ready(); let _ = self.wait_ready();
self.set_speed(0); self.set_speed(0);
// Phase 3: gentle again on fresh connection — sleep 30s, retry. 5 times. // Phase 3: gentle again on fresh connection — sleep 30s, retry. 5 times.
for attempt in 1..=5 { for _ in 0..5 {
eprintln!("[drive] phase 3 retry {}/5 at LBA {} — sleep 30s", attempt, lba);
std::thread::sleep(std::time::Duration::from_secs(30)); std::thread::sleep(std::time::Duration::from_secs(30));
match self.scsi.as_mut().execute( match self.scsi.as_mut().execute(
&cdb, crate::scsi::DataDirection::FromDevice, buf, 30_000, &cdb, crate::scsi::DataDirection::FromDevice, buf, 30_000,
) { ) {
Ok(result) => { Ok(result) => {
eprintln!("[drive] phase 3 retry {}/5 OK at LBA {}", attempt, lba);
self.recovery_bytes_remaining = RECOVERY_WINDOW; self.recovery_bytes_remaining = RECOVERY_WINDOW;
return Ok(result.bytes_transferred); return Ok(result.bytes_transferred);
} }
Err(e) => { Err(_) => {}
eprintln!("[drive] phase 3 retry {}/5 FAILED at LBA {}{}", attempt, lba, e);
}
} }
} }
// Both phases failed. Give up. // Both phases failed.
eprintln!("[drive] FAILED LBA {} count {} — all recovery exhausted", lba, count);
self.recovery_bytes_remaining = RECOVERY_WINDOW; self.recovery_bytes_remaining = RECOVERY_WINDOW;
Err(Error::DiscRead { sector: lba as u64 }) Err(Error::DiscRead { sector: lba as u64 })
} }