Slightly improve blocking code, add info to resync worker

This commit is contained in:
Alex 2022-06-24 10:49:52 +02:00
parent 95ffba343f
commit 0837b3dacd
No known key found for this signature in database
GPG key ID: 09EC5284AA804D3C
2 changed files with 29 additions and 1 deletions

View file

@ -728,6 +728,23 @@ impl Worker for ResyncWorker {
"Block resync worker".into()
}
fn info(&self) -> Option<String> {
let mut ret = vec![];
let qlen = self.manager.resync_queue_len().unwrap_or(0);
let elen = self.manager.resync_errors_len().unwrap_or(0);
if qlen > 0 {
ret.push(format!("{} blocks in queue", qlen));
}
if elen > 0 {
ret.push(format!("{} blocks in error state", elen));
}
if ret.len() > 0 {
Some(ret.join(", "))
} else {
None
}
}
async fn work(
&mut self,
_must_exit: &mut watch::Receiver<bool>,

View file

@ -326,7 +326,18 @@ where
&mut self,
_must_exit: &mut watch::Receiver<bool>,
) -> Result<WorkerStatus, Error> {
self.0.updater_loop_iter()
let updater = self.0.clone();
tokio::task::spawn_blocking(move || {
for _i in 0..100 {
let s = updater.updater_loop_iter();
if !matches!(s, Ok(WorkerStatus::Busy)) {
return s;
}
}
Ok(WorkerStatus::Busy)
})
.await
.unwrap()
}
async fn wait_for_work(&mut self, must_exit: &watch::Receiver<bool>) -> WorkerStatus {