Skip to content

Commit 46075cf

Browse files
committed
Split routing from getting network messages
1 parent 3477721 commit 46075cf

File tree

9 files changed

+2836
-2492
lines changed

9 files changed

+2836
-2492
lines changed

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 140 additions & 67 deletions
Large diffs are not rendered by default.

lightning/src/ln/channelmanager.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -828,7 +828,7 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref, K: Deref, F: Deref> ChannelMan
828828
}
829829

830830
/// Gets the list of usable channels, in random order. Useful as an argument to
831-
/// Router::get_route to ensure non-announced channels are used.
831+
/// get_route to ensure non-announced channels are used.
832832
///
833833
/// These are guaranteed to have their is_live value set to true, see the documentation for
834834
/// ChannelDetails::is_live for more info on exactly what the criteria are.
@@ -1878,7 +1878,7 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref, K: Deref, F: Deref> ChannelMan
18781878
.. } => {
18791879
// we get a fail_malformed_htlc from the first hop
18801880
// TODO: We'd like to generate a PaymentFailureNetworkUpdate for temporary
1881-
// failures here, but that would be insufficient as Router::get_route
1881+
// failures here, but that would be insufficient as get_route
18821882
// generally ignores its view of our own channels as we provide them via
18831883
// ChannelDetails.
18841884
// TODO: For non-temporary failures, we really should be closing the

lightning/src/ln/functional_test_utils.rs

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ use chain::transaction::OutPoint;
66
use chain::keysinterface::KeysInterface;
77
use ln::channelmanager::{ChannelManager, ChannelManagerReadArgs, RAACommitmentOrder, PaymentPreimage, PaymentHash, PaymentSecret, PaymentSendFailure};
88
use ln::channelmonitor::{ChannelMonitor, ManyChannelMonitor};
9-
use routing::router::{Route, Router, RouterReadArgs};
9+
use routing::router::{Route, get_route};
10+
use routing::network_graph::{NetGraphMsgHandler, NetGraphMsgHandlerReadArgs};
1011
use ln::features::InitFeatures;
1112
use ln::msgs;
1213
use ln::msgs::{ChannelMessageHandler,RoutingMessageHandler};
@@ -82,7 +83,8 @@ pub struct Node<'a, 'b: 'a, 'c: 'b> {
8283
pub chan_monitor: &'b test_utils::TestChannelMonitor<'c>,
8384
pub keys_manager: &'b test_utils::TestKeysInterface,
8485
pub node: &'a ChannelManager<EnforcingChannelKeys, &'b TestChannelMonitor<'c>, &'c test_utils::TestBroadcaster, &'b test_utils::TestKeysInterface, &'c test_utils::TestFeeEstimator>,
85-
pub router: Router,
86+
pub net_graph_msg_handler: NetGraphMsgHandler,
87+
pub our_node_id: PublicKey,
8688
pub node_seed: [u8; 32],
8789
pub network_payment_count: Rc<RefCell<u8>>,
8890
pub network_chan_count: Rc<RefCell<u32>>,
@@ -100,15 +102,15 @@ impl<'a, 'b, 'c> Drop for Node<'a, 'b, 'c> {
100102
// Check that if we serialize the Router, we can deserialize it again.
101103
{
102104
let mut w = test_utils::TestVecWriter(Vec::new());
103-
self.router.write(&mut w).unwrap();
104-
let deserialized_router = Router::read(&mut ::std::io::Cursor::new(&w.0), RouterReadArgs {
105+
self.net_graph_msg_handler.write(&mut w).unwrap();
106+
let net_graph_msg_handler = NetGraphMsgHandler::read(&mut ::std::io::Cursor::new(&w.0), NetGraphMsgHandlerReadArgs {
105107
chain_monitor: Arc::clone(&self.chain_monitor) as Arc<chaininterface::ChainWatchInterface>,
106108
logger: Arc::clone(&self.logger) as Arc<Logger>
107109
}).unwrap();
108110
let mut chan_progress = 0;
109111
loop {
110-
let orig_announcements = self.router.get_next_channel_announcements(chan_progress, 255);
111-
let deserialized_announcements = deserialized_router.get_next_channel_announcements(chan_progress, 255);
112+
let orig_announcements = self.net_graph_msg_handler.get_next_channel_announcements(chan_progress, 255);
113+
let deserialized_announcements = net_graph_msg_handler.get_next_channel_announcements(chan_progress, 255);
112114
assert!(orig_announcements == deserialized_announcements);
113115
chan_progress = match orig_announcements.last() {
114116
Some(announcement) => announcement.0.contents.short_channel_id + 1,
@@ -117,8 +119,8 @@ impl<'a, 'b, 'c> Drop for Node<'a, 'b, 'c> {
117119
}
118120
let mut node_progress = None;
119121
loop {
120-
let orig_announcements = self.router.get_next_node_announcements(node_progress.as_ref(), 255);
121-
let deserialized_announcements = deserialized_router.get_next_node_announcements(node_progress.as_ref(), 255);
122+
let orig_announcements = self.net_graph_msg_handler.get_next_node_announcements(node_progress.as_ref(), 255);
123+
let deserialized_announcements = net_graph_msg_handler.get_next_node_announcements(node_progress.as_ref(), 255);
122124
assert!(orig_announcements == deserialized_announcements);
123125
node_progress = match orig_announcements.last() {
124126
Some(announcement) => Some(announcement.contents.node_id),
@@ -461,11 +463,11 @@ pub fn create_announced_chan_between_nodes_with_value<'a, 'b, 'c, 'd>(nodes: &'a
461463
};
462464

463465
for node in nodes {
464-
assert!(node.router.handle_channel_announcement(&chan_announcement.0).unwrap());
465-
node.router.handle_channel_update(&chan_announcement.1).unwrap();
466-
node.router.handle_channel_update(&chan_announcement.2).unwrap();
467-
node.router.handle_node_announcement(&a_node_announcement).unwrap();
468-
node.router.handle_node_announcement(&b_node_announcement).unwrap();
466+
assert!(node.net_graph_msg_handler.handle_channel_announcement(&chan_announcement.0).unwrap());
467+
node.net_graph_msg_handler.handle_channel_update(&chan_announcement.1).unwrap();
468+
node.net_graph_msg_handler.handle_channel_update(&chan_announcement.2).unwrap();
469+
node.net_graph_msg_handler.handle_node_announcement(&a_node_announcement).unwrap();
470+
node.net_graph_msg_handler.handle_node_announcement(&b_node_announcement).unwrap();
469471
}
470472
(chan_announcement.1, chan_announcement.2, chan_announcement.3, chan_announcement.4)
471473
}
@@ -949,7 +951,9 @@ pub fn claim_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route:
949951
pub const TEST_FINAL_CLTV: u32 = 32;
950952

951953
pub fn route_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route: &[&Node<'a, 'b, 'c>], recv_value: u64) -> (PaymentPreimage, PaymentHash) {
952-
let route = origin_node.router.get_route(&expected_route.last().unwrap().node.get_our_node_id(), None, &Vec::new(), recv_value, TEST_FINAL_CLTV).unwrap();
954+
let net_graph_msg_handler = &origin_node.net_graph_msg_handler;
955+
let logger = Arc::new(test_utils::TestLogger::new());
956+
let route = get_route(&origin_node.our_node_id, net_graph_msg_handler, &expected_route.last().unwrap().node.get_our_node_id(), None, &Vec::new(), recv_value, TEST_FINAL_CLTV, logger.clone()).unwrap();
953957
assert_eq!(route.paths.len(), 1);
954958
assert_eq!(route.paths[0].len(), expected_route.len());
955959
for (node, hop) in expected_route.iter().zip(route.paths[0].iter()) {
@@ -960,7 +964,9 @@ pub fn route_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route:
960964
}
961965

962966
pub fn route_over_limit<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route: &[&Node<'a, 'b, 'c>], recv_value: u64) {
963-
let route = origin_node.router.get_route(&expected_route.last().unwrap().node.get_our_node_id(), None, &Vec::new(), recv_value, TEST_FINAL_CLTV).unwrap();
967+
let logger = Arc::new(test_utils::TestLogger::new());
968+
let net_graph_msg_handler = &origin_node.net_graph_msg_handler;
969+
let route = get_route(&origin_node.our_node_id, net_graph_msg_handler, &expected_route.last().unwrap().node.get_our_node_id(), None, &Vec::new(), recv_value, TEST_FINAL_CLTV, logger.clone()).unwrap();
964970
assert_eq!(route.paths.len(), 1);
965971
assert_eq!(route.paths[0].len(), expected_route.len());
966972
for (node, hop) in expected_route.iter().zip(route.paths[0].iter()) {
@@ -1102,12 +1108,13 @@ pub fn create_network<'a, 'b: 'a, 'c: 'b>(node_count: usize, cfgs: &'b Vec<NodeC
11021108
let block_notifier = chaininterface::BlockNotifier::new(cfgs[i].chain_monitor.clone());
11031109
block_notifier.register_listener(&cfgs[i].chan_monitor.simple_monitor as &chaininterface::ChainListener);
11041110
block_notifier.register_listener(&chan_mgrs[i] as &chaininterface::ChainListener);
1105-
let router = Router::new(PublicKey::from_secret_key(&secp_ctx, &cfgs[i].keys_manager.get_node_secret()), cfgs[i].chain_monitor.clone(), cfgs[i].logger.clone() as Arc<Logger>);
1111+
let net_graph_msg_handler = NetGraphMsgHandler::new(cfgs[i].chain_monitor.clone(), cfgs[i].logger.clone() as Arc<Logger>);
11061112
nodes.push(Node{ chain_monitor: cfgs[i].chain_monitor.clone(), block_notifier,
11071113
tx_broadcaster: cfgs[i].tx_broadcaster, chan_monitor: &cfgs[i].chan_monitor,
1108-
keys_manager: &cfgs[i].keys_manager, node: &chan_mgrs[i], router,
1114+
keys_manager: &cfgs[i].keys_manager, node: &chan_mgrs[i], net_graph_msg_handler,
11091115
node_seed: cfgs[i].node_seed, network_chan_count: chan_count.clone(),
11101116
network_payment_count: payment_count.clone(), logger: cfgs[i].logger.clone(),
1117+
our_node_id: PublicKey::from_secret_key(&secp_ctx, &cfgs[i].keys_manager.get_node_secret()),
11111118
})
11121119
}
11131120

@@ -1237,8 +1244,8 @@ pub fn get_announce_close_broadcast_events<'a, 'b, 'c>(nodes: &Vec<Node<'a, 'b,
12371244
};
12381245

12391246
for node in nodes {
1240-
node.router.handle_channel_update(&as_update).unwrap();
1241-
node.router.handle_channel_update(&bs_update).unwrap();
1247+
node.net_graph_msg_handler.handle_channel_update(&as_update).unwrap();
1248+
node.net_graph_msg_handler.handle_channel_update(&bs_update).unwrap();
12421249
}
12431250
}
12441251

0 commit comments

Comments
 (0)