Skip to content

Commit 62fce5a

Browse files
committed
Move Persister back to lots of generic bounds
...as we currently struggle with `AChannelManager` on it
1 parent d233c6f commit 62fce5a

File tree

2 files changed

+25
-15
lines changed

2 files changed

+25
-15
lines changed

lightning-background-processor/src/lib.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ macro_rules! define_run_body {
338338

339339
if $channel_manager.get_cm().get_and_clear_needs_persistence() {
340340
log_trace!($logger, "Persisting ChannelManager...");
341-
$persister.persist_manager(&$channel_manager)?;
341+
$persister.persist_manager($channel_manager.get_cm())?;
342342
log_trace!($logger, "Done persisting ChannelManager.");
343343
}
344344
if $timer_elapsed(&mut last_freshness_call, FRESHNESS_TIMER) {
@@ -440,7 +440,7 @@ macro_rules! define_run_body {
440440
// After we exit, ensure we persist the ChannelManager one final time - this avoids
441441
// some races where users quit while channel updates were in-flight, with
442442
// ChannelMonitor update(s) persisted without a corresponding ChannelManager update.
443-
$persister.persist_manager(&$channel_manager)?;
443+
$persister.persist_manager($channel_manager.get_cm())?;
444444

445445
// Persist Scorer on exit
446446
if let Some(ref scorer) = $scorer {
@@ -814,8 +814,8 @@ impl BackgroundProcessor {
814814
F::Target: 'static + FeeEstimator,
815815
L::Target: 'static + Logger,
816816
P::Target: 'static + Persist<<CM::Target as AChannelManager>::Signer>,
817-
PS::Target: 'static + Persister<'a, CM, L, SC>,
818-
CM::Target: AChannelManager + Send + Sync,
817+
PS::Target: 'static + Persister<'a, <<CM as Deref>::Target as AChannelManager>::M, <<CM as Deref>::Target as AChannelManager>::T, <<CM as Deref>::Target as AChannelManager>::ES, <<CM as Deref>::Target as AChannelManager>::NS, <<CM as Deref>::Target as AChannelManager>::SP, <<CM as Deref>::Target as AChannelManager>::F, <<CM as Deref>::Target as AChannelManager>::R, L, SC>,
818+
CM::Target: AChannelManager<L = L> + Send + Sync,
819819
PM::Target: APeerManager + Send + Sync,
820820
{
821821
let stop_thread = Arc::new(AtomicBool::new(false));

lightning/src/util/persist.rs

+21-11
Original file line numberDiff line numberDiff line change
@@ -154,18 +154,24 @@ pub trait KVStore {
154154
fn list(&self, primary_namespace: &str, secondary_namespace: &str) -> Result<Vec<String>, io::Error>;
155155
}
156156

157+
157158
/// Trait that handles persisting a [`ChannelManager`], [`NetworkGraph`], and [`WriteableScore`] to disk.
158159
///
159160
/// [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
160-
pub trait Persister<'a, CM: Deref, L: Deref, S: WriteableScore<'a>>
161-
where
162-
CM::Target: 'static + AChannelManager,
163-
L::Target: 'static + Logger,
161+
pub trait Persister<'a, M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, L: Deref, S: WriteableScore<'a>>
162+
where M::Target: 'static + chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
163+
T::Target: 'static + BroadcasterInterface,
164+
ES::Target: 'static + EntropySource,
165+
NS::Target: 'static + crate::sign::NodeSigner,
166+
SP::Target: 'static + SignerProvider,
167+
F::Target: 'static + FeeEstimator,
168+
R::Target: 'static + crate::routing::router::Router,
169+
L::Target: 'static + Logger,
164170
{
165171
/// Persist the given ['ChannelManager'] to disk, returning an error if persistence failed.
166172
///
167173
/// [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
168-
fn persist_manager(&self, channel_manager: &CM) -> Result<(), io::Error>;
174+
fn persist_manager(&self, channel_manager: &crate::ln::channelmanager::ChannelManager<M, T, ES, NS, SP, F, R, L>) -> Result<(), io::Error>;
169175

170176
/// Persist the given [`NetworkGraph`] to disk, returning an error if persistence failed.
171177
fn persist_graph(&self, network_graph: &NetworkGraph<L>) -> Result<(), io::Error>;
@@ -174,13 +180,17 @@ where
174180
fn persist_scorer(&self, scorer: &S) -> Result<(), io::Error>;
175181
}
176182

177-
178-
impl<'a, A: KVStore + ?Sized, CM: Deref, L: Deref, S: WriteableScore<'a>> Persister<'a, CM, L, S> for A
179-
where
180-
CM::Target: 'static + AChannelManager,
181-
L::Target: 'static + Logger,
183+
impl<'a, A: KVStore + ?Sized, M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, L: Deref, S: WriteableScore<'a>> Persister<'a, M, T, ES, NS, SP, F, R, L, S> for A
184+
where M::Target: 'static + chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
185+
T::Target: 'static + BroadcasterInterface,
186+
ES::Target: 'static + EntropySource,
187+
NS::Target: 'static + crate::sign::NodeSigner,
188+
SP::Target: 'static + SignerProvider,
189+
F::Target: 'static + FeeEstimator,
190+
R::Target: 'static + crate::routing::router::Router,
191+
L::Target: 'static + Logger,
182192
{
183-
fn persist_manager(&self, channel_manager: &CM) -> Result<(), io::Error> {
193+
fn persist_manager(&self, channel_manager: &crate::ln::channelmanager::ChannelManager<M, T, ES, NS, SP, F, R, L>) -> Result<(), io::Error> {
184194
self.write(CHANNEL_MANAGER_PERSISTENCE_PRIMARY_NAMESPACE,
185195
CHANNEL_MANAGER_PERSISTENCE_SECONDARY_NAMESPACE,
186196
CHANNEL_MANAGER_PERSISTENCE_KEY,

0 commit comments

Comments
 (0)