Merge pull request #478 from UdjinM6/v0.12.0.x_sync_added

V0.12.0.x track hashes and update `last...` only twice per hash
This commit is contained in:
evan82 2015-08-04 19:00:15 -07:00
commit 0d625c888d
8 changed files with 60 additions and 32 deletions

View File

@ -250,6 +250,7 @@ bool CActiveMasternode::Register(CTxIn vin, CService service, CKey keyCollateral
return false; return false;
} }
mnodeman.mapSeenMasternodeBroadcast.insert(make_pair(mnb.GetHash(), mnb)); mnodeman.mapSeenMasternodeBroadcast.insert(make_pair(mnb.GetHash(), mnb));
masternodeSync.AddedMasternodeList(mnb.GetHash());
CMasternode* pmn = mnodeman.Find(vin); CMasternode* pmn = mnodeman.Find(vin);
if(pmn == NULL) if(pmn == NULL)

View File

@ -4001,37 +4001,37 @@ bool static AlreadyHave(const CInv& inv)
return mapSporks.count(inv.hash); return mapSporks.count(inv.hash);
case MSG_MASTERNODE_WINNER: case MSG_MASTERNODE_WINNER:
if(masternodePayments.mapMasternodePayeeVotes.count(inv.hash)) { if(masternodePayments.mapMasternodePayeeVotes.count(inv.hash)) {
masternodeSync.AddedMasternodeWinner(); masternodeSync.AddedMasternodeWinner(inv.hash);
return true; return true;
} }
return false; return false;
case MSG_BUDGET_VOTE: case MSG_BUDGET_VOTE:
if(budget.mapSeenMasternodeBudgetVotes.count(inv.hash)) { if(budget.mapSeenMasternodeBudgetVotes.count(inv.hash)) {
masternodeSync.AddedBudgetItem(); masternodeSync.AddedBudgetItem(inv.hash);
return true; return true;
} }
return false; return false;
case MSG_BUDGET_PROPOSAL: case MSG_BUDGET_PROPOSAL:
if(budget.mapSeenMasternodeBudgetProposals.count(inv.hash)) { if(budget.mapSeenMasternodeBudgetProposals.count(inv.hash)) {
masternodeSync.AddedBudgetItem(); masternodeSync.AddedBudgetItem(inv.hash);
return true; return true;
} }
return false; return false;
case MSG_BUDGET_FINALIZED_VOTE: case MSG_BUDGET_FINALIZED_VOTE:
if(budget.mapSeenFinalizedBudgetVotes.count(inv.hash)) { if(budget.mapSeenFinalizedBudgetVotes.count(inv.hash)) {
masternodeSync.AddedBudgetItem(); masternodeSync.AddedBudgetItem(inv.hash);
return true; return true;
} }
return false; return false;
case MSG_BUDGET_FINALIZED: case MSG_BUDGET_FINALIZED:
if(budget.mapSeenFinalizedBudgets.count(inv.hash)) { if(budget.mapSeenFinalizedBudgets.count(inv.hash)) {
masternodeSync.AddedBudgetItem(); masternodeSync.AddedBudgetItem(inv.hash);
return true; return true;
} }
return false; return false;
case MSG_MASTERNODE_ANNOUNCE: case MSG_MASTERNODE_ANNOUNCE:
if(mnodeman.mapSeenMasternodeBroadcast.count(inv.hash)) { if(mnodeman.mapSeenMasternodeBroadcast.count(inv.hash)) {
masternodeSync.AddedMasternodeList(); masternodeSync.AddedMasternodeList(inv.hash);
return true; return true;
} }
return false; return false;

View File

