From 34d74fc4e72c42e00b0d6ba985f931923c0a038c Mon Sep 17 00:00:00 2001 From: Evan Feenstra Date: Thu, 20 Oct 2022 14:24:08 -0700 Subject: [PATCH 1/2] dont panic on vls handler error --- signer/src/lib.rs | 11 +++++++++-- tester/src/main.rs | 42 +++++++++++++++++++++++++++++------------- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/signer/src/lib.rs b/signer/src/lib.rs index bee79d6..7202253 100644 --- a/signer/src/lib.rs +++ b/signer/src/lib.rs @@ -2,6 +2,7 @@ mod derive; mod policy; mod randomstartingtime; +use anyhow::anyhow; use lightning_signer::bitcoin::blockdata::constants::ChainHash; use lightning_signer::node::NodeServices; use lightning_signer::persist::Persist; @@ -109,9 +110,15 @@ pub fn handle( } let reply = if dbid > 0 { let handler = root_handler.for_new_client(dbid, dummy_peer.clone(), dbid); - handler.handle(message).expect("handle") + match handler.handle(message) { + Ok(r) => r, + Err(e) => return Err(anyhow!("client {} handler error: {:?}", dbid, e)), + } } else { - root_handler.handle(message).expect("handle") + match root_handler.handle(message) { + Ok(r) => r, + Err(e) => return Err(anyhow!("root handler error: {:?}", e)), + } }; if do_log { log::info!("VLS msg handled"); diff --git a/tester/src/main.rs b/tester/src/main.rs index 4991f09..48c8c01 100644 --- a/tester/src/main.rs +++ b/tester/src/main.rs @@ -44,11 +44,7 @@ async fn main() -> Result<(), Box> { let pubkey = hex::encode(&ctrlr.pubkey().serialize()); let token = ctrlr.make_auth_token()?; - let client_id = if is_test { - "test-1" - } else { - "sphinx-1" - }; + let client_id = if is_test { "test-1" } else { "sphinx-1" }; let broker: String = env::var("BROKER").unwrap_or("localhost:1883".to_string()); let broker_: Vec<&str> = broker.split(":").collect(); let broker_port = broker_[1].parse::().expect("NaN"); @@ -90,8 +86,14 @@ async fn main() -> Result<(), Box> { } } -async fn run_main(mut eventloop: EventLoop, client: &AsyncClient, mut ctrlr: Controller, is_log: bool, seed: &[u8], network: Network) { - +async fn run_main( + mut eventloop: EventLoop, + client: &AsyncClient, + mut ctrlr: Controller, + is_log: bool, + seed: &[u8], + network: Network, +) { let store_path = env::var("STORE_PATH").unwrap_or(ROOT_STORE.to_string()); let seed32: [u8; 32] = seed.try_into().expect("wrong seed"); @@ -120,13 +122,22 @@ async fn run_main(mut eventloop: EventLoop, client: &AsyncClient, mut ctrlr: Con .publish(topics::VLS_RETURN, QoS::AtMostOnce, false, b) .await .expect("could not publish init response"), - Err(e) => panic!("HANDLE FAILED {:?}", e), + Err(e) => client + .publish( + topics::ERROR, + QoS::AtMostOnce, + false, + e.to_string().as_bytes(), + ) + .await + .expect("could not publish init response"), }; } topics::CONTROL => { match ctrlr.handle(&msg_bytes) { Ok((_msg, res)) => { - let res_data = rmp_serde::to_vec(&res).expect("could not build control response"); + let res_data = rmp_serde::to_vec(&res) + .expect("could not build control response"); client .publish( topics::CONTROL_RETURN, @@ -153,7 +164,12 @@ async fn run_main(mut eventloop: EventLoop, client: &AsyncClient, mut ctrlr: Con } } -async fn run_test(mut eventloop: EventLoop, client: &AsyncClient, mut ctrlr: Controller, is_log: bool) { +async fn run_test( + mut eventloop: EventLoop, + client: &AsyncClient, + mut ctrlr: Controller, + is_log: bool, +) { // test handler loop loop { match eventloop.poll().await { @@ -163,8 +179,7 @@ async fn run_test(mut eventloop: EventLoop, client: &AsyncClient, mut ctrlr: Con match topic.as_str() { topics::VLS => { let (ping, sequence, dbid): (msgs::Ping, u16, u64) = - parser::request_from_bytes(msg_bytes) - .expect("read ping header"); + parser::request_from_bytes(msg_bytes).expect("read ping header"); if is_log { println!("sequence {}", sequence); println!("dbid {}", dbid); @@ -184,7 +199,8 @@ async fn run_test(mut eventloop: EventLoop, client: &AsyncClient, mut ctrlr: Con topics::CONTROL => { match ctrlr.handle(&msg_bytes) { Ok((_msg, res)) => { - let res_data = rmp_serde::to_vec(&res).expect("could not build control response"); + let res_data = rmp_serde::to_vec(&res) + .expect("could not build control response"); client .publish( topics::CONTROL_RETURN, From 38475eb5c3dc417ae0a94b5daf06991972a6530a Mon Sep 17 00:00:00 2001 From: Evan Feenstra Date: Thu, 20 Oct 2022 22:37:29 -0700 Subject: [PATCH 2/2] broker dont panic on status_tx.send fail --- broker/src/mqtt.rs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/broker/src/mqtt.rs b/broker/src/mqtt.rs index e74ff73..7a482d7 100644 --- a/broker/src/mqtt.rs +++ b/broker/src/mqtt.rs @@ -63,10 +63,7 @@ pub async fn start_broker( if let Some(c) = metrics_to_status(metrics, get_connected()) { set_connected(c); log::info!("connection status changed to: {}", c); - status_sender_ - .send(c) - .await - .expect("couldnt send connection status"); + let _ = status_sender_.send(c).await; } tokio::time::sleep(Duration::from_millis(500)).await; } @@ -102,10 +99,7 @@ pub async fn start_broker( Err(e) => { log::warn!("reply_tx timed out {:?}", e); set_connected(false); - status_sender - .send(false) - .await - .expect("couldnt send connection status"); + let _ = status_sender.send(false).await; } } }