Skip to content

Commit 3fe91e1

Browse files
committed
Rename Channel::pending_monitor_updates to blocked
To differentiate between in-flight pending completion and blocked updates.
1 parent 9eab660 commit 3fe91e1

File tree

1 file changed

+21
-23
lines changed

1 file changed

+21
-23
lines changed

lightning/src/ln/channel.rs

+21-23
Original file line numberDiff line numberDiff line change
@@ -859,11 +859,9 @@ pub(super) struct ChannelContext<Signer: ChannelSigner> {
859859
/// [`SignerProvider::derive_channel_signer`].
860860
channel_keys_id: [u8; 32],
861861

862-
/// When we generate [`ChannelMonitorUpdate`]s to persist, they may not be persisted immediately.
863-
/// If we then persist the [`channelmanager::ChannelManager`] and crash before the persistence
864-
/// completes we still need to be able to complete the persistence. Thus, we have to keep a
865-
/// copy of the [`ChannelMonitorUpdate`] here until it is complete.
866-
pending_monitor_updates: Vec<PendingChannelMonitorUpdate>,
862+
/// If we can't release a [`ChannelMonitorUpdate`] until some external action completes, we
863+
/// store it here and only release it to [`ChannelManager`] once it asks for it.
864+
blocked_monitor_updates: Vec<PendingChannelMonitorUpdate>,
867865
}
868866

869867
impl<Signer: ChannelSigner> ChannelContext<Signer> {
@@ -2254,7 +2252,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
22542252
}
22552253

