Repository navigation
test: p2p_node_network_limited.py --v2transport intermittently disconnects during connect_nodes #7288
Copy link
Copy link
Closed
Description
Activity
New occurrence on PR #7418, exact head
4f129b609e3aed8c55eb9006b06982fa1c88d878:- TSAN job: https://github.com/dashpay/dash/actions/runs/29144397638/job/86524311711
p2p_node_network_limited.py --v2transportfailed on all 3 attempts atconnect_nodes(0, 2)withAssertionError: Error: peer disconnected.- The combined log confirms the same race described here: node 0 processes the below-
NODE_NETWORK_LIMITEDblock request and logsdisconnect peer=2beforeconnect_nodes()observes the expectedpong. - PR fix(net): bound signing message vector intake #7418 changes only
src/llmq/net_signing.cpp,src/llmq/net_signing.h,src/llmq/signing_shares.h, andsrc/test/llmq_utils_tests.cpp, so there is no overlap with the failing test or connection helper.
This is another pre-existing timing-flake occurrence; the PR branch was left unchanged.
New occurrence on #7401 at exact head 45821d0:
- Failing TSAN job: https://github.com/dashpay/dash/actions/runs/29400920523/job/87307391340
- p2p_node_network_limited.py --v2transport failed all three attempts in connect_nodes(0, 2) with AssertionError: Error: peer disconnected.
- The combined log shows the same race documented here: node 0 processes the below-NODE_NETWORK_LIMITED block request and disconnects peer 2 before connect_nodes observes the pong.
- The exact-head PR diff is limited to DKG queueing/validation files and focused DKG tests; it does not touch this test, connect_nodes, or NODE_NETWORK_LIMITED handling.
- The same test passed on this exact head in both linux64-test and linux64_ubsan-test.
This is another pre-existing timing-sensitive occurrence. The PR branch was left unchanged.
New occurrence on PR #7433 at exact head
5b499d2089043fdf9be9e92893e8c40fd6a61a98:- Failing TSAN job: https://github.com/dashpay/dash/actions/runs/30121777504/job/89581303737
p2p_node_network_limited.py --v2transportfailed inconnect_nodes(0, 2)withAssertionError: Error: peer disconnected.- The uploaded combined log confirms the same established race: node 0 correctly logs
Ignore block request below NODE_NETWORK_LIMITED threshold, disconnect peer=2, thenconnect_nodes()observes the disconnect before its expected pong. - There is no ThreadSanitizer race report. The PR does not change this test,
connect_nodes, or theNODE_NETWORK_LIMITEDhandling; itstest_node.pydelta is limited to expected process-return-code handling. Non-TSAN lanes passed the test on the same head.
The branch was left unchanged; PR classification: #7433 (comment)
New occurrence on PR #7496 at exact head
9bc7ed53296f3d98c3fbbd8f6991a04693702c3b:- Failing TSAN job: https://github.com/dashpay/dash/actions/runs/30487741775/job/90699995346
p2p_node_network_limited.py --v2transportfailed all three attempts atconnect_nodes(0, 2)withAssertionError: Error: peer disconnected.- The combined log shows the same established race: node 0 correctly logs
Ignore block request below NODE_NETWORK_LIMITED threshold, disconnect peer=0;connect_nodes()then observes that disconnect before the expected pong. The unexpected pruned-node warning during shutdown is secondary to the original assertion. - There is no ThreadSanitizer race report. PR ci: reject @mentions in pull request descriptions #7496 changes only
.github/workflows/check_pr_description_mentions.py,.github/workflows/semantic-pull-request.yml, and.github/workflows/test_check_pr_description_mentions.py; it does not touch this test,connect_nodes, networking, orNODE_NETWORK_LIMITEDhandling. - The same test passed in the non-TSAN, UBSAN, SQLite, no-wallet, and multiprocess test lanes on this exact head.
This is another pre-existing timing-sensitive occurrence. The PR branch was left unchanged.
- added a commit that references this issue
on Aug 3, 2026
Metadata
Metadata
Assignees
Labels
No labels
Summary
linux64_tsan-test / Test sourceintermittently fails inp2p_node_network_limited.py --v2transportwithAssertionError: Error: peer disconnected. This is not caused by PR-specific code indashpay/dash#7230; the same head SHA passed on rerun without any branch changes.Evidence
e7a422bbab60e271a504b3401b6a444cea1c27f1:Failure mode
The failure happens here:
Combined logs show node 0 immediately disconnecting node 2 after node 2 requests a block below the
NODE_NETWORK_LIMITEDthreshold:connect_nodes()is still waiting for the outbound peer to stay connected long enough to exchange apong, so the helper fails withpeer disconnected.Diagnosis
This looks timing-sensitive / transport-sensitive rather than PR-specific:
#7230only changessrc/node/interfaces.cppandsrc/wallet/wallet.cpp.test/functional/p2p_node_network_limited.py.The likely issue is that the test currently assumes
connect_nodes(0, 2)will remain connected long enough for the helper handshake, but under TSAN +--v2transportthe pruned node can disconnect node 2 quickly enough that the helper trips first.Reproduction ideas
I have not reproduced this locally outside CI yet. The closest reproduction path is to loop the test under a slow / TSAN-like environment:
or repeatedly rerun the TSAN functional shard in CI until the timing window appears.
Suggested direction
Harden the test so it does not rely on
connect_nodes()succeeding when the scenario itself can legitimately trigger a fast disconnect. For example, make the unsynced-node phase explicitly tolerate the disconnect and assert the expected postcondition (node2stays at height 0) without requiring a stableponghandshake first.