forked from bitcoin/bitcoin
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge #6156: fix: let internal govobj/vote inv request trackers expir…
…e after 60 sec 1f4e1a1 test: add test for governance inv expiration (UdjinM6) 06b4dba feat: make CInv python implementation aware of governance invs (UdjinM6) c7c930e fix: use correct condition in logs (UdjinM6) d41d87a fix: use `std::chrono::seconds` (UdjinM6) d6fe714 chore: make clang-format and linter happy (UdjinM6) b57a922 refactor: sqash 2 hash maps into one, use proper naming (UdjinM6) 4116ba3 fix: let internal govobj/vote inv request trackers expire after 60 sec (UdjinM6) Pull request description: ## Issue being fixed or feature implemented Another issue noticed during recent sb voting period. Lots of inv are coming from peers that never send the object/vote they announced. Let's not wait for these forever, 60 seconds should be enough. ## What was done? Add a "timer" to each request. ## How Has This Been Tested? Run tests, run a MN on mainnet and check logs. ## Breaking Changes n/a ## Checklist: - [x] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [ ] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ ACKs for top commit: knst: utACK 1f4e1a1 Tree-SHA512: f5c5a896f61b5aed27c6f42c926254156c604edb4efd2a3cd3738a7e8d1ed7bafffadc584148e4a5c1a172c2b3d61a06884a1f6d56eb4ebe37a4b0dbc050edd6
- Loading branch information
Showing
5 changed files
with
94 additions
and
44 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
#!/usr/bin/env python3 | ||
# Copyright (c) 2024 The Dash Core developers | ||
# Distributed under the MIT software license, see the accompanying | ||
# file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||
|
||
""" | ||
Test inv expiration for governance objects/votes | ||
""" | ||
|
||
from test_framework.messages import ( | ||
CInv, | ||
msg_inv, | ||
MSG_GOVERNANCE_OBJECT, | ||
MSG_GOVERNANCE_OBJECT_VOTE, | ||
) | ||
from test_framework.p2p import P2PInterface | ||
from test_framework.test_framework import BitcoinTestFramework | ||
from test_framework.util import force_finish_mnsync | ||
|
||
RELIABLE_PROPAGATION_TIME = 60 # src/governance/governance.cpp | ||
DATA_CLEANUP_TIME = 5 * 60 # src/init.cpp | ||
MSG_INV_ADDED = 'CGovernanceManager::ConfirmInventoryRequest added {} inv hash to m_requested_hash_time' | ||
|
||
class GovernanceInvsTest(BitcoinTestFramework): | ||
def set_test_params(self): | ||
self.num_nodes = 1 | ||
|
||
def run_test(self): | ||
node = self.nodes[0] | ||
force_finish_mnsync(node) | ||
inv = msg_inv([CInv(MSG_GOVERNANCE_OBJECT, 1)]) | ||
self.test_request_expiration(inv, "object") | ||
inv = msg_inv([CInv(MSG_GOVERNANCE_OBJECT_VOTE, 2)]) | ||
self.test_request_expiration(inv, "vote") | ||
|
||
def test_request_expiration(self, inv, name): | ||
msg = MSG_INV_ADDED.format(name) | ||
node = self.nodes[0] | ||
peer = node.add_p2p_connection(P2PInterface()) | ||
self.log.info(f"Send dummy governance {name} inv and make sure it's added to requested map") | ||
with node.assert_debug_log([msg]): | ||
peer.send_message(inv) | ||
self.log.info(f"Send dummy governance {name} inv again and make sure it's not added because we know about it already") | ||
with node.assert_debug_log([], [msg]): | ||
peer.send_message(inv) | ||
self.log.info("Force internal cleanup") | ||
with node.assert_debug_log(['UpdateCachesAndClean']): | ||
node.mockscheduler(DATA_CLEANUP_TIME + 1) | ||
self.log.info(f"Send dummy governance {name} inv again and make sure it's not added because we still know about it") | ||
with node.assert_debug_log([], [msg]): | ||
peer.send_message(inv) | ||
self.log.info(f"Bump mocktime, force internal cleanup, send dummy governance {name} inv again and make sure it's accepted again") | ||
self.bump_mocktime(RELIABLE_PROPAGATION_TIME + 1, nodes=[node]) | ||
with node.assert_debug_log(['UpdateCachesAndClean']): | ||
node.mockscheduler(DATA_CLEANUP_TIME + 1) | ||
with node.assert_debug_log([msg]): | ||
peer.send_message(inv) | ||
node.disconnect_p2ps() | ||
|
||
|
||
if __name__ == '__main__': | ||
GovernanceInvsTest().main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters