Skip to content

Commit e954ee8

Browse files
authored
Merge pull request #2035 from TheBlueMatt/2023-02-fix-no-con-discon
Fix (and DRY) the conditionals before calling peer_disconnected
2 parents 068c856 + be6f263 commit e954ee8

16 files changed

+250
-222
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -979,16 +979,16 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
979979

980980
0x0c => {
981981
if !chan_a_disconnected {
982-
nodes[0].peer_disconnected(&nodes[1].get_our_node_id(), false);
983-
nodes[1].peer_disconnected(&nodes[0].get_our_node_id(), false);
982+
nodes[0].peer_disconnected(&nodes[1].get_our_node_id());
983+
nodes[1].peer_disconnected(&nodes[0].get_our_node_id());
984984
chan_a_disconnected = true;
985985
drain_msg_events_on_disconnect!(0);
986986
}
987987
},
988988
0x0d => {
989989
if !chan_b_disconnected {
990-
nodes[1].peer_disconnected(&nodes[2].get_our_node_id(), false);
991-
nodes[2].peer_disconnected(&nodes[1].get_our_node_id(), false);
990+
nodes[1].peer_disconnected(&nodes[2].get_our_node_id());
991+
nodes[2].peer_disconnected(&nodes[1].get_our_node_id());
992992
chan_b_disconnected = true;
993993
drain_msg_events_on_disconnect!(2);
994994
}
@@ -1040,7 +1040,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
10401040

10411041
0x2c => {
10421042
if !chan_a_disconnected {
1043-
nodes[1].peer_disconnected(&nodes[0].get_our_node_id(), false);
1043+
nodes[1].peer_disconnected(&nodes[0].get_our_node_id());
10441044
chan_a_disconnected = true;
10451045
drain_msg_events_on_disconnect!(0);
10461046
}
@@ -1054,14 +1054,14 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
10541054
},
10551055
0x2d => {
10561056
if !chan_a_disconnected {
1057-
nodes[0].peer_disconnected(&nodes[1].get_our_node_id(), false);
1057+
nodes[0].peer_disconnected(&nodes[1].get_our_node_id());
10581058
chan_a_disconnected = true;
10591059
nodes[0].get_and_clear_pending_msg_events();
10601060
ab_events.clear();
10611061
ba_events.clear();
10621062
}
10631063
if !chan_b_disconnected {
1064-
nodes[2].peer_disconnected(&nodes[1].get_our_node_id(), false);
1064+
nodes[2].peer_disconnected(&nodes[1].get_our_node_id());
10651065
chan_b_disconnected = true;
10661066
nodes[2].get_and_clear_pending_msg_events();
10671067
bc_events.clear();
@@ -1073,7 +1073,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
10731073
},
10741074
0x2e => {
10751075
if !chan_b_disconnected {
1076-
nodes[1].peer_disconnected(&nodes[2].get_our_node_id(), false);
1076+
nodes[1].peer_disconnected(&nodes[2].get_our_node_id());
10771077
chan_b_disconnected = true;
10781078
drain_msg_events_on_disconnect!(2);
10791079
}

fuzz/src/full_stack.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -634,11 +634,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
634634
if let Err(e) = channelmanager.funding_transaction_generated(&funding_generation.0, &funding_generation.1, tx.clone()) {
635635
// It's possible the channel has been closed in the mean time, but any other
636636
// failure may be a bug.
637-
if let APIError::ChannelUnavailable { err } = e {
638-
if !err.starts_with("Can't find a peer matching the passed counterparty node_id ") {
639-
assert_eq!(err, "No such channel");
640-
}
641-
} else { panic!(); }
637+
if let APIError::ChannelUnavailable { .. } = e { } else { panic!(); }
642638
}
643639
pending_funding_signatures.insert(funding_output, tx);
644640
}

lightning-invoice/src/utils.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -842,13 +842,13 @@ mod test {
842842

843843
// With only one sufficient-value peer connected we should only get its hint
844844
scid_aliases.remove(&chan_b.0.short_channel_id_alias.unwrap());
845-
nodes[0].node.peer_disconnected(&nodes[2].node.get_our_node_id(), false);
845+
nodes[0].node.peer_disconnected(&nodes[2].node.get_our_node_id());
846846
match_invoice_routes(Some(1_000_000_000), &nodes[0], scid_aliases.clone());
847847

848848
// If we don't have any sufficient-value peers connected we should get all hints with
849849
// sufficient value, even though there is a connected insufficient-value peer.
850850
scid_aliases.insert(chan_b.0.short_channel_id_alias.unwrap());
851-
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
851+
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
852852
match_invoice_routes(Some(1_000_000_000), &nodes[0], scid_aliases);
853853
}
854854

lightning-net-tokio/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,7 @@ mod tests {
643643
fn handle_update_fee(&self, _their_node_id: &PublicKey, _msg: &UpdateFee) {}
644644
fn handle_announcement_signatures(&self, _their_node_id: &PublicKey, _msg: &AnnouncementSignatures) {}
645645
fn handle_channel_update(&self, _their_node_id: &PublicKey, _msg: &ChannelUpdate) {}
646-
fn peer_disconnected(&self, their_node_id: &PublicKey, _no_connection_possible: bool) {
646+
fn peer_disconnected(&self, their_node_id: &PublicKey) {
647647
if *their_node_id == self.expected_pubkey {
648648
self.disconnected_flag.store(true, Ordering::SeqCst);
649649
self.pubkey_disconnected.clone().try_send(()).unwrap();

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,8 @@ fn do_test_simple_monitor_temporary_update_fail(disconnect: bool) {
181181
assert_eq!(nodes[0].node.list_channels().len(), 1);
182182

183183
if disconnect {
184-
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
185-
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
184+
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
185+
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
186186
reconnect_nodes(&nodes[0], &nodes[1], (true, true), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
187187
}
188188

@@ -234,8 +234,8 @@ fn do_test_simple_monitor_temporary_update_fail(disconnect: bool) {
234234
assert_eq!(nodes[0].node.list_channels().len(), 1);
235235

236236
if disconnect {
237-
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
238-
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
237+
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
238+
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
239239
reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
240240
}
241241

@@ -337,8 +337,8 @@ fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
337337
};
338338

339339
if disconnect_count & !disconnect_flags > 0 {
340-
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
341-
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
340+
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
341+
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
342342
}
343343

344344
// Now fix monitor updating...
@@ -348,8 +348,8 @@ fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
348348
check_added_monitors!(nodes[0], 0);
349349

350350
macro_rules! disconnect_reconnect_peers { () => { {
351-
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
352-
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
351+
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
352+
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
353353

354354
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }).unwrap();
355355
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
@@ -1110,8 +1110,8 @@ fn test_monitor_update_fail_reestablish() {
11101110

11111111
let (payment_preimage, payment_hash, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1_000_000);
11121112

1113-
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1114-
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1113+
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
1114+
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
11151115

11161116
nodes[2].node.claim_funds(payment_preimage);
11171117
check_added_monitors!(nodes[2], 1);
@@ -1146,8 +1146,8 @@ fn test_monitor_update_fail_reestablish() {
11461146
nodes[1].node.get_and_clear_pending_msg_events(); // Free the holding cell
11471147
check_added_monitors!(nodes[1], 1);
11481148

1149-
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1150-
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1149+
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
1150+
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
11511151

11521152
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }).unwrap();
11531153
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: nodes[0].node.init_features(), remote_network_address: None }).unwrap();
@@ -1315,8 +1315,8 @@ fn claim_while_disconnected_monitor_update_fail() {
13151315
// Forward a payment for B to claim
13161316
let (payment_preimage_1, payment_hash_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1_000_000);
13171317

1318-
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1319-
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1318+
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
1319+
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
13201320

13211321
nodes[1].node.claim_funds(payment_preimage_1);
13221322
check_added_monitors!(nodes[1], 1);
@@ -1451,8 +1451,8 @@ fn monitor_failed_no_reestablish_response() {
14511451

14521452
// Now disconnect and immediately reconnect, delivering the channel_reestablish while nodes[1]
14531453
// is still failing to update monitors.
1454-
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1455-
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1454+
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
1455+
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
14561456

14571457
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }).unwrap();
14581458
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: nodes[0].node.init_features(), remote_network_address: None }).unwrap();
@@ -1879,8 +1879,8 @@ fn do_during_funding_monitor_fail(confirm_a_first: bool, restore_b_before_conf:
18791879
}
18801880

18811881
// Make sure nodes[1] isn't stupid enough to re-send the ChannelReady on reconnect
1882-
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1883-
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1882+
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
1883+
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
18841884
reconnect_nodes(&nodes[0], &nodes[1], (false, confirm_a_first), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
18851885
assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
18861886
assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
@@ -2047,8 +2047,8 @@ fn test_pending_update_fee_ack_on_reconnect() {
20472047
let bs_first_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
20482048
// bs_first_raa is not delivered until it is re-generated after reconnect
20492049

2050-
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2051-
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
2050+
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
2051+
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
20522052

20532053
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }).unwrap();
20542054
let as_connect_msg = get_chan_reestablish_msgs!(nodes[0], nodes[1]).pop().unwrap();
@@ -2175,8 +2175,8 @@ fn do_update_fee_resend_test(deliver_update: bool, parallel_updates: bool) {
21752175
assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
21762176
}
21772177

2178-
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2179-
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
2178+
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
2179+
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
21802180

21812181
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }).unwrap();
21822182
let as_connect_msg = get_chan_reestablish_msgs!(nodes[0], nodes[1]).pop().unwrap();
@@ -2309,9 +2309,9 @@ fn do_channel_holding_cell_serialize(disconnect: bool, reload_a: bool) {
23092309
let chan_0_monitor_serialized = get_monitor!(nodes[0], chan_id).encode();
23102310
reload_node!(nodes[0], &nodes[0].node.encode(), &[&chan_0_monitor_serialized], persister, new_chain_monitor, nodes_0_deserialized);
23112311
} else {
2312-
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2312+
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
23132313
}
2314-
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
2314+
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
23152315

23162316
// Now reconnect the two
23172317
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }).unwrap();
@@ -2499,8 +2499,8 @@ fn do_test_reconnect_dup_htlc_claims(htlc_status: HTLCStatusAtDupClaim, second_f
24992499
assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
25002500
}
25012501

2502-
nodes[1].node.peer_disconnected(&nodes[2].node.get_our_node_id(), false);
2503-
nodes[2].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
2502+
nodes[1].node.peer_disconnected(&nodes[2].node.get_our_node_id());
2503+
nodes[2].node.peer_disconnected(&nodes[1].node.get_our_node_id());
25042504

25052505
if second_fails {
25062506
reconnect_nodes(&nodes[1], &nodes[2], (false, false), (0, 0), (0, 0), (1, 0), (0, 0), (0, 0), (false, false));

lightning/src/ln/channelmanager.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2666,7 +2666,7 @@ where
26662666
(chan, funding_msg)
26672667
},
26682668
Err(_) => { return Err(APIError::ChannelUnavailable {
2669-
err: "Error deriving keys or signing initial commitment transactions - either our RNG or our counterparty's RNG is broken or the Signer refused to sign".to_owned()
2669+
err: "Signer refused to sign the initial commitment transaction".to_owned()
26702670
}) },
26712671
}
26722672
};
@@ -6245,13 +6245,13 @@ where
62456245
let _ = handle_error!(self, self.internal_channel_reestablish(counterparty_node_id, msg), *counterparty_node_id);
62466246
}
62476247

