-
Notifications
You must be signed in to change notification settings - Fork 47
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
Allow Proposal requesting from any DA node #3619
Conversation
@@ -420,7 +420,7 @@ impl<TYPES: NodeType, I: NodeImplementation<TYPES>, V: Versions> ConsensusTaskSt | |||
} | |||
|
|||
if let Err(e) = self.consensus.write().await.update_high_qc(qc.clone()) { | |||
tracing::error!("{e:?}"); | |||
tracing::trace!("{e:?}"); |
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.
This was intentional. This is a useless log and noisy as heck.
) | ||
.await; | ||
} | ||
{ |
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.
These dangling handles on the consensus type bit me while I was developing this. Multi-line accesses/mutations are in their own scope to ensure that lower calls do not block waiting for a lock that'll never be available. I just wrapped it so that way the consensus handles in this file go out of scope. It's on the roadmap to refactor a lot of this during the dependency refactor rollout.
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.
Looks good, one small question
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 think there is a critical missing piece, the leader is the only one that stores the proposal to disc. This means if all nodes were to restart and the high QC points to a proposal where the leader was not in DA we will be stuck permanently. We need the DA nodes to store (storage.append_proposal
) the proposal message as well. Also the request should go to the leader of the view as well as the DA committee.
The restart tests work here because everyone is on the DA committee so the leader can always respond.
Closes #3603
This PR:
Lets the requester of a proposal broadcast to the entire DA committee to receive a proposal on a first-come, first-served basis.
This PR does not:
Key places to review: