]> git.bitcoin.ninja Git - rust-lightning/commit
Store `OnionMessenger` events in different `Vec`s
authorMatt Corallo <git@bluematt.me>
Mon, 3 Jun 2024 18:28:45 +0000 (18:28 +0000)
committerMatt Corallo <git@bluematt.me>
Mon, 3 Jun 2024 18:28:45 +0000 (18:28 +0000)
commit9ef61748e419e3e993784ee1c7f785ed434f5c67
treecfe8ea2cdc6050752895d1dcaa40ad777bc02c30
parentc1ea761e70aaa33c9b07d2468160488a0f4e05cc
Store `OnionMessenger` events in different `Vec`s

In the next commit, `OnionMessenger` events are handled in parallel
using rust async. When we do that, we'll want to handle
`OnionMessageIntercepted` events prior to
`OnionMessagePeerConnected` ones.

While we'd generally prefer to handle all events in the order they
were generated, if we want to handle them in parallel, we don't
want a `OnionMessageIntercepted` event to start being processed,
then handle an `OnionMessagePeerConnected` prior to the first
completing. This could cause us to store a freshly-intercepted
message for a peer in a DB that was just wiped because the peer
is now connected.

This does run the risk of processing a `OnionMessagePeerConnected`
event prior to an `OnionMessageIntercepted` event (because a peer
connected, then disconnected, then we received a message for that
peer all before any events were handled), that is somewhat less
likely and discarding a message in a rare race is better than
leaving a message lying around undelivered.

Thus, here, we store `OnionMessenger` events in separate `Vec`s
which we can pull from in message-type-order.
lightning/src/onion_message/messenger.rs