Skip to content

Commit 3067120

Browse files
f - update Don't serialize nodes which we have no channels to
1 parent 52412bf commit 3067120

File tree

1 file changed

+21
-18
lines changed

1 file changed

+21
-18
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,18 @@ pub(super) struct PeerState<Signer: ChannelSigner> {
493493
is_connected: bool,
494494
}
495495

496+
impl <Signer: ChannelSigner> PeerState<Signer> {
497+
/// Indicates that a peer meets the criteria where we're ok to remove it from our storage.
498+
/// If true is passed for `require_disconnected`, the function will return false if we haven't
499+
/// disconnected from the node already, ie. `PeerState::is_connected` is set to `true`.
500+
fn ok_to_remove(&self, require_disconnected: bool) -> bool {
501+
if require_disconnected && self.is_connected {
502+
return false
503+
}
504+
self.channel_by_id.len() == 0
505+
}
506+
}
507+
496508
/// Stores a PaymentSecret and any other data we may need to validate an inbound payment is
497509
/// actually ours and not some duplicate HTLC sent to us by a node along the route.
498510
///
@@ -1749,12 +1761,6 @@ where
17491761
.collect()
17501762
}
17511763

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-
17581764
/// Helper function that issues the channel close events
17591765
fn issue_channel_close_events(&self, channel: &Channel<<SP::Target as SignerProvider>::Signer>, closure_reason: ClosureReason) {
17601766
let mut pending_events_lock = self.pending_events.lock().unwrap();
@@ -3547,8 +3553,7 @@ where
35473553

35483554
true
35493555
});
3550-
let peer_should_be_removed = !peer_state.is_connected && peer_state.channel_by_id.len() == 0;
3551-
if peer_should_be_removed {
3556+
if peer_state.ok_to_remove(true) {
35523557
pending_peers_awaiting_removal.push(counterparty_node_id);
35533558
}
35543559
}
@@ -3570,7 +3575,7 @@ where
35703575
// have no channels to the peer.
35713576
let remove_entry = {
35723577
let peer_state = entry.get().lock().unwrap();
3573-
!peer_state.is_connected && peer_state.channel_by_id.len() == 0
3578+
peer_state.ok_to_remove(true)
35743579
};
35753580
if remove_entry {
35763581
entry.remove_entry();
@@ -6328,9 +6333,8 @@ where
63286333
fn peer_disconnected(&self, counterparty_node_id: &PublicKey, no_connection_possible: bool) {
63296334
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(&self.total_consistency_lock, &self.persistence_notifier);
63306335
let mut failed_channels = Vec::new();
6331-
let mut no_channels_remain = true;
63326336
let mut per_peer_state = self.per_peer_state.write().unwrap();
6333-
{
6337+
let remove_peer = {
63346338
log_debug!(self.logger, "Marking channels with {} disconnected and generating channel_updates. We believe we {} make future connections to this peer.",
63356339
log_pubkey!(counterparty_node_id), if no_connection_possible { "cannot" } else { "can" });
63366340
if let Some(peer_state_mutex) = per_peer_state.get(counterparty_node_id) {
@@ -6343,8 +6347,6 @@ where
63436347
update_maps_on_chan_removal!(self, chan);
63446348
self.issue_channel_close_events(chan, ClosureReason::DisconnectedPeer);
63456349
return false;
6346-
} else {
6347-
no_channels_remain = false;
63486350
}
63496351
true
63506352
});
@@ -6374,9 +6376,10 @@ where
63746376
});
63756377
debug_assert!(peer_state.is_connected, "A disconnected peer cannot disconnect");
63766378
peer_state.is_connected = false;
6377-
}
6378-
}
6379-
if no_channels_remain {
6379+
peer_state.ok_to_remove(true)
6380+
} else { true }
6381+
};
6382+
if remove_peer {
63806383
per_peer_state.remove(counterparty_node_id);
63816384
}
63826385
mem::drop(per_peer_state);
@@ -6978,7 +6981,7 @@ where
69786981
for (_, peer_state_mutex) in per_peer_state.iter() {
69796982
let mut peer_state_lock = peer_state_mutex.lock().unwrap();
69806983
let peer_state = &mut *peer_state_lock;
6981-
if !self.ok_to_disconnected(peer_state) {
6984+
if !peer_state.ok_to_remove(false) {
69826985
peers_to_searialize_count += 1;
69836986
}
69846987
number_of_channels += peer_state.channel_by_id.len();
@@ -7035,7 +7038,7 @@ where
70357038
for (peer_pubkey, peer_state_mutex) in per_peer_state.iter() {
70367039
let peer_state_lock= peer_state_mutex.lock().unwrap();
70377040
let peer_state = & *peer_state_lock;
7038-
if !self.ok_to_disconnected(peer_state) {
7041+
if !peer_state.ok_to_remove(false) {
70397042
peer_pubkey.write(writer)?;
70407043
peer_state.latest_features.write(writer)?;
70417044
}

0 commit comments

Comments
 (0)