Log a zebra-network task cancel on shutdown, rather than panicking (#7078)

This commit is contained in:
teor 2023-06-28 05:42:04 +10:00 committed by GitHub
parent 6311cfbfb3
commit f8e26347a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 22 additions and 5 deletions

View File

@ -1138,12 +1138,29 @@ async fn report_failed(address_book: Arc<std::sync::Mutex<AddressBook>>, addr: M
// # Correctness
//
// Spawn address book accesses on a blocking thread,
// to avoid deadlocks (see #1976).
// Spawn address book accesses on a blocking thread, to avoid deadlocks (see #1976).
let span = Span::current();
tokio::task::spawn_blocking(move || {
let task_result = tokio::task::spawn_blocking(move || {
span.in_scope(|| address_book.lock().unwrap().update(addr))
})
.await
.expect("panic in peer failure address book update task");
.await;
match task_result {
Ok(updated_addr) => assert_eq!(
updated_addr.map(|addr| addr.addr()),
Some(addr.addr()),
"incorrect address updated by address book: \
original: {addr:?}, updated: {updated_addr:?}"
),
Err(e @ JoinError { .. }) => {
if e.is_panic() {
panic!("panic in peer failure address book update task: {e:?}");
} else {
info!(
"task error during peer failure address book update task: {e:?},\
is Zebra shutting down?"
)
}
}
}
}