counter.channel_announcements += 1;
}
- let gossip_message = GossipMessage::ChannelAnnouncement(msg);
+ let gossip_message = GossipMessage::ChannelAnnouncement(msg, None);
if let Err(err) = self.sender.try_send(gossip_message) {
let gossip_message = match err { TrySendError::Full(msg)|TrySendError::Closed(msg) => msg };
tokio::task::block_in_place(move || { tokio::runtime::Handle::current().block_on(async move {
fn new_channel_update(&self, msg: ChannelUpdate) {
self.counter.write().unwrap().channel_updates += 1;
- let gossip_message = GossipMessage::ChannelUpdate(msg);
+ let gossip_message = GossipMessage::ChannelUpdate(msg, None);
if let Err(err) = self.sender.try_send(gossip_message) {
let gossip_message = match err { TrySendError::Full(msg)|TrySendError::Closed(msg) => msg };
}
match &gossip_message {
- GossipMessage::ChannelAnnouncement(announcement) => {
+ GossipMessage::ChannelAnnouncement(announcement, _) => {
let scid = announcement.contents.short_channel_id as i64;
// start with the type prefix, which is already known a priori
&announcement_signed
])).await.unwrap().unwrap();
}
- GossipMessage::ChannelUpdate(update) => {
+ GossipMessage::ChannelUpdate(update, seen_override) => {
let scid = update.contents.short_channel_id as i64;
let timestamp = update.contents.timestamp as i64;
let mut update_signed = Vec::new();
update.write(&mut update_signed).unwrap();
- tokio::time::timeout(POSTGRES_INSERT_TIMEOUT, client
- .execute("INSERT INTO channel_updates (\
+ let insertion_statement = if cfg!(test) {
+ "INSERT INTO channel_updates (\
short_channel_id, \
timestamp, \
+ seen, \
channel_flags, \
direction, \
disable, \
fee_proportional_millionths, \
htlc_maximum_msat, \
blob_signed \
- ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) ON CONFLICT DO NOTHING", &[
+ ) VALUES ($1, $2, TO_TIMESTAMP($3), $4, $5, $6, $7, $8, $9, $10, $11, $12) ON CONFLICT DO NOTHING"
+ } else {
+ "INSERT INTO channel_updates (\
+ short_channel_id, \
+ timestamp, \
+ channel_flags, \
+ direction, \
+ disable, \
+ cltv_expiry_delta, \
+ htlc_minimum_msat, \
+ fee_base_msat, \
+ fee_proportional_millionths, \
+ htlc_maximum_msat, \
+ blob_signed \
+ ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) ON CONFLICT DO NOTHING"
+ };
+
+ // this may not be used outside test cfg
+ let _seen_timestamp = seen_override.unwrap_or(timestamp as u32) as f64;
+
+ tokio::time::timeout(POSTGRES_INSERT_TIMEOUT, client
+ .execute(insertion_statement, &[
&scid,
×tamp,
+ #[cfg(test)]
+ &_seen_timestamp,
&(update.contents.flags as i16),
&direction,
&disable,
network_graph_arc.update_channel_unsigned(&update_1.contents).unwrap();
network_graph_arc.update_channel_unsigned(&update_2.contents).unwrap();
- receiver.send(GossipMessage::ChannelAnnouncement(announcement)).await.unwrap();
- receiver.send(GossipMessage::ChannelUpdate(update_1)).await.unwrap();
- receiver.send(GossipMessage::ChannelUpdate(update_2)).await.unwrap();
+ receiver.send(GossipMessage::ChannelAnnouncement(announcement, None)).await.unwrap();
+ receiver.send(GossipMessage::ChannelUpdate(update_1, None)).await.unwrap();
+ receiver.send(GossipMessage::ChannelUpdate(update_2, None)).await.unwrap();
drop(receiver);
persister.persist_gossip().await;
}
#[derive(Debug)]
pub(crate) enum GossipMessage {
- ChannelAnnouncement(ChannelAnnouncement),
- ChannelUpdate(ChannelUpdate),
+ // the second element is an optional override for the seen value
+ ChannelAnnouncement(ChannelAnnouncement, Option<u32>),
+ ChannelUpdate(ChannelUpdate, Option<u32>),
}
#[derive(Clone, Copy)]