@ -830,7 +830,7 @@ void CBudgetManager::ProcessMessage(CNode* pfrom, std::string& strCommand, CData
vRecv >> budgetProposalBroadcast; vRecv >> budgetProposalBroadcast;
if(mapSeenMasternodeBudgetProposals.count(budgetProposalBroadcast.GetHash())){ if(mapSeenMasternodeBudgetProposals.count(budgetProposalBroadcast.GetHash())){
masternodeSync.AddedBudgetItem(); masternodeSync.AddedBudgetItem(budgetProposalBroadcast.GetHash());
return; return;
} }
@ -849,7 +849,7 @@ void CBudgetManager::ProcessMessage(CNode* pfrom, std::string& strCommand, CData
CBudgetProposal budgetProposal(budgetProposalBroadcast); CBudgetProposal budgetProposal(budgetProposalBroadcast);
if(AddProposal(budgetProposal)) {budgetProposalBroadcast.Relay();} if(AddProposal(budgetProposal)) {budgetProposalBroadcast.Relay();}
masternodeSync.AddedBudgetItem(); masternodeSync.AddedBudgetItem(budgetProposalBroadcast.GetHash());
LogPrintf("mprop - new budget - %s\n", budgetProposalBroadcast.GetHash().ToString()); LogPrintf("mprop - new budget - %s\n", budgetProposalBroadcast.GetHash().ToString());
@ -863,7 +863,7 @@ void CBudgetManager::ProcessMessage(CNode* pfrom, std::string& strCommand, CData
vote.fValid = true; vote.fValid = true;
if(mapSeenMasternodeBudgetVotes.count(vote.GetHash())){ if(mapSeenMasternodeBudgetVotes.count(vote.GetHash())){
masternodeSync.AddedBudgetItem(); masternodeSync.AddedBudgetItem(vote.GetHash());
return; return;
} }
@ -884,7 +884,7 @@ void CBudgetManager::ProcessMessage(CNode* pfrom, std::string& strCommand, CData
std::string strError = ""; std::string strError = "";
if(UpdateProposal(vote, pfrom, strError)) { if(UpdateProposal(vote, pfrom, strError)) {
vote.Relay(); vote.Relay();
masternodeSync.AddedBudgetItem(); masternodeSync.AddedBudgetItem(vote.GetHash());
} }
LogPrintf("mvote - new budget vote - %s\n", vote.GetHash().ToString()); LogPrintf("mvote - new budget vote - %s\n", vote.GetHash().ToString());
@ -895,7 +895,7 @@ void CBudgetManager::ProcessMessage(CNode* pfrom, std::string& strCommand, CData
vRecv >> finalizedBudgetBroadcast; vRecv >> finalizedBudgetBroadcast;
if(mapSeenFinalizedBudgets.count(finalizedBudgetBroadcast.GetHash())){ if(mapSeenFinalizedBudgets.count(finalizedBudgetBroadcast.GetHash())){
masternodeSync.AddedBudgetItem(); masternodeSync.AddedBudgetItem(finalizedBudgetBroadcast.GetHash());
return; return;
} }
@ -916,7 +916,7 @@ void CBudgetManager::ProcessMessage(CNode* pfrom, std::string& strCommand, CData
CFinalizedBudget finalizedBudget(finalizedBudgetBroadcast); CFinalizedBudget finalizedBudget(finalizedBudgetBroadcast);
if(AddFinalizedBudget(finalizedBudget)) {finalizedBudgetBroadcast.Relay();} if(AddFinalizedBudget(finalizedBudget)) {finalizedBudgetBroadcast.Relay();}
masternodeSync.AddedBudgetItem(); masternodeSync.AddedBudgetItem(finalizedBudgetBroadcast.GetHash());
//we might have active votes for this budget that are now valid //we might have active votes for this budget that are now valid
CheckOrphanVotes(); CheckOrphanVotes();
@ -928,7 +928,7 @@ void CBudgetManager::ProcessMessage(CNode* pfrom, std::string& strCommand, CData
vote.fValid = true; vote.fValid = true;
if(mapSeenFinalizedBudgetVotes.count(vote.GetHash())){ if(mapSeenFinalizedBudgetVotes.count(vote.GetHash())){
masternodeSync.AddedBudgetItem(); masternodeSync.AddedBudgetItem(vote.GetHash());
return; return;
} }
@ -948,7 +948,7 @@ void CBudgetManager::ProcessMessage(CNode* pfrom, std::string& strCommand, CData
std::string strError = ""; std::string strError = "";
if(UpdateFinalizedBudget(vote, pfrom, strError)) { if(UpdateFinalizedBudget(vote, pfrom, strError)) {
vote.Relay(); vote.Relay();
masternodeSync.AddedBudgetItem(); masternodeSync.AddedBudgetItem(vote.GetHash());
} }
LogPrint("mnbudget", "fbs - new finalized budget vote - %s\n", vote.GetHash().ToString()); LogPrint("mnbudget", "fbs - new finalized budget vote - %s\n", vote.GetHash().ToString());

View File

@ -365,7 +365,7 @@ void CMasternodePayments::ProcessMessageMasternodePayments(CNode* pfrom, std::st
if(masternodePayments.mapMasternodePayeeVotes.count(winner.GetHash())){ if(masternodePayments.mapMasternodePayeeVotes.count(winner.GetHash())){
LogPrint("mnpayments", "mnw - Already seen - %s bestHeight %d\n", winner.GetHash().ToString().c_str(), chainActive.Tip()->nHeight); LogPrint("mnpayments", "mnw - Already seen - %s bestHeight %d\n", winner.GetHash().ToString().c_str(), chainActive.Tip()->nHeight);
masternodeSync.AddedMasternodeWinner(); masternodeSync.AddedMasternodeWinner(winner.GetHash());
return; return;
} }
@ -400,7 +400,7 @@ void CMasternodePayments::ProcessMessageMasternodePayments(CNode* pfrom, std::st
if(masternodePayments.AddWinningMasternode(winner)){ if(masternodePayments.AddWinningMasternode(winner)){
winner.Relay(); winner.Relay();
masternodeSync.AddedMasternodeWinner(); masternodeSync.AddedMasternodeWinner(winner.GetHash());
} }
} }
} }
@ -598,6 +598,7 @@ void CMasternodePayments::CleanPaymentList()
if(chainActive.Tip()->nHeight - winner.nBlockHeight > nLimit){ if(chainActive.Tip()->nHeight - winner.nBlockHeight > nLimit){
LogPrint("mnpayments", "CMasternodePayments::CleanPaymentList - Removing old Masternode payment - block %d\n", winner.nBlockHeight); LogPrint("mnpayments", "CMasternodePayments::CleanPaymentList - Removing old Masternode payment - block %d\n", winner.nBlockHeight);
masternodeSync.mapSeenSyncMNW.erase((*it).first);
mapMasternodePayeeVotes.erase(it++); mapMasternodePayeeVotes.erase(it++);
} else { } else {
++it; ++it;

View File

@ -75,19 +75,44 @@ void CMasternodeSync::Reset()
RequestedMasternodeAttempt = 0; RequestedMasternodeAttempt = 0;
} }
void CMasternodeSync::AddedMasternodeList() void CMasternodeSync::AddedMasternodeList(uint256 hash)
{ {
lastMasternodeList = GetTime(); if(mnodeman.mapSeenMasternodeBroadcast.count(hash)) {
if(mapSeenSyncMNB[hash] < 2) {
lastMasternodeList = GetTime();
mapSeenSyncMNB[hash]++;
}
} else {
lastMasternodeList = GetTime();
mapSeenSyncMNB.insert(make_pair(hash, 1));
}
} }
void CMasternodeSync::AddedMasternodeWinner() void CMasternodeSync::AddedMasternodeWinner(uint256 hash)
{ {
lastMasternodeWinner = GetTime(); if(masternodePayments.mapMasternodePayeeVotes.count(hash)) {
if(mapSeenSyncMNW[hash] < 2) {
lastMasternodeWinner = GetTime();
mapSeenSyncMNW[hash]++;
}
} else {
lastMasternodeWinner = GetTime();
mapSeenSyncMNW.insert(make_pair(hash, 1));
}
} }
void CMasternodeSync::AddedBudgetItem() void CMasternodeSync::AddedBudgetItem(uint256 hash)
{ {
lastBudgetItem = GetTime(); if(budget.mapSeenMasternodeBudgetProposals.count(hash) || budget.mapSeenMasternodeBudgetVotes.count(hash) ||
budget.mapSeenFinalizedBudgets.count(hash) || budget.mapSeenFinalizedBudgetVotes.count(hash)) {
if(mapSeenSyncBudget[hash] < 2) {
lastBudgetItem = GetTime();
mapSeenSyncBudget[hash]++;
}
} else {
lastBudgetItem = GetTime();
mapSeenSyncBudget.insert(make_pair(hash, 1));
}
} }
bool CMasternodeSync::IsBudgetPropEmpty() bool CMasternodeSync::IsBudgetPropEmpty()
@ -141,25 +166,21 @@ void CMasternodeSync::ProcessMessage(CNode* pfrom, std::string& strCommand, CDat
{ {
case(MASTERNODE_SYNC_LIST): case(MASTERNODE_SYNC_LIST):
if(nItemID != RequestedMasternodeAssets) return; if(nItemID != RequestedMasternodeAssets) return;
if(nCount == 0) lastMasternodeList = GetTime();
sumMasternodeList += nCount; sumMasternodeList += nCount;
countMasternodeList++; countMasternodeList++;
break; break;
case(MASTERNODE_SYNC_MNW): case(MASTERNODE_SYNC_MNW):
if(nItemID != RequestedMasternodeAssets) return; if(nItemID != RequestedMasternodeAssets) return;
if(nCount == 0) lastMasternodeWinner = GetTime();
sumMasternodeWinner += nCount; sumMasternodeWinner += nCount;
countMasternodeWinner++; countMasternodeWinner++;
break; break;
case(MASTERNODE_SYNC_BUDGET_PROP): case(MASTERNODE_SYNC_BUDGET_PROP):
if(RequestedMasternodeAssets != MASTERNODE_SYNC_BUDGET) return; if(RequestedMasternodeAssets != MASTERNODE_SYNC_BUDGET) return;
if(nCount == 0) lastBudgetItem = GetTime();
sumBudgetItemProp += nCount; sumBudgetItemProp += nCount;
countBudgetItemProp++; countBudgetItemProp++;
break; break;
case(MASTERNODE_SYNC_BUDGET_FIN): case(MASTERNODE_SYNC_BUDGET_FIN):
if(RequestedMasternodeAssets != MASTERNODE_SYNC_BUDGET) return; if(RequestedMasternodeAssets != MASTERNODE_SYNC_BUDGET) return;
if(nCount == 0) lastBudgetItem = GetTime();
sumBudgetItemFin += nCount; sumBudgetItemFin += nCount;
countBudgetItemFin++; countBudgetItemFin++;
break; break;

View File

@ -27,6 +27,10 @@ extern CMasternodeSync masternodeSync;
class CMasternodeSync class CMasternodeSync
{ {
public: public:
std::map<uint256, int> mapSeenSyncMNB;
std::map<uint256, int> mapSeenSyncMNW;
std::map<uint256, int> mapSeenSyncBudget;
int64_t lastMasternodeList; int64_t lastMasternodeList;
int64_t lastMasternodeWinner; int64_t lastMasternodeWinner;
int64_t lastBudgetItem; int64_t lastBudgetItem;
@ -50,9 +54,9 @@ public:
CMasternodeSync(); CMasternodeSync();
void AddedMasternodeList(); void AddedMasternodeList(uint256 hash);
void AddedMasternodeWinner(); void AddedMasternodeWinner(uint256 hash);
void AddedBudgetItem(); void AddedBudgetItem(uint256 hash);
void GetNextAsset(); void GetNextAsset();
void ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv); void ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv);
bool IsBudgetFinEmpty(); bool IsBudgetFinEmpty();

View File

@ -390,7 +390,7 @@ bool CMasternodeBroadcast::CheckAndUpdate(int& nDos)
pmn->UpdateFromNewBroadcast((*this)); pmn->UpdateFromNewBroadcast((*this));
pmn->Check(); pmn->Check();
if(pmn->IsEnabled()) Relay(); if(pmn->IsEnabled()) Relay();
masternodeSync.AddedMasternodeList(); masternodeSync.AddedMasternodeList(GetHash());
} }
return true; return true;

View File

@ -254,6 +254,7 @@ void CMasternodeMan::CheckAndRemove(bool forceExpiredRemoval)
map<uint256, CMasternodeBroadcast>::iterator it3 = mapSeenMasternodeBroadcast.begin(); map<uint256, CMasternodeBroadcast>::iterator it3 = mapSeenMasternodeBroadcast.begin();
while(it3 != mapSeenMasternodeBroadcast.end()){ while(it3 != mapSeenMasternodeBroadcast.end()){
if((*it3).second.vin == (*it).vin){ if((*it3).second.vin == (*it).vin){
masternodeSync.mapSeenSyncMNB.erase((*it3).first);
mapSeenMasternodeBroadcast.erase(it3++); mapSeenMasternodeBroadcast.erase(it3++);
} else { } else {
++it3; ++it3;
@ -644,7 +645,7 @@ void CMasternodeMan::ProcessMessage(CNode* pfrom, std::string& strCommand, CData
vRecv >> mnb; vRecv >> mnb;
if(mnodeman.mapSeenMasternodeBroadcast.count(mnb.GetHash())) { //seen if(mnodeman.mapSeenMasternodeBroadcast.count(mnb.GetHash())) { //seen
masternodeSync.AddedMasternodeList(); masternodeSync.AddedMasternodeList(mnb.GetHash());
return; return;
} }
mnodeman.mapSeenMasternodeBroadcast.insert(make_pair(mnb.GetHash(), mnb)); mnodeman.mapSeenMasternodeBroadcast.insert(make_pair(mnb.GetHash(), mnb));
@ -672,7 +673,7 @@ void CMasternodeMan::ProcessMessage(CNode* pfrom, std::string& strCommand, CData
if(mnb.CheckInputsAndAdd(nDoS)) { if(mnb.CheckInputsAndAdd(nDoS)) {
// use this as a peer // use this as a peer
addrman.Add(CAddress(mnb.addr), pfrom->addr, 2*60*60); addrman.Add(CAddress(mnb.addr), pfrom->addr, 2*60*60);
masternodeSync.AddedMasternodeList(); masternodeSync.AddedMasternodeList(mnb.GetHash());
} else { } else {
LogPrintf("mnb - Rejected Masternode entry %s\n", mnb.addr.ToString()); LogPrintf("mnb - Rejected Masternode entry %s\n", mnb.addr.ToString());