Skip to content

Commit 7cd5798

Browse files
Don't serialize nodes which we have no channels to
1 parent 6538f4c commit 7cd5798

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1749,6 +1749,12 @@ where
17491749
.collect()
17501750
}
17511751

1752+
// Indicates that a peer meets the criteria where we're ok to disconnect the peer and remove it
1753+
// from our storage
1754+
fn ok_to_disconnected(&self, peer: &PeerState<<SP::Target as SignerProvider>::Signer>) -> bool {
1755+
peer.channel_by_id.len() == 0
1756+
}
1757+
17521758
/// Helper function that issues the channel close events
17531759
fn issue_channel_close_events(&self, channel: &Channel<<SP::Target as SignerProvider>::Signer>, closure_reason: ClosureReason) {
17541760
let mut pending_events_lock = self.pending_events.lock().unwrap();
@@ -6965,13 +6971,17 @@ where
69656971
best_block.block_hash().write(writer)?;
69666972
}
69676973

6974+
let mut peers_to_searialize_count: u64 = 0;
69686975
{
69696976
let per_peer_state = self.per_peer_state.read().unwrap();
69706977
let mut unfunded_channels = 0;
69716978
let mut number_of_channels = 0;
69726979
for (_, peer_state_mutex) in per_peer_state.iter() {
69736980
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
69746981
let peer_state = &mut *peer_state_lock;
6982+
if !self.ok_to_disconnected(peer_state) {
6983+
peers_to_searialize_count += 1;
6984+
}
69756985
number_of_channels += peer_state.channel_by_id.len();
69766986
for (_, channel) in peer_state.channel_by_id.iter() {
69776987
if !channel.is_funding_initiated() {
@@ -7022,11 +7032,14 @@ where
70227032
htlc_purposes.push(purpose);
70237033
}
70247034

7025-
(per_peer_state.len() as u64).write(writer)?;
7035+
(peers_to_searialize_count).write(writer)?;
70267036
for (peer_pubkey, peer_state_mutex) in per_peer_state.iter() {
7027-
peer_pubkey.write(writer)?;
7028-
let peer_state = peer_state_mutex.lock().unwrap();
7029-
peer_state.latest_features.write(writer)?;
7037+
let peer_state_lock= peer_state_mutex.lock().unwrap();
7038+
let peer_state = & *peer_state_lock;
7039+
if !self.ok_to_disconnected(peer_state) {
7040+
peer_pubkey.write(writer)?;
7041+
peer_state.latest_features.write(writer)?;
7042+
}
70307043
}
70317044

70327045
let events = self.pending_events.lock().unwrap();

lightning/src/ln/reorg_tests.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use crate::chain::channelmonitor::ANTI_REORG_DELAY;
1313
use crate::chain::transaction::OutPoint;
1414
use crate::chain::Confirm;
1515
use crate::ln::channelmanager::ChannelManager;
16-
use crate::ln::msgs::ChannelMessageHandler;
16+
use crate::ln::msgs::{ChannelMessageHandler, Init};
1717
use crate::util::events::{Event, MessageSendEventsProvider, ClosureReason, HTLCDestination};
1818
use crate::util::test_utils;
1919
use crate::util::ser::Writeable;
@@ -374,6 +374,12 @@ fn do_test_unconf_chan(reload_node: bool, reorg_after_reload: bool, use_funding_
374374
nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().clear();
375375

376376
// Now check that we can create a new channel
377+
if reload_node && nodes[0].node.per_peer_state.read().unwrap().len() == 0 {
378+
// If we dropped the channel before reloading the node, nodes[1] was also dropped from
379+
// nodes[0] storage, and hence not connected again on startup. We therefore need to
380+
// reconnect to the node before attempting to create a new channel.
381+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &Init { features: nodes[1].node.init_features(), remote_network_address: None }).unwrap();
382+
}
377383
create_announced_chan_between_nodes(&nodes, 0, 1);
378384
send_payment(&nodes[0], &[&nodes[1]], 8000000);
379385
}

0 commit comments

Comments
 (0)