From 72b639ce1843caf3b2d2f1f9dd674fb7759d6280 Mon Sep 17 00:00:00 2001 From: UdjinM6 Date: Sat, 16 Jun 2018 15:22:29 +0300 Subject: [PATCH] Do not send excessive messages in governance sync No need to send gobject inv for a single gobject, the other node already knows it, so send votes only. Also, no need to send "fake" stats like "0 votes" when syncing gobjects and "1 object" when syncing votes. Rename functions accordingly. --- src/governance.cpp | 19 ++++++------------- src/governance.h | 4 ++-- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/governance.cpp b/src/governance.cpp index 7909a7a1cb5fb2..1ace3154836c31 100644 --- a/src/governance.cpp +++ b/src/governance.cpp @@ -119,9 +119,9 @@ void CGovernanceManager::ProcessMessage(CNode* pfrom, const std::string& strComm } if(nProp == uint256()) { - SyncAll(pfrom, connman); + SyncObjects(pfrom, connman); } else { - SyncSingleObjAndItsVotes(pfrom, nProp, filter, connman); + SyncSingleObjVotes(pfrom, nProp, filter, connman); } LogPrint("gobject", "MNGOVERNANCESYNC -- syncing governance objects to our peer at %s\n", pfrom->addr.ToString()); } @@ -646,7 +646,7 @@ bool CGovernanceManager::ConfirmInventoryRequest(const CInv& inv) return true; } -void CGovernanceManager::SyncSingleObjAndItsVotes(CNode* pnode, const uint256& nProp, const CBloomFilter& filter, CConnman& connman) +void CGovernanceManager::SyncSingleObjVotes(CNode* pnode, const uint256& nProp, const CBloomFilter& filter, CConnman& connman) { // do not provide any data until our node is synced if(!masternodeSync.IsSynced()) return; @@ -676,10 +676,6 @@ void CGovernanceManager::SyncSingleObjAndItsVotes(CNode* pnode, const uint256& n return; } - // Push the govobj inventory message over to the other client - LogPrint("gobject", "CGovernanceManager::%s -- syncing govobj: %s, peer=%d\n", __func__, strHash, pnode->id); - pnode->PushInventory(CInv(MSG_GOVERNANCE_OBJECT, it->first)); - auto fileVotes = govobj.GetVoteFile(); for (const auto& vote : fileVotes.GetVotes()) { @@ -692,12 +688,11 @@ void CGovernanceManager::SyncSingleObjAndItsVotes(CNode* pnode, const uint256& n } CNetMsgMaker msgMaker(pnode->GetSendVersion()); - connman.PushMessage(pnode, msgMaker.Make(NetMsgType::SYNCSTATUSCOUNT, MASTERNODE_SYNC_GOVOBJ, 1)); connman.PushMessage(pnode, msgMaker.Make(NetMsgType::SYNCSTATUSCOUNT, MASTERNODE_SYNC_GOVOBJ_VOTE, nVoteCount)); - LogPrintf("CGovernanceManager::%s -- sent 1 object and %d votes to peer=%d\n", __func__, nVoteCount, pnode->id); + LogPrintf("CGovernanceManager::%s -- sent %d votes to peer=%d\n", __func__, nVoteCount, pnode->id); } -void CGovernanceManager::SyncAll(CNode* pnode, CConnman& connman) const +void CGovernanceManager::SyncObjects(CNode* pnode, CConnman& connman) const { // do not provide any data until our node is synced if(!masternodeSync.IsSynced()) return; @@ -712,7 +707,6 @@ void CGovernanceManager::SyncAll(CNode* pnode, CConnman& connman) const netfulfilledman.AddFulfilledRequest(pnode->addr, NetMsgType::MNGOVERNANCESYNC); int nObjCount = 0; - int nVoteCount = 0; // SYNC GOVERNANCE OBJECTS WITH OTHER CLIENT @@ -742,8 +736,7 @@ void CGovernanceManager::SyncAll(CNode* pnode, CConnman& connman) const CNetMsgMaker msgMaker(pnode->GetSendVersion()); connman.PushMessage(pnode, msgMaker.Make(NetMsgType::SYNCSTATUSCOUNT, MASTERNODE_SYNC_GOVOBJ, nObjCount)); - connman.PushMessage(pnode, msgMaker.Make(NetMsgType::SYNCSTATUSCOUNT, MASTERNODE_SYNC_GOVOBJ_VOTE, nVoteCount)); - LogPrintf("CGovernanceManager::%s -- sent %d objects and %d votes to peer=%d\n", __func__, nObjCount, nVoteCount, pnode->id); + LogPrintf("CGovernanceManager::%s -- sent %d objects to peer=%d\n", __func__, nObjCount, pnode->id); } void CGovernanceManager::MasternodeRateUpdate(const CGovernanceObject& govobj) diff --git a/src/governance.h b/src/governance.h index 9a0bac58d1b3cd..86cd0ca97b8893 100644 --- a/src/governance.h +++ b/src/governance.h @@ -293,8 +293,8 @@ class CGovernanceManager */ bool ConfirmInventoryRequest(const CInv& inv); - void SyncSingleObjAndItsVotes(CNode* pnode, const uint256& nProp, const CBloomFilter& filter, CConnman& connman); - void SyncAll(CNode* pnode, CConnman& connman) const; + void SyncSingleObjVotes(CNode* pnode, const uint256& nProp, const CBloomFilter& filter, CConnman& connman); + void SyncObjects(CNode* pnode, CConnman& connman) const; void ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStream& vRecv, CConnman& connman);