22562254
pub fn get_update_fulfill_htlc_and_commit<L: Deref>(&mut self, htlc_id: u64, payment_preimage: PaymentPreimage, logger: &L) -> UpdateFulfillCommitFetch where L::Target: Logger {
2257-
let release_cs_monitor = self.context.pending_monitor_updates.is_empty();
2255+
let release_cs_monitor = self.context.blocked_monitor_updates.is_empty();
22582256
match self.get_update_fulfill_htlc(htlc_id, payment_preimage, logger) {
22592257
UpdateFulfillFetch::NewClaim { mut monitor_update, htlc_value_msat, msg } => {
22602258
// Even if we aren't supposed to let new monitor updates with commitment state
@@ -2269,16 +2267,16 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
22692267
self.context.latest_monitor_update_id = monitor_update.update_id;
22702268
monitor_update.updates.append(&mut additional_update.updates);
22712269
} else {
2272-
let new_mon_id = self.context.pending_monitor_updates.get(0)
2270+
let new_mon_id = self.context.blocked_monitor_updates.get(0)
22732271
.map(|upd| upd.update.update_id).unwrap_or(monitor_update.update_id);
22742272
monitor_update.update_id = new_mon_id;
2275-
for held_update in self.context.pending_monitor_updates.iter_mut() {
2273+
for held_update in self.context.blocked_monitor_updates.iter_mut() {
22762274
held_update.update.update_id += 1;
22772275
}
22782276
if msg.is_some() {
22792277
debug_assert!(false, "If there is a pending blocked monitor we should have MonitorUpdateInProgress set");
22802278
let update = self.build_commitment_no_status_check(logger);
2281-
self.context.pending_monitor_updates.push(PendingChannelMonitorUpdate {
2279+
self.context.blocked_monitor_updates.push(PendingChannelMonitorUpdate {
22822280
update,
22832281
});
22842282
}
@@ -4399,25 +4397,25 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
43994397

44004398
/// Gets the latest [`ChannelMonitorUpdate`] ID which has been released and is in-flight.
44014399
pub fn get_latest_unblocked_monitor_update_id(&self) -> u64 {
4402-
if self.context.pending_monitor_updates.is_empty() { return self.context.get_latest_monitor_update_id(); }
4403-
self.context.pending_monitor_updates[0].update.update_id - 1
4400+
if self.context.blocked_monitor_updates.is_empty() { return self.context.get_latest_monitor_update_id(); }
4401+
self.context.blocked_monitor_updates[0].update.update_id - 1
44044402
}
44054403

44064404
/// Returns the next blocked monitor update, if one exists, and a bool which indicates a
44074405
/// further blocked monitor update exists after the next.
44084406
pub fn unblock_next_blocked_monitor_update(&mut self) -> Option<(ChannelMonitorUpdate, bool)> {
4409-
if self.context.pending_monitor_updates.is_empty() { return None; }
4410-
Some((self.context.pending_monitor_updates.remove(0).update,
4411-
!self.context.pending_monitor_updates.is_empty()))
4407+
if self.context.blocked_monitor_updates.is_empty() { return None; }
4408+
Some((self.context.blocked_monitor_updates.remove(0).update,
4409+
!self.context.blocked_monitor_updates.is_empty()))
44124410
}
44134411

44144412
/// Pushes a new monitor update into our monitor update queue, returning it if it should be
44154413
/// immediately given to the user for persisting or `None` if it should be held as blocked.
44164414
fn push_ret_blockable_mon_update(&mut self, update: ChannelMonitorUpdate)
44174415
-> Option<ChannelMonitorUpdate> {
4418-
let release_monitor = self.context.pending_monitor_updates.is_empty();
4416+
let release_monitor = self.context.blocked_monitor_updates.is_empty();
44194417
if !release_monitor {
4420-
self.context.pending_monitor_updates.push(PendingChannelMonitorUpdate {
4418+
self.context.blocked_monitor_updates.push(PendingChannelMonitorUpdate {
44214419
update,
44224420
});
44234421
None
@@ -4427,7 +4425,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
44274425
}
44284426

44294427
pub fn blocked_monitor_updates_pending(&self) -> usize {
4430-
self.context.pending_monitor_updates.len()
4428+
self.context.blocked_monitor_updates.len()
44314429
}
44324430

44334431
/// Returns true if the channel is awaiting the persistence of the initial ChannelMonitor.
@@ -5572,7 +5570,7 @@ impl<Signer: WriteableEcdsaChannelSigner> OutboundV1Channel<Signer> {
55725570
channel_type,
55735571
channel_keys_id,
55745572

5575-
pending_monitor_updates: Vec::new(),
5573+
blocked_monitor_updates: Vec::new(),
55765574
}
55775575
})
55785576
}
@@ -6202,7 +6200,7 @@ impl<Signer: WriteableEcdsaChannelSigner> InboundV1Channel<Signer> {
62026200
channel_type,
62036201
channel_keys_id,
62046202

6205-
pending_monitor_updates: Vec::new(),
6203+
blocked_monitor_updates: Vec::new(),
62066204
}
62076205
};
62086206

@@ -6768,7 +6766,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
67686766
(28, holder_max_accepted_htlcs, option),
67696767
(29, self.context.temporary_channel_id, option),
67706768
(31, channel_pending_event_emitted, option),
6771-
(33, self.context.pending_monitor_updates, vec_type),
6769+
(33, self.context.blocked_monitor_updates, vec_type),
67726770
});
67736771

67746772
Ok(())
@@ -7045,7 +7043,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
70457043
let mut temporary_channel_id: Option<[u8; 32]> = None;
70467044
let mut holder_max_accepted_htlcs: Option<u16> = None;
70477045

7048-
let mut pending_monitor_updates = Some(Vec::new());
7046+
let mut blocked_monitor_updates = Some(Vec::new());
70497047

70507048
read_tlv_fields!(reader, {
70517049
(0, announcement_sigs, option),
@@ -7069,7 +7067,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
70697067
(28, holder_max_accepted_htlcs, option),
70707068
(29, temporary_channel_id, option),
70717069
(31, channel_pending_event_emitted, option),
7072-
(33, pending_monitor_updates, vec_type),
7070+
(33, blocked_monitor_updates, vec_type),
70737071
});
70747072

70757073
let (channel_keys_id, holder_signer) = if let Some(channel_keys_id) = channel_keys_id {
@@ -7241,7 +7239,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
72417239
channel_type: channel_type.unwrap(),
72427240
channel_keys_id,
72437241

7244-
pending_monitor_updates: pending_monitor_updates.unwrap(),
7242+
blocked_monitor_updates: blocked_monitor_updates.unwrap(),
72457243
}
72467244
})
72477245
}

0 commit comments

Comments
 (0)