Skip to content

Commit 6d96689

Browse files
author
evan82
committed
Merge pull request #431 from UdjinM6/v0.12.0.x_few_sync_improvements
V0.12.0.x few sync improvments
2 parents 7101c95 + 91eda7e commit 6d96689

File tree

4 files changed

+79
-94
lines changed

4 files changed

+79
-94
lines changed

src/darksend.cpp

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2327,16 +2327,7 @@ void ThreadCheckDarkSendPool()
23272327
MilliSleep(1000);
23282328
//LogPrintf("ThreadCheckDarkSendPool::check timeout\n");
23292329

2330-
if(c % 60 == 0){
2331-
//if we've used 90% of the Masternode list then drop all the oldest.
2332-
int nThreshold = (int)(mnodeman.CountEnabled() * 0.9);
2333-
if(fDebug) LogPrintf("Checking vecMasternodesUsed size %d threshold %d\n", (int)vecMasternodesUsed.size(), nThreshold);
2334-
while((int)vecMasternodesUsed.size() > nThreshold){
2335-
vecMasternodesUsed.erase(vecMasternodesUsed.begin());
2336-
if(fDebug) LogPrintf(" vecMasternodesUsed size %d threshold %d\n", (int)vecMasternodesUsed.size(), nThreshold);
2337-
}
2338-
}
2339-
2330+
// try to sync from all available nodes (up to 3 or until MASTERNODE_SYNC_TIMEOUT) one step at a time
23402331
masternodeSync.Process();
23412332

23422333
if(masternodeSync.IsSynced()) {
@@ -2354,12 +2345,14 @@ void ThreadCheckDarkSendPool()
23542345
mnodeman.ProcessMasternodeConnections();
23552346
masternodePayments.CleanPaymentList();
23562347
CleanTransactionLocksList();
2357-
}
23582348

2359-
if(c % 60 == 0){
2360-
//if we've used 1/5 of the Masternode list, then clear the list.
2361-
if((int)vecMasternodesUsed.size() > (int)mnodeman.size() / 5)
2362-
vecMasternodesUsed.clear();
2349+
//if we've used 90% of the Masternode list then drop all the oldest.
2350+
int nThreshold = (int)(mnodeman.CountEnabled() * 0.9);
2351+
if(fDebug) LogPrintf("Checking vecMasternodesUsed size %d threshold %d\n", (int)vecMasternodesUsed.size(), nThreshold);
2352+
while((int)vecMasternodesUsed.size() > nThreshold){
2353+
vecMasternodesUsed.erase(vecMasternodesUsed.begin());
2354+
if(fDebug) LogPrintf(" vecMasternodesUsed size %d threshold %d\n", (int)vecMasternodesUsed.size(), nThreshold);
2355+
}
23632356
}
23642357

23652358
if(c % MASTERNODES_DUMP_SECONDS == 0) DumpMasternodes();

src/masternode-sync.cpp

Lines changed: 68 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
44

55
#include "main.h"
6-
#include "init.h"
7-
86
#include "masternode-sync.h"
97
#include "masternode.h"
8+
#include "masternodeman.h"
109
#include "util.h"
1110
#include "addrman.h"
1211

@@ -15,11 +14,10 @@ CMasternodeSync masternodeSync;
1514

1615
CMasternodeSync::CMasternodeSync()
1716
{
18-
c = 0;
1917
lastMasternodeList = 0;
2018
lastMasternodeWinner = 0;
2119
lastBudgetItem = 0;
22-
RequestedMasternodeAssets = 0;
20+
RequestedMasternodeAssets = MASTERNODE_INITIAL;
2321
RequestedMasternodeAttempt = 0;
2422
}
2523

@@ -63,96 +61,98 @@ void CMasternodeSync::GetNextAsset()
6361
RequestedMasternodeAssets = MASTERNODE_LIST_SYNCED;
6462
break;
6563
}
64+
RequestedMasternodeAttempt = 0;
6665
}
6766

