Skip to content

Commit 933ae34

Browse files
Antoine RiardTheBlueMatt
Antoine Riard
authored andcommitted
Drop Result for ChannelMessageHandler methods
Simplify interfaces between ChannelMessageHandler and PeerManager, by switching all ChannelMessageHandler errors to HandleError sent internally instead of being return. With further refactors in Router and PeerChannelEncryptor, errors management on the PeerManager-side won't be splitted between try_potential_handleerror and HandleError processing. Inside ChannelManager, we now log MsgHandleErrInternal and send ErrorAction to PeerManager. On a high-level, it should allow client using API to be more flexible by polling events instead of waiting function call returns. We also update handle_error macro to take channel_state_lock from caller which should avoid some deadlock potential for some edges cases. Filter out IgnoreError in handle_error macro, update test in consequence.
1 parent 29ace59 commit 933ae34

8 files changed

+810
-877
lines changed

fuzz/src/chanmon_consistency.rs

+21-24
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ use lightning::ln::channelmonitor;
2929
use lightning::ln::channelmonitor::{ChannelMonitor, ChannelMonitorUpdateErr, HTLCUpdate};
3030
use lightning::ln::channelmanager::{ChannelManager, PaymentHash, PaymentPreimage, ChannelManagerReadArgs};
3131
use lightning::ln::router::{Route, RouteHop};
32-
use lightning::ln::msgs::{CommitmentUpdate, ChannelMessageHandler, ErrorAction, LightningError, UpdateAddHTLC, LocalFeatures};
32+
use lightning::ln::msgs::{CommitmentUpdate, ChannelMessageHandler, UpdateAddHTLC, LocalFeatures, ErrorAction};
3333
use lightning::util::enforcing_trait_impls::EnforcingChannelKeys;
3434
use lightning::util::events;
3535
use lightning::util::logger::Logger;
@@ -252,7 +252,7 @@ pub fn do_test(data: &[u8]) {
252252
} else { panic!("Wrong event type"); }
253253
};
254254

255-
$dest.handle_open_channel(&$source.get_our_node_id(), LocalFeatures::new(), &open_channel).unwrap();
255+
$dest.handle_open_channel(&$source.get_our_node_id(), LocalFeatures::new(), &open_channel);
256256
let accept_channel = {
257257
let events = $dest.get_and_clear_pending_msg_events();
258258
assert_eq!(events.len(), 1);
@@ -261,7 +261,7 @@ pub fn do_test(data: &[u8]) {
261261
} else { panic!("Wrong event type"); }
262262
};
263263

264-
$source.handle_accept_channel(&$dest.get_our_node_id(), LocalFeatures::new(), &accept_channel).unwrap();
264+
$source.handle_accept_channel(&$dest.get_our_node_id(), LocalFeatures::new(), &accept_channel);
265265
{
266266
let events = $source.get_and_clear_pending_events();
267267
assert_eq!(events.len(), 1);
@@ -282,7 +282,7 @@ pub fn do_test(data: &[u8]) {
282282
msg.clone()
283283
} else { panic!("Wrong event type"); }
284284
};
285-
$dest.handle_funding_created(&$source.get_our_node_id(), &funding_created).unwrap();
285+
$dest.handle_funding_created(&$source.get_our_node_id(), &funding_created);
286286

287287
let funding_signed = {
288288
let events = $dest.get_and_clear_pending_msg_events();
@@ -291,7 +291,7 @@ pub fn do_test(data: &[u8]) {
291291
msg.clone()
292292
} else { panic!("Wrong event type"); }
293293
};
294-
$source.handle_funding_signed(&$dest.get_our_node_id(), &funding_signed).unwrap();
294+
$source.handle_funding_signed(&$dest.get_our_node_id(), &funding_signed);
295295

