Handle Persister returning TemporaryFailure for new channels
[rust-lightning] / lightning / src / chain / chainmonitor.rs
index 2de5540059c38e630919a3db76bb3215b6a5399f..f1ce0f79ae9cd99860283ec72c00df49430c87a3 100644 (file)
@@ -372,9 +372,12 @@ where C::Target: chain::Filter,
                                return Err(ChannelMonitorUpdateErr::PermanentFailure)},
                        hash_map::Entry::Vacant(e) => e,
                };
-               if let Err(e) = self.persister.persist_new_channel(funding_outpoint, &monitor) {
-                       log_error!(self.logger, "Failed to persist new channel data");
-                       return Err(e);
+               let persist_res = self.persister.persist_new_channel(funding_outpoint, &monitor);
+               if persist_res.is_err() {
+                       log_error!(self.logger, "Failed to persist new channel data: {:?}", persist_res);
+               }
+               if persist_res == Err(ChannelMonitorUpdateErr::PermanentFailure) {
+                       return persist_res;
                }
                {
                        let funding_txo = monitor.get_funding_txo();
@@ -385,7 +388,7 @@ where C::Target: chain::Filter,
                        }
                }
                entry.insert(MonitorHolder { monitor });
-               Ok(())
+               persist_res
        }
 
        /// Note that we persist the given `ChannelMonitor` update while holding the