6248-
fn peer_disconnected(&self, counterparty_node_id: &PublicKey, no_connection_possible: bool) {
6248+
fn peer_disconnected(&self, counterparty_node_id: &PublicKey) {
62496249
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(&self.total_consistency_lock, &self.persistence_notifier);
62506250
let mut failed_channels = Vec::new();
62516251
let mut per_peer_state = self.per_peer_state.write().unwrap();
62526252
let remove_peer = {
6253-
log_debug!(self.logger, "Marking channels with {} disconnected and generating channel_updates. We believe we {} make future connections to this peer.",
6254-
log_pubkey!(counterparty_node_id), if no_connection_possible { "cannot" } else { "can" });
6253+
log_debug!(self.logger, "Marking channels with {} disconnected and generating channel_updates.",
6254+
log_pubkey!(counterparty_node_id));
62556255
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
62566256
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
62576257
let peer_state = &mut *peer_state_lock;
@@ -6293,7 +6293,7 @@ where
62936293
debug_assert!(peer_state.is_connected, "A disconnected peer cannot disconnect");
62946294
peer_state.is_connected = false;
62956295
peer_state.ok_to_remove(true)
6296-
} else { true }
6296+
} else { debug_assert!(false, "Unconnected peer disconnected"); true }
62976297
};
62986298
if remove_peer {
62996299
per_peer_state.remove(counterparty_node_id);
@@ -6307,7 +6307,7 @@ where
63076307

63086308
fn peer_connected(&self, counterparty_node_id: &PublicKey, init_msg: &msgs::Init) -> Result<(), ()> {
63096309
if !init_msg.features.supports_static_remote_key() {
6310-
log_debug!(self.logger, "Peer {} does not support static remote key, disconnecting with no_connection_possible", log_pubkey!(counterparty_node_id));
6310+
log_debug!(self.logger, "Peer {} does not support static remote key, disconnecting", log_pubkey!(counterparty_node_id));
63116311
return Err(());
63126312
}
63136313

@@ -8186,8 +8186,8 @@ mod tests {
81868186

81878187
let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
81888188

8189-
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
8190-
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
8189+
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
8190+
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
81918191

81928192
nodes[0].node.force_close_broadcasting_latest_txn(&chan.2, &nodes[1].node.get_our_node_id()).unwrap();
81938193
check_closed_broadcast!(nodes[0], true);

0 commit comments

Comments
 (0)