Back off for 1m when connecting to quorum masternodes (#2975)
* Implement GetAddressInfo in CAddrMan * Back off for 1m when connecting to quorum masternodes
This commit is contained in:
parent
c1f756fd90
commit
49c37b82ae
@ -533,6 +533,23 @@ void CAddrMan::SetServices_(const CService& addr, ServiceFlags nServices)
|
||||
info.nServices = nServices;
|
||||
}
|
||||
|
||||
CAddrInfo CAddrMan::GetAddressInfo_(const CService& addr)
|
||||
{
|
||||
CAddrInfo* pinfo = Find(addr);
|
||||
|
||||
// if not found, bail out
|
||||
if (!pinfo)
|
||||
return CAddrInfo();
|
||||
|
||||
CAddrInfo& info = *pinfo;
|
||||
|
||||
// check whether we are talking about the exact same CService (including same port)
|
||||
if (info != addr)
|
||||
return CAddrInfo();
|
||||
|
||||
return *pinfo;
|
||||
}
|
||||
|
||||
int CAddrMan::RandomInt(int nMax){
|
||||
return GetRandInt(nMax);
|
||||
}
|
@ -265,6 +265,9 @@ protected:
|
||||
//! Update an entry's service bits.
|
||||
void SetServices_(const CService &addr, ServiceFlags nServices);
|
||||
|
||||
//! Get address info for address
|
||||
CAddrInfo GetAddressInfo_(const CService& addr);
|
||||
|
||||
public:
|
||||
/**
|
||||
* serialized format:
|
||||
@ -593,6 +596,18 @@ public:
|
||||
Check();
|
||||
}
|
||||
|
||||
CAddrInfo GetAddressInfo(const CService& addr)
|
||||
{
|
||||
CAddrInfo addrRet;
|
||||
{
|
||||
LOCK(cs);
|
||||
Check();
|
||||
addrRet = GetAddressInfo_(addr);
|
||||
Check();
|
||||
}
|
||||
return addrRet;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
#endif // BITCOIN_ADDRMAN_H
|
||||
|
@ -2070,6 +2070,8 @@ void CConnman::ThreadOpenMasternodeConnections()
|
||||
if (interruptNet)
|
||||
return;
|
||||
|
||||
int64_t nANow = GetAdjustedTime();
|
||||
|
||||
// NOTE: Process only one pending masternode at a time
|
||||
|
||||
CService addr;
|
||||
@ -2085,6 +2087,11 @@ void CConnman::ThreadOpenMasternodeConnections()
|
||||
}
|
||||
const auto& addr2 = dmn->pdmnState->addr;
|
||||
if (!connectedNodes.count(addr2) && !IsMasternodeOrDisconnectRequested(addr2) && !connectedProRegTxHashes.count(proRegTxHash)) {
|
||||
auto addrInfo = addrman.GetAddressInfo(addr2);
|
||||
// back off trying connecting to an address if we already tried recently
|
||||
if (addrInfo.IsValid() && nANow - addrInfo.nLastTry < 60) {
|
||||
continue;
|
||||
}
|
||||
pending.emplace_back(addr2);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user