statement-gossip: Parallelize statement processing and async peer sends #10941
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problems
Versi testing showed that when more than 10 peers are connected and sending statements, the time spent in on_statements for decoding, hashing, and deduplication becomes significant and a bottleneck for processing statements. statement-store: process messages from peers in parallel #10892
When propagating statements, slow peers might block the main loop because send_async_notification was awaited sequentially for each peer. statement-store: make broadcasting multithreaded #10820
High-Level Changes
New Flows
Statement Reception:
Statement Propagation:
Shared State:
The minimal downside is that there is a shared state for this workers, but benchmarks shows updating the shared state is fast and does not contain the bulk of the time
TODO