From: Arik Sosman Date: Fri, 27 May 2022 00:58:57 +0000 (-0700) Subject: Add optional last_rapid_gossip_sync_timestamp field to NetworkGraph to enable optimiz... X-Git-Tag: v0.0.107~10^2 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=c3bbfe5a1794f4da30b4ce8a684efea60eb6cca2;p=rust-lightning Add optional last_rapid_gossip_sync_timestamp field to NetworkGraph to enable optimized differental rapid syncing. --- diff --git a/lightning/src/routing/network_graph.rs b/lightning/src/routing/network_graph.rs index 26719cc2..668e7096 100644 --- a/lightning/src/routing/network_graph.rs +++ b/lightning/src/routing/network_graph.rs @@ -123,6 +123,9 @@ impl Readable for NodeId { /// Represents the network as nodes and channels between them pub struct NetworkGraph { + /// The unix timestamp in UTC provided by the most recent rapid gossip sync + /// It will be set by the rapid sync process after every sync completion + pub last_rapid_gossip_sync_timestamp: Option, genesis_hash: BlockHash, // Lock order: channels -> nodes channels: RwLock>, @@ -137,6 +140,7 @@ impl Clone for NetworkGraph { genesis_hash: self.genesis_hash.clone(), channels: RwLock::new(channels.clone()), nodes: RwLock::new(nodes.clone()), + last_rapid_gossip_sync_timestamp: self.last_rapid_gossip_sync_timestamp.clone(), } } } @@ -990,7 +994,9 @@ impl Writeable for NetworkGraph { node_info.write(writer)?; } - write_tlv_fields!(writer, {}); + write_tlv_fields!(writer, { + (1, self.last_rapid_gossip_sync_timestamp, option), + }); Ok(()) } } @@ -1014,12 +1020,17 @@ impl Readable for NetworkGraph { let node_info = Readable::read(reader)?; nodes.insert(node_id, node_info); } - read_tlv_fields!(reader, {}); + + let mut last_rapid_gossip_sync_timestamp: Option = None; + read_tlv_fields!(reader, { + (1, last_rapid_gossip_sync_timestamp, option), + }); Ok(NetworkGraph { genesis_hash, channels: RwLock::new(channels), nodes: RwLock::new(nodes), + last_rapid_gossip_sync_timestamp, }) } } @@ -1053,6 +1064,7 @@ impl NetworkGraph { genesis_hash, channels: RwLock::new(BTreeMap::new()), nodes: RwLock::new(BTreeMap::new()), + last_rapid_gossip_sync_timestamp: None, } } @@ -2359,6 +2371,18 @@ mod tests { assert!(::read(&mut io::Cursor::new(&w.0)).unwrap() == network_graph); } + #[test] + fn network_graph_tlv_serialization() { + let mut network_graph = create_network_graph(); + network_graph.last_rapid_gossip_sync_timestamp.replace(42); + + let mut w = test_utils::TestVecWriter(Vec::new()); + network_graph.write(&mut w).unwrap(); + let reassembled_network_graph: NetworkGraph = Readable::read(&mut io::Cursor::new(&w.0)).unwrap(); + assert!(reassembled_network_graph == network_graph); + assert_eq!(reassembled_network_graph.last_rapid_gossip_sync_timestamp.unwrap(), 42); + } + #[test] #[cfg(feature = "std")] fn calling_sync_routing_table() {