296296
{
297297
let events = $source.get_and_clear_pending_events();
@@ -330,7 +330,7 @@ pub fn do_test(data: &[u8]) {
330330
if let events::MessageSendEvent::SendFundingLocked { ref node_id, ref msg } = event {
331331
for node in $nodes.iter() {
332332
if node.get_our_node_id() == *node_id {
333-
node.handle_funding_locked(&$nodes[idx].get_our_node_id(), msg).unwrap();
333+
node.handle_funding_locked(&$nodes[idx].get_our_node_id(), msg);
334334
}
335335
}
336336
} else { panic!("Wrong event type"); }
@@ -381,16 +381,6 @@ pub fn do_test(data: &[u8]) {
381381
let mut node_c_ser = VecWriter(Vec::new());
382382
nodes[2].write(&mut node_c_ser).unwrap();
383383

384-
macro_rules! test_err {
385-
($res: expr) => {
386-
match $res {
387-
Ok(()) => {},
388-
Err(LightningError { action: ErrorAction::IgnoreError, .. }) => { },
389-
_ => { $res.unwrap() },
390-
}
391-
}
392-
}
393-
394384
macro_rules! test_return {
395385
() => { {
396386
assert_eq!(nodes[0].list_channels().len(), 1);
@@ -470,7 +460,7 @@ pub fn do_test(data: &[u8]) {
470460
assert!(update_fee.is_none());
471461
for update_add in update_add_htlcs {
472462
if !$corrupt_forward {
473-
test_err!(dest.handle_update_add_htlc(&nodes[$node].get_our_node_id(), &update_add));
463+
dest.handle_update_add_htlc(&nodes[$node].get_our_node_id(), &update_add);
474464
} else {
475465
// Corrupt the update_add_htlc message so that its HMAC
476466
// check will fail and we generate a
@@ -479,33 +469,33 @@ pub fn do_test(data: &[u8]) {
479469
let mut msg_ser = update_add.encode();
480470
msg_ser[1000] ^= 0xff;
481471
let new_msg = UpdateAddHTLC::read(&mut Cursor::new(&msg_ser)).unwrap();
482-
test_err!(dest.handle_update_add_htlc(&nodes[$node].get_our_node_id(), &new_msg));
472+
dest.handle_update_add_htlc(&nodes[$node].get_our_node_id(), &new_msg);
483473
}
484474
}
485475
for update_fulfill in update_fulfill_htlcs {
486-
test_err!(dest.handle_update_fulfill_htlc(&nodes[$node].get_our_node_id(), &update_fulfill));
476+
dest.handle_update_fulfill_htlc(&nodes[$node].get_our_node_id(), &update_fulfill);
487477
}
488478
for update_fail in update_fail_htlcs {
489-
test_err!(dest.handle_update_fail_htlc(&nodes[$node].get_our_node_id(), &update_fail));
479+
dest.handle_update_fail_htlc(&nodes[$node].get_our_node_id(), &update_fail);
490480
}
491481
for update_fail_malformed in update_fail_malformed_htlcs {
492-
test_err!(dest.handle_update_fail_malformed_htlc(&nodes[$node].get_our_node_id(), &update_fail_malformed));
482+
dest.handle_update_fail_malformed_htlc(&nodes[$node].get_our_node_id(), &update_fail_malformed);
493483
}
494-
test_err!(dest.handle_commitment_signed(&nodes[$node].get_our_node_id(), &commitment_signed));
484+
dest.handle_commitment_signed(&nodes[$node].get_our_node_id(), &commitment_signed);
495485
}
496486
}
497487
},
498488
events::MessageSendEvent::SendRevokeAndACK { ref node_id, ref msg } => {
499489
for dest in nodes.iter() {
500490
if dest.get_our_node_id() == *node_id {
501-
test_err!(dest.handle_revoke_and_ack(&nodes[$node].get_our_node_id(), msg));
491+
dest.handle_revoke_and_ack(&nodes[$node].get_our_node_id(), msg);
502492
}
503493
}
504494
},
505495
events::MessageSendEvent::SendChannelReestablish { ref node_id, ref msg } => {
506496
for dest in nodes.iter() {
507497
if dest.get_our_node_id() == *node_id {
508-
test_err!(dest.handle_channel_reestablish(&nodes[$node].get_our_node_id(), msg));
498+
dest.handle_channel_reestablish(&nodes[$node].get_our_node_id(), msg);
509499
}
510500
}
511501
},
@@ -516,6 +506,10 @@ pub fn do_test(data: &[u8]) {
516506
// Can be generated due to a payment forward being rejected due to a
517507
// channel having previously failed a monitor update
518508
},
509+
events::MessageSendEvent::HandleError { action: ErrorAction::IgnoreError, .. } => {
510+
// Can be generated at any processing step to send back an error, disconnect
511+
// peer or just ignore
512+
},
519513
_ => panic!("Unhandled message event"),
520514
}
521515
}
@@ -532,6 +526,7 @@ pub fn do_test(data: &[u8]) {
532526
events::MessageSendEvent::SendChannelReestablish { .. } => {},
533527
events::MessageSendEvent::SendFundingLocked { .. } => {},
534528
events::MessageSendEvent::PaymentFailureNetworkUpdate { .. } => {},
529+
events::MessageSendEvent::HandleError { action: ErrorAction::IgnoreError, .. } => {},
535530
_ => panic!("Unhandled message event"),
536531
}
537532
}
@@ -544,6 +539,7 @@ pub fn do_test(data: &[u8]) {
544539
events::MessageSendEvent::SendChannelReestablish { .. } => {},
545540
events::MessageSendEvent::SendFundingLocked { .. } => {},
546541
events::MessageSendEvent::PaymentFailureNetworkUpdate { .. } => {},
542+
events::MessageSendEvent::HandleError { action: ErrorAction::IgnoreError, .. } => {},
547543
_ => panic!("Unhandled message event"),
548544
}
549545
}
@@ -565,6 +561,7 @@ pub fn do_test(data: &[u8]) {
565561
},
566562
events::MessageSendEvent::SendFundingLocked { .. } => false,
567563
events::MessageSendEvent::PaymentFailureNetworkUpdate { .. } => false,
564+
events::MessageSendEvent::HandleError { action: ErrorAction::IgnoreError, .. } => false,
568565
_ => panic!("Unhandled message event"),
569566
};
570567
if push { msg_sink.push(event); }

0 commit comments

Comments
 (0)