refactor(sync-v2): Modify TransactionStreamingClient to process vertices asynchronously #865
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.
Motivation
This PR enhances the
on_block_complete()
method, which initially processed transactions and added blocks to the DAG in a synchronous manner, thus occupying the event loop for the duration of this task. Due to the synchronous execution, the larger the transaction set, the longer the event loop was blocked, preventing the full node from attending to other critical operations like managing connections and processing API requests.This PR transforms the method into an asynchronous operation. By doing so, after the addition of each transaction, control is yielded back to the event loop, allowing the full node to multitask effectively. This change is particularly beneficial during periods of heavy transaction processing, ensuring that node responsiveness and efficiency are maintained.
Acceptance Criteria
on_block_complete()
to yield back to the event loop after callingon_new_tx()
for each vertex.TransactionStreamingClient._buffer
because it was not necessary anymore.TRANSACTIONS-END
message, we have to wait until all transactions have been processed before resolving the deferred.Checklist
master
, confirm this code is production-ready and can be included in future releases as soon as it gets merged