Skip to content

Commit 4782cbe

Browse files
committed
Track if a peer is connected or not in ChannelManager
1 parent 865856a commit 4782cbe

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,10 @@ pub(super) struct PeerState<Signer: ChannelSigner> {
487487
/// Messages to send to the peer - pushed to in the same lock that they are generated in (except
488488
/// for broadcast messages, where ordering isn't as strict).
489489
pub(super) pending_msg_events: Vec<MessageSendEvent>,
490+
/// The peer is currently connected (i.e. we've seen a
491+
/// [`ChannelMessageHandler::peer_connected`] and no corresponding
492+
/// [`ChannelMessageHandler::peer_disconnected`].
493+
is_connected: bool,
490494
}
491495

492496
/// Stores a PaymentSecret and any other data we may need to validate an inbound payment is
@@ -6294,6 +6298,8 @@ where
62946298
&events::MessageSendEvent::SendGossipTimestampFilter { .. } => false,
62956299
}
62966300
});
6301+
debug_assert!(peer_state.is_connected, "A disconnected peer cannot disconnect");
6302+
peer_state.is_connected = false;
62976303
}
62986304
}
62996305
if no_channels_remain {
@@ -6324,10 +6330,14 @@ where
63246330
channel_by_id: HashMap::new(),
63256331
latest_features: init_msg.features.clone(),
63266332
pending_msg_events: Vec::new(),
6333+
is_connected: true,
63276334
}));
63286335
},
63296336
hash_map::Entry::Occupied(e) => {
6330-
e.get().lock().unwrap().latest_features = init_msg.features.clone();
6337+
let mut peer_state = e.get().lock().unwrap();
6338+
peer_state.latest_features = init_msg.features.clone();
6339+
debug_assert!(!peer_state.is_connected, "A peer shouldn't be connected twice");
6340+
peer_state.is_connected = true;
63316341
},
63326342
}
63336343
}
@@ -7346,6 +7356,7 @@ where
73467356
channel_by_id: peer_channels.remove(&peer_pubkey).unwrap_or(HashMap::new()),
73477357
latest_features: Readable::read(reader)?,
73487358
pending_msg_events: Vec::new(),
7359+
is_connected: false,
73497360
};
73507361
per_peer_state.insert(peer_pubkey, Mutex::new(peer_state));
73517362
}
@@ -8059,8 +8070,6 @@ mod tests {
80598070

80608071
let payer_pubkey = nodes[0].node.get_our_node_id();
80618072
let payee_pubkey = nodes[1].node.get_our_node_id();
8062-
nodes[0].node.peer_connected(&payee_pubkey, &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }, true).unwrap();
8063-
nodes[1].node.peer_connected(&payer_pubkey, &msgs::Init { features: nodes[0].node.init_features(), remote_network_address: None }, false).unwrap();
80648073

80658074
let _chan = create_chan_between_nodes(&nodes[0], &nodes[1]);
80668075
let route_params = RouteParameters {
@@ -8104,8 +8113,6 @@ mod tests {
81048113

81058114
let payer_pubkey = nodes[0].node.get_our_node_id();
81068115
let payee_pubkey = nodes[1].node.get_our_node_id();
8107-
nodes[0].node.peer_connected(&payee_pubkey, &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }, true).unwrap();
8108-
nodes[1].node.peer_connected(&payer_pubkey, &msgs::Init { features: nodes[0].node.init_features(), remote_network_address: None }, false).unwrap();
81098116

81108117
let _chan = create_chan_between_nodes(&nodes[0], &nodes[1]);
81118118
let route_params = RouteParameters {

lightning/src/ln/functional_tests.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3839,9 +3839,10 @@ fn do_test_drop_messages_peer_disconnect(messages_delivered: u8, simulate_broken
38393839
if messages_delivered == 1 || messages_delivered == 2 {
38403840
expect_payment_path_successful!(nodes[0]);
38413841
}
3842-
3843-
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3844-
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3842+
if messages_delivered <= 5 {
3843+
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3844+
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3845+
}
38453846
reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
38463847

38473848
if messages_delivered > 2 {
@@ -9210,8 +9211,6 @@ fn test_keysend_payments_to_private_node() {
92109211

92119212
let payer_pubkey = nodes[0].node.get_our_node_id();
92129213
let payee_pubkey = nodes[1].node.get_our_node_id();
9213-
nodes[0].node.peer_connected(&payee_pubkey, &msgs::Init { features: nodes[1].node.init_features(), remote_network_address: None }, true).unwrap();
9214-
nodes[1].node.peer_connected(&payer_pubkey, &msgs::Init { features: nodes[0].node.init_features(), remote_network_address: None }, false).unwrap();
92159214

92169215
let _chan = create_chan_between_nodes(&nodes[0], &nodes[1]);
92179216
let route_params = RouteParameters {

0 commit comments

Comments
 (0)