68-
void CMasternodeSync::Process()
67+
void CMasternodeSync::Process()
6968
{
69+
static int c = 0;
70+
7071
if(IsSynced()) return;
7172

73+
if(c++ % MASTERNODE_SYNC_TIMEOUT != 0) return;
74+
75+
if(fDebug) LogPrintf("CMasternodeSync::Process() - RequestedMasternodeAssets %d c %d\n", RequestedMasternodeAssets, c);
76+
7277
//request full mn list only if Masternodes.dat was updated quite a long time ago
7378
if(RequestedMasternodeAssets == MASTERNODE_INITIAL) GetNextAsset();
7479

7580
CBlockIndex* pindexPrev = chainActive.Tip();
7681
if(pindexPrev == NULL) return;
7782

78-
//try to sync the Masternode list and payment list every 5 seconds from at least 3 nodes
79-
if(c % 5 == 0){
80-
LOCK(cs_vNodes);
81-
BOOST_FOREACH(CNode* pnode, vNodes)
83+
LOCK(cs_vNodes);
84+
BOOST_FOREACH(CNode* pnode, vNodes)
85+
{
86+
if (pnode->nVersion >= MIN_POOL_PEER_PROTO_VERSION)
8287
{
83-
if (pnode->nVersion >= MIN_POOL_PEER_PROTO_VERSION)
84-
{
85-
86-
if(RequestedMasternodeAssets == MASTERNODE_SPORK_SETTINGS){
87-
if(pnode->HasFulfilledRequest("getspork")) continue;
88-
pnode->FulfilledRequest("getspork");
89-
90-
if(RequestedMasternodeAttempt <= 2){
91-
pnode->PushMessage("getsporks"); //get current network sporks
92-
if(RequestedMasternodeAttempt == 2) GetNextAsset();
93-
RequestedMasternodeAttempt++;
94-
}
95-
return;
96-
}
9788

98-
if(IsInitialBlockDownload()) return;
89+
if(RequestedMasternodeAssets == MASTERNODE_SPORK_SETTINGS){
90+
if(pnode->HasFulfilledRequest("getspork")) continue;
91+
pnode->FulfilledRequest("getspork");
9992

100-
if(RequestedMasternodeAssets == MASTERNODE_SYNC_LIST){
101-
if(lastMasternodeList > 0 && lastMasternodeList < GetTime() - 5){ //hasn't received a new item in the last five seconds, so we'll move to the
102-
GetNextAsset();
103-
return;
104-
}
93+
if(RequestedMasternodeAttempt <= 2){
94+
pnode->PushMessage("getsporks"); //get current network sporks
95+
if(RequestedMasternodeAttempt == 2) GetNextAsset();
96+
RequestedMasternodeAttempt++;
97+
}
98+
return;
99+
}
105100

106-
if(pnode->HasFulfilledRequest("mnsync")) continue;
107-
pnode->FulfilledRequest("mnsync");
101+
if(IsInitialBlockDownload()) return;
108102

109-
if((lastMasternodeList == 0 || lastMasternodeList > GetTime() - 5) && RequestedMasternodeAttempt <= 4){
110-
mnodeman.DsegUpdate(pnode);
111-
pnode->PushMessage("getsporks"); //get current network sporks
112-
AddedMasternodeList();
113-
RequestedMasternodeAttempt++;
114-
}
103+
if(RequestedMasternodeAssets == MASTERNODE_SYNC_LIST){
104+
if(lastMasternodeList > 0 && lastMasternodeList < GetTime() - MASTERNODE_SYNC_TIMEOUT){ //hasn't received a new item in the last five seconds, so we'll move to the
105+
GetNextAsset();
115106
return;
116107
}
117108

118-
if(RequestedMasternodeAssets == MASTERNODE_SYNC_MNW){
119-
if(lastMasternodeWinner > 0 && lastMasternodeWinner < GetTime() - 5){ //hasn't received a new item in the last five seconds, so we'll move to the
120-
GetNextAsset();
121-
return;
122-
}
109+
if(pnode->HasFulfilledRequest("mnsync")) continue;
110+
pnode->FulfilledRequest("mnsync");
123111

124-
if(pnode->HasFulfilledRequest("mnwsync")) continue;
125-
pnode->FulfilledRequest("mnwsync");
112+
if((lastMasternodeList == 0 || lastMasternodeList > GetTime() - MASTERNODE_SYNC_TIMEOUT)
113+
&& RequestedMasternodeAttempt <= 2){
114+
mnodeman.DsegUpdate(pnode);
115+
RequestedMasternodeAttempt++;
116+
}
117+
return;
118+
}
126119

127-
if((lastMasternodeWinner == 0 || lastMasternodeWinner > GetTime() - 5) && RequestedMasternodeAttempt <= 6){
128-
pnode->PushMessage("mnget"); //sync payees
129-
AddedMasternodeWinner();
130-
RequestedMasternodeAttempt++;
131-
}
120+
if(RequestedMasternodeAssets == MASTERNODE_SYNC_MNW){
121+
if(lastMasternodeWinner > 0 && lastMasternodeWinner < GetTime() - MASTERNODE_SYNC_TIMEOUT){ //hasn't received a new item in the last five seconds, so we'll move to the
122+
GetNextAsset();
132123
return;
133124
}
134-
135-
if(RequestedMasternodeAssets == MASTERNODE_SYNC_BUDGET){
136-
if(lastBudgetItem > 0 && lastBudgetItem < GetTime() - 5){ //hasn't received a new item in the last five seconds, so we'll move to the
137-
GetNextAsset();
138-
return;
139-
}
140-
141-
if(pnode->HasFulfilledRequest("busync")) continue;
142-
pnode->FulfilledRequest("busync");
143-
144-
if((lastBudgetItem == 0 || lastBudgetItem > GetTime() - 5) && RequestedMasternodeAttempt <= 8){
145-
uint256 n = 0;
146-
147-
pnode->PushMessage("mnvs", n); //sync masternode votes
148-
AddedBudgetItem();
149-
RequestedMasternodeAttempt++;
150-
}
125+
126+
if(pnode->HasFulfilledRequest("mnwsync")) continue;
127+
pnode->FulfilledRequest("mnwsync");
128+
129+
if((lastMasternodeWinner == 0 || lastMasternodeWinner > GetTime() - MASTERNODE_SYNC_TIMEOUT)
130+
&& RequestedMasternodeAttempt <= 2){
131+
pnode->PushMessage("mnget"); //sync payees
132+
RequestedMasternodeAttempt++;
133+
}
134+
return;
135+
}
136+
137+
if(RequestedMasternodeAssets == MASTERNODE_SYNC_BUDGET){
138+
if(lastBudgetItem > 0 && lastBudgetItem < GetTime() - MASTERNODE_SYNC_TIMEOUT){ //hasn't received a new item in the last five seconds, so we'll move to the
139+
GetNextAsset();
151140
return;
152141
}
153142

143+
if(pnode->HasFulfilledRequest("busync")) continue;
144+
pnode->FulfilledRequest("busync");
145+
146+
if((lastBudgetItem == 0 || lastBudgetItem > GetTime() - MASTERNODE_SYNC_TIMEOUT)
147+
&& RequestedMasternodeAttempt <= 2){
148+
uint256 n = 0;
149+
150+
pnode->PushMessage("mnvs", n); //sync masternode votes
151+
RequestedMasternodeAttempt++;
152+
}
153+
return;
154154
}
155+
155156
}
156157
}
157-
c++;
158-
}
158+
}

src/masternode-sync.h

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,15 @@
55
#ifndef MASTERNODE_SYNC_H
66
#define MASTERNODE_SYNC_H
77

8-
#include "main.h"
9-
#include "sync.h"
10-
#include "net.h"
11-
#include "key.h"
12-
#include "masternodeman.h"
13-
#include "util.h"
14-
#include "base58.h"
15-
16-
using namespace std;
17-
188
#define MASTERNODE_INITIAL 0
199
#define MASTERNODE_SPORK_SETTINGS 1
2010
#define MASTERNODE_SYNC_LIST 2
2111
#define MASTERNODE_SYNC_MNW 3
2212
#define MASTERNODE_SYNC_BUDGET 4
2313
#define MASTERNODE_LIST_SYNCED 999
2414

15+
#define MASTERNODE_SYNC_TIMEOUT 5
16+
2517
class CMasternodeSync;
2618
extern CMasternodeSync masternodeSync;
2719

@@ -32,7 +24,6 @@ extern CMasternodeSync masternodeSync;
3224
class CMasternodeSync
3325
{
3426
public:
35-
int c;
3627
int64_t lastMasternodeList;
3728
int64_t lastMasternodeWinner;
3829
int64_t lastBudgetItem;

src/masternodeman.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -603,6 +603,7 @@ void CMasternodeMan::ProcessMessage(CNode* pfrom, std::string& strCommand, CData
603603
if(mnb.CheckInputsAndAdd(nDoS)) {
604604
// use this as a peer
605605
addrman.Add(CAddress(mnb.addr), pfrom->addr, 2*60*60);
606+
masternodeSync.AddedMasternodeList();
606607
} else {
607608
LogPrintf("mnb - Rejected Masternode entry %s\n", mnb.addr.ToString());
608609

0 commit comments

Comments
 (0)