Merge pull request #24 from jkczyz/2021-07-background-processor
authorMatt Corallo <649246+TheBlueMatt@users.noreply.github.com>
Sun, 1 Aug 2021 19:48:24 +0000 (19:48 +0000)
committerGitHub <noreply@github.com>
Sun, 1 Aug 2021 19:48:24 +0000 (19:48 +0000)
Explicitly stop BackgroundProcessor

1  2 
src/main.rs

diff --combined src/main.rs
index bfb586adfbe630c3df9ff7fc31b51c67d493ff9c,7c1a1034262b5460a4340eaedc396d0c88885b47..57f0bb2ea7f9017c42feb5b6ef7b9b8818bbda7d
@@@ -28,7 -28,7 +28,7 @@@ use lightning::ln::peer_handler::{Messa
  use lightning::ln::{PaymentHash, PaymentPreimage, PaymentSecret};
  use lightning::routing::network_graph::NetGraphMsgHandler;
  use lightning::util::config::UserConfig;
 -use lightning::util::events::Event;
 +use lightning::util::events::{Event, PaymentPurpose};
  use lightning::util::ser::ReadableArgs;
  use lightning_background_processor::BackgroundProcessor;
  use lightning_block_sync::init;
@@@ -138,24 -138,10 +138,24 @@@ async fn handle_ldk_events
                        let final_tx: Transaction =
                                encode::deserialize(&hex_utils::to_vec(&signed_tx.hex).unwrap()).unwrap();
                        // Give the funding transaction back to LDK for opening the channel.
 -                      channel_manager.funding_transaction_generated(&temporary_channel_id, final_tx).unwrap();
 +                      if channel_manager
 +                              .funding_transaction_generated(&temporary_channel_id, final_tx)
 +                              .is_err()
 +                      {
 +                              println!(
 +                                      "\nERROR: Channel went away before we could fund it. The peer disconnected or refused the channel.");
 +                              print!("> ");
 +                              io::stdout().flush().unwrap();
 +                      }
                }
 -              Event::PaymentReceived { payment_hash, payment_preimage, payment_secret, amt, .. } => {
 +              Event::PaymentReceived { payment_hash, purpose, amt, .. } => {
                        let mut payments = inbound_payments.lock().unwrap();
 +                      let (payment_preimage, payment_secret) = match purpose {
 +                              PaymentPurpose::InvoicePayment { payment_preimage, payment_secret, .. } => {
 +                                      (payment_preimage, Some(payment_secret))
 +                              }
 +                              PaymentPurpose::SpontaneousPayment(preimage) => (Some(preimage), None),
 +                      };
                        let status = match channel_manager.claim_funds(payment_preimage.unwrap()) {
                                true => {
                                        println!(
                                Entry::Occupied(mut e) => {
                                        let payment = e.get_mut();
                                        payment.status = status;
 -                                      payment.preimage = Some(payment_preimage.unwrap());
 -                                      payment.secret = Some(payment_secret);
 +                                      payment.preimage = payment_preimage;
 +                                      payment.secret = payment_secret;
                                }
                                Entry::Vacant(e) => {
                                        e.insert(PaymentInfo {
 -                                              preimage: Some(payment_preimage.unwrap()),
 -                                              secret: Some(payment_secret),
 +                                              preimage: payment_preimage,
 +                                              secret: payment_secret,
                                                status,
                                                amt_msat: MillisatAmount(Some(amt)),
                                        });
@@@ -353,8 -339,7 +353,8 @@@ async fn start_ldk() 
        let mut channelmonitors = persister.read_channelmonitors(keys_manager.clone()).unwrap();
  
        // Step 8: Initialize the ChannelManager
 -      let user_config = UserConfig::default();
 +      let mut user_config = UserConfig::default();
 +      user_config.peer_channel_config_limits.force_announced_channel_preference = false;
        let mut restarting_node = true;
        let (channel_manager_blockhash, mut channel_manager) = {
                if let Ok(mut f) = fs::File::open(format!("{}/manager", ldk_data_dir.clone())) {
        let persist_channel_manager_callback =
                move |node: &ChannelManager| FilesystemPersister::persist_manager(data_dir.clone(), &*node);
        // Step 17: Background Processing
-       BackgroundProcessor::start(
+       let background_processor = BackgroundProcessor::start(
                persist_channel_manager_callback,
                event_handler,
                chain_monitor.clone(),
        // to avoid churn in the global network graph.
        let chan_manager = Arc::clone(&channel_manager);
        let network = args.network;
 -      if args.ldk_announced_listen_addr.is_some() {
 +      if !args.ldk_announced_listen_addr.is_empty() {
                tokio::spawn(async move {
                        let mut interval = tokio::time::interval(Duration::from_secs(60));
                        loop {
                                chan_manager.broadcast_node_announcement(
                                        [0; 3],
                                        args.ldk_announced_node_name,
 -                                      vec![args.ldk_announced_listen_addr.as_ref().unwrap().clone()],
 +                                      args.ldk_announced_listen_addr.clone(),
                                );
                        }
                });
                network,
        )
        .await;
+       // Stop the background processor.
+       background_processor.stop().unwrap();
  }
  
  #[tokio::main]