-
Notifications
You must be signed in to change notification settings - Fork 25
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
pull messages out of mempool rather than pushing messages into engine #203
Conversation
error!("Unable to send message to engine: {}", err.to_string()) | ||
loop { | ||
tokio::select! { | ||
message = self.mempool_rx.recv() => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Selecting directly here is dangerous, the mempool rx channel and overload the messages_request_rx channel, and make it so the request is never fulfilled if we get sufficient message traffic to the mempool.
It's better to loop using a tick and ensure that the messages request channel is processed first and always prioritized.
See
snapchain/src/consensus/proposer.rs
Lines 284 to 288 in 41f1e05
let deadline = Instant::now() + timeout; | |
loop { | |
let timeout = time::sleep_until(deadline); | |
select! { | |
_ = poll_interval.tick() => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I made a change to specify biased
in the select macro. This causes the macro to preference branches in order of specification. I think this is what we want here?
In this case, I don't really think we need a timeout because we will just poll indefinitely.
Pull messages out of the mempool and run validations at that point so all messages fed to the engine are likely to be valid.