X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=background-processor%2Fsrc%2Flib.rs;h=23c18623dc59f90189bd47b831acf05b0d21655c;hb=18a096775849e8f10457a4b0c51721f1227909b0;hp=63b9ef3110eac0dea2078f74073570231f073fef;hpb=041d7aaa9da9b4e5cc0fb3276edf71301014fe41;p=rust-lightning diff --git a/background-processor/src/lib.rs b/background-processor/src/lib.rs index 63b9ef31..23c18623 100644 --- a/background-processor/src/lib.rs +++ b/background-processor/src/lib.rs @@ -1,11 +1,13 @@ +#![deny(broken_intra_doc_links)] +#![deny(unsafe_code)] + #[macro_use] extern crate lightning; use lightning::chain; use lightning::chain::chaininterface::{BroadcasterInterface, FeeEstimator}; -use lightning::chain::keysinterface::{ChannelKeys, KeysInterface}; +use lightning::chain::keysinterface::{Sign, KeysInterface}; use lightning::ln::channelmanager::ChannelManager; use lightning::util::logger::Logger; -use lightning::util::ser::Writeable; use std::sync::Arc; use std::sync::atomic::{AtomicBool, Ordering}; use std::thread; @@ -53,21 +55,21 @@ impl BackgroundProcessor { /// [`thread_handle`]: struct.BackgroundProcessor.html#structfield.thread_handle /// [`ChannelManager::write`]: ../lightning/ln/channelmanager/struct.ChannelManager.html#method.write /// [`FilesystemPersister::persist_manager`]: ../lightning_persister/struct.FilesystemPersister.html#impl - pub fn start(persist_manager: PM, manager: Arc, Arc, Arc, Arc, Arc>>, logger: Arc) -> Self - where ChanSigner: 'static + ChannelKeys + Writeable, - M: 'static + chain::Watch, + pub fn start(persist_manager: PM, manager: Arc, Arc, Arc, Arc, Arc>>, logger: Arc) -> Self + where Signer: 'static + Sign, + M: 'static + chain::Watch, T: 'static + BroadcasterInterface, - K: 'static + KeysInterface, + K: 'static + KeysInterface, F: 'static + FeeEstimator, L: 'static + Logger, - PM: 'static + Send + Fn(&ChannelManager, Arc, Arc, Arc, Arc>) -> Result<(), std::io::Error>, + PM: 'static + Send + Fn(&ChannelManager, Arc, Arc, Arc, Arc>) -> Result<(), std::io::Error>, { let stop_thread = Arc::new(AtomicBool::new(false)); let stop_thread_clone = stop_thread.clone(); let handle = thread::spawn(move || -> Result<(), std::io::Error> { let mut current_time = Instant::now(); loop { - let updates_available = manager.wait_timeout(Duration::from_millis(100)); + let updates_available = manager.await_persistable_update_timeout(Duration::from_millis(100)); if updates_available { persist_manager(&*manager)?; } @@ -104,10 +106,10 @@ mod tests { use lightning::chain; use lightning::chain::chaininterface::{BroadcasterInterface, FeeEstimator}; use lightning::chain::chainmonitor; - use lightning::chain::keysinterface::{ChannelKeys, InMemoryChannelKeys, KeysInterface, KeysManager}; + use lightning::chain::keysinterface::{Sign, InMemorySigner, KeysInterface, KeysManager}; use lightning::chain::transaction::OutPoint; use lightning::get_event_msg; - use lightning::ln::channelmanager::{ChannelManager, SimpleArcChannelManager}; + use lightning::ln::channelmanager::{ChainParameters, ChannelManager, SimpleArcChannelManager}; use lightning::ln::features::InitFeatures; use lightning::ln::msgs::ChannelMessageHandler; use lightning::util::config::UserConfig; @@ -122,10 +124,10 @@ mod tests { use std::time::Duration; use super::BackgroundProcessor; - type ChainMonitor = chainmonitor::ChainMonitor, Arc, Arc, Arc, Arc>; + type ChainMonitor = chainmonitor::ChainMonitor, Arc, Arc, Arc, Arc>; struct Node { - node: SimpleArcChannelManager, + node: Arc>, persister: Arc, logger: Arc, } @@ -156,10 +158,16 @@ mod tests { let persister = Arc::new(FilesystemPersister::new(format!("{}_persister_{}", persist_dir, i))); let seed = [i as u8; 32]; let network = Network::Testnet; - let now = Duration::from_secs(genesis_block(network).header.time as u64); + let genesis_block = genesis_block(network); + let now = Duration::from_secs(genesis_block.header.time as u64); let keys_manager = Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos())); let chain_monitor = Arc::new(chainmonitor::ChainMonitor::new(Some(chain_source.clone()), tx_broadcaster.clone(), logger.clone(), fee_estimator.clone(), persister.clone())); - let manager = Arc::new(ChannelManager::new(Network::Testnet, fee_estimator.clone(), chain_monitor.clone(), tx_broadcaster, logger.clone(), keys_manager.clone(), UserConfig::default(), i)); + let params = ChainParameters { + network, + latest_hash: genesis_block.block_hash(), + latest_height: 0, + }; + let manager = Arc::new(ChannelManager::new(fee_estimator.clone(), chain_monitor.clone(), tx_broadcaster, logger.clone(), keys_manager.clone(), UserConfig::default(), params)); let node = Node { node: manager, persister, logger }; nodes.push(node); } @@ -203,7 +211,7 @@ mod tests { // Initiate the background processors to watch each node. let data_dir = nodes[0].persister.get_data_dir(); - let callback = move |node: &ChannelManager, Arc, Arc, Arc, Arc>| FilesystemPersister::persist_manager(data_dir.clone(), node); + let callback = move |node: &ChannelManager, Arc, Arc, Arc, Arc>| FilesystemPersister::persist_manager(data_dir.clone(), node); let bg_processor = BackgroundProcessor::start(callback, nodes[0].node.clone(), nodes[0].logger.clone()); // Go through the channel creation process until each node should have something persisted. @@ -258,12 +266,12 @@ mod tests { // `CHAN_FRESHNESS_TIMER`. let nodes = create_nodes(1, "test_chan_freshness_called".to_string()); let data_dir = nodes[0].persister.get_data_dir(); - let callback = move |node: &ChannelManager, Arc, Arc, Arc, Arc>| FilesystemPersister::persist_manager(data_dir.clone(), node); + let callback = move |node: &ChannelManager, Arc, Arc, Arc, Arc>| FilesystemPersister::persist_manager(data_dir.clone(), node); let bg_processor = BackgroundProcessor::start(callback, nodes[0].node.clone(), nodes[0].logger.clone()); loop { let log_entries = nodes[0].logger.lines.lock().unwrap(); let desired_log = "Calling manager's timer_chan_freshness_every_min".to_string(); - if log_entries.get(&("background_processor".to_string(), desired_log)).is_some() { + if log_entries.get(&("lightning_background_processor".to_string(), desired_log)).is_some() { break } } @@ -274,11 +282,11 @@ mod tests { #[test] fn test_persist_error() { // Test that if we encounter an error during manager persistence, the thread panics. - fn persist_manager(_data: &ChannelManager, Arc, Arc, Arc, Arc>) -> Result<(), std::io::Error> - where ChanSigner: 'static + ChannelKeys + Writeable, - M: 'static + chain::Watch, + fn persist_manager(_data: &ChannelManager, Arc, Arc, Arc, Arc>) -> Result<(), std::io::Error> + where Signer: 'static + Sign, + M: 'static + chain::Watch, T: 'static + BroadcasterInterface, - K: 'static + KeysInterface, + K: 'static + KeysInterface, F: 'static + FeeEstimator, L: 'static + Logger, {