Skip to content

Commit d37923a

Browse files
committed
Improve logging in Node
While we cannot get rid of the panics here, we can make sure the errors are logged before we (explicitly) panic.
1 parent b4dec30 commit d37923a

File tree

1 file changed

+30
-9
lines changed

1 file changed

+30
-9
lines changed

src/lib.rs

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,10 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
459459
Arc::clone(&gossip_sync_store),
460460
Arc::clone(&gossip_sync_logger),
461461
)
462-
.expect("Persistence failed");
462+
.unwrap_or_else(|e| {
463+
log_error!(gossip_sync_logger, "Persistence failed: {}", e);
464+
panic!("Persistence failed");
465+
});
463466
}
464467
Err(e) => log_error!(
465468
gossip_sync_logger,
@@ -478,6 +481,7 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
478481
let peer_manager_connection_handler = Arc::clone(&self.peer_manager);
479482
let mut stop_listen = self.stop_receiver.clone();
480483
let listening_address = listening_address.clone();
484+
let listening_logger = Arc::clone(&self.logger);
481485

482486
let bind_addr = listening_address
483487
.to_socket_addrs()
@@ -501,9 +505,14 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
501505

502506
runtime.spawn(async move {
503507
let listener =
504-
tokio::net::TcpListener::bind(bind_addr).await.expect(
505-
"Failed to bind to listen address/port - is something else already listening on it?",
506-
);
508+
tokio::net::TcpListener::bind(bind_addr).await
509+
.unwrap_or_else(|e| {
510+
log_error!(listening_logger, "Failed to bind to listen address/port - is something else already listening on it?: {}", e);
511+
panic!(
512+
"Failed to bind to listen address/port - is something else already listening on it?",
513+
);
514+
});
515+
507516
loop {
508517
let peer_mgr = Arc::clone(&peer_manager_connection_handler);
509518
tokio::select! {
@@ -614,7 +623,10 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
614623

615624
let unix_time_secs = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs();
616625
io::utils::write_latest_node_ann_bcast_timestamp(unix_time_secs, Arc::clone(&bcast_store), Arc::clone(&bcast_logger))
617-
.expect("Persistence failed");
626+
.unwrap_or_else(|e| {
627+
log_error!(bcast_logger, "Persistence failed: {}", e);
628+
panic!("Persistence failed");
629+
});
618630
}
619631
}
620632
}
@@ -640,6 +652,7 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
640652
let background_gossip_sync = self.gossip_source.as_gossip_sync();
641653
let background_peer_man = Arc::clone(&self.peer_manager);
642654
let background_logger = Arc::clone(&self.logger);
655+
let background_error_logger = Arc::clone(&self.logger);
643656
let background_scorer = Arc::clone(&self.scorer);
644657
let stop_bp = self.stop_receiver.clone();
645658
let sleeper = move |d| {
@@ -670,7 +683,10 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
670683
true,
671684
)
672685
.await
673-
.expect("Failed to process events");
686+
.unwrap_or_else(|e| {
687+
log_error!(background_error_logger, "Failed to process events: {}", e);
688+
panic!("Failed to process events");
689+
});
674690
});
675691

676692
*runtime_lock = Some(runtime);
@@ -731,9 +747,14 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
731747
///
732748
/// **Note:** This **MUST** be called after each event has been handled.
733749
pub fn event_handled(&self) {
734-
self.event_queue
735-
.event_handled()
736-
.expect("Couldn't mark event handled due to persistence failure");
750+
self.event_queue.event_handled().unwrap_or_else(|e| {
751+
log_error!(
752+
self.logger,
753+
"Couldn't mark event handled due to persistence failure: {}",
754+
e
755+
);
756+
panic!("Couldn't mark event handled due to persistence failure");
757+
});
737758
}
738759

739760
/// Returns our own node id

0 commit comments

Comments
 (0)