Skip to content

Commit

Permalink
FC outbound chans we sent open_channel for when peer was offline
Browse files Browse the repository at this point in the history
  • Loading branch information
dunxen committed Jun 28, 2023
1 parent ad704c7 commit 30eef0c
Showing 1 changed file with 34 additions and 1 deletion.
35 changes: 34 additions & 1 deletion lightning/src/ln/channelmanager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7144,7 +7144,13 @@ where
// peer we probably failed to send the open_channel message, which is now
// lost. We can't have had anything pending related to this channel, so we just
// drop it.
chan.context.have_received_message()
let retain = chan.context.have_received_message();
if !retain {
log_error!(self.logger, "Force-closing channel {}", log_bytes!(chan.context.channel_id()));
self.issue_channel_close_events(&chan.context, ClosureReason::HolderForceClosed);
self.finish_force_close_channel(chan.context.force_shutdown(false));
}
retain
} else { true }
});
peer_state.channel_by_id.iter_mut().for_each(|(_, chan)| {
Expand Down Expand Up @@ -9394,6 +9400,33 @@ mod tests {
}
}

#[test]
fn test_outbound_channels_created_when_disconnected_removed_on_peer_connected() {
let chanmon_cfgs = create_chanmon_cfgs(2);
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);

let temporary_channel_id = nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 1_000_000, 500_000_000, 42, None).unwrap();

{
let per_peer_state = nodes[0].node.per_peer_state.read().unwrap();
let peer_state_mutex = per_peer_state.get(&nodes[1].node.get_our_node_id()).unwrap();
let mut peer_state = peer_state_mutex.lock().unwrap();
peer_state.is_connected = false;
}

let open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
assert_eq!(open_channel.temporary_channel_id, temporary_channel_id);

nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init {
features: nodes[0].node.init_features(), networks: None, remote_network_address: None
}, true).unwrap();

check_closed_event(&nodes[0], 1, ClosureReason::HolderForceClosed, false);
let chan_closed_events = nodes[1].node.get_and_clear_pending_events();
}

#[test]
fn test_drop_disconnected_peers_when_removing_channels() {
let chanmon_cfgs = create_chanmon_cfgs(2);
Expand Down

0 comments on commit 30eef0c

Please sign in to comment.