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
The
run_to_completion()
method is designed to advance a test's clock until all scheduled calls are executed. This approach works well in isolation but presents issues in a simulation environment where multiple nodes share a single clock.The crux of the problem emerges when a new node is created in the middle of a simulation. The
create_peer()
method invokes therun_to_completion()
, which causes an unintended ripple effect: while the intention is to execute delayed calls only for the newly created node, the shared clock architecture means that the delayed calls for all nodes get executed.In essence, while
run_to_completion()
aims to streamline the handling of delayed calls, its current design inadvertently interferes with the natural flow of the simulation, especially when new nodes are dynamically added.This issue was causing flakiness in the test
tests/p2p/test_protocol.py::SyncV2HathorProtocolTestCase::test_two_connections
because the initialization of a new node was callingsend_get_best_blockchain()
multiple times due to a looping call. The number of times changes randomly so the asserts were failing randomly too.Acceptance Criteria
create_peer()
to stop callingrun_to_completion()
. It will just advance the clock once to execute delayed calls set bymanager.start()
.tests/p2p/test_protocol.py::SyncV2HathorProtocolTestCase::test_two_connections
.Checklist
master
, confirm this code is production-ready and can be included in future releases as soon as it gets merged