Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 14 additions & 14 deletions src/llmq/quorums.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ void CQuorumManager::TriggerQuorumDataRecoveryThreads(CConnman& connman, const C
LogPrint(BCLog::LLMQ, "CQuorumManager::%s -- Process block %s\n", __func__, pIndex->GetBlockHash().ToString());

for (const auto& params : Params().GetConsensus().llmqs) {
const auto vecQuorums = ScanQuorums(params.type, pIndex, params.keepOldConnections);
auto vecQuorums = ScanQuorums(params.type, pIndex, params.keepOldConnections);

// First check if we are member of any quorum of this type
const uint256 proTxHash = m_mn_activeman != nullptr ? m_mn_activeman->GetProTxHash() : uint256();
Expand All @@ -266,7 +266,7 @@ void CQuorumManager::TriggerQuorumDataRecoveryThreads(CConnman& connman, const C
return pQuorum->IsValidMember(proTxHash);
});

for (const auto& pQuorum : vecQuorums) {
for (auto& pQuorum : vecQuorums) {
// If there is already a thread running for this specific quorum skip it
if (pQuorum->fQuorumDataRecoveryThreadRunning) {
continue;
Expand All @@ -293,7 +293,7 @@ void CQuorumManager::TriggerQuorumDataRecoveryThreads(CConnman& connman, const C
}

// Finally start the thread which triggers the requests for this quorum
StartQuorumDataRecoveryThread(connman, pQuorum, pIndex, nDataMask);
StartQuorumDataRecoveryThread(connman, std::move(pQuorum), pIndex, nDataMask);
}
}
}
Expand Down Expand Up @@ -475,7 +475,7 @@ bool CQuorumManager::HasQuorum(Consensus::LLMQType llmqType, const CQuorumBlockP
return quorum_block_processor.HasMinedCommitment(llmqType, quorumHash);
}

bool CQuorumManager::RequestQuorumData(CNode* pfrom, CConnman& connman, CQuorumCPtr pQuorum, uint16_t nDataMask,
bool CQuorumManager::RequestQuorumData(CNode* pfrom, CConnman& connman, const CQuorum& quorum, uint16_t nDataMask,
const uint256& proTxHash) const
{
if (pfrom == nullptr) {
Expand All @@ -486,12 +486,12 @@ bool CQuorumManager::RequestQuorumData(CNode* pfrom, CConnman& connman, CQuorumC
LogPrint(BCLog::LLMQ, "CQuorumManager::%s -- pfrom is not a verified masternode\n", __func__);
return false;
}
const Consensus::LLMQType llmqType = pQuorum->qc->llmqType;
const Consensus::LLMQType llmqType = quorum.qc->llmqType;
if (!Params().GetLLMQ(llmqType).has_value()) {
LogPrint(BCLog::LLMQ, "CQuorumManager::%s -- Invalid llmqType: %d\n", __func__, ToUnderlying(llmqType));
return false;
}
const CBlockIndex* pindex{pQuorum->m_quorum_base_block_index};
const CBlockIndex* pindex{quorum.m_quorum_base_block_index};
if (pindex == nullptr) {
LogPrint(BCLog::LLMQ, "CQuorumManager::%s -- Invalid m_quorum_base_block_index : nullptr\n", __func__);
return false;
Expand Down Expand Up @@ -673,7 +673,7 @@ CQuorumCPtr CQuorumManager::GetQuorum(Consensus::LLMQType llmqType, gsl::not_nul
return BuildQuorumFromCommitment(llmqType, pQuorumBaseBlockIndex, populate_cache);
}

size_t CQuorumManager::GetQuorumRecoveryStartOffset(const CQuorumCPtr pQuorum, const CBlockIndex* pIndex) const
size_t CQuorumManager::GetQuorumRecoveryStartOffset(const CQuorum& quorum, const CBlockIndex* pIndex) const
{
assert(m_mn_activeman);

Expand All @@ -695,7 +695,7 @@ size_t CQuorumManager::GetQuorumRecoveryStartOffset(const CQuorumCPtr pQuorum, c
}
}
}
return nIndex % pQuorum->qc->validMembers.size();
return nIndex % quorum.qc->validMembers.size();
}

MessageProcessingResult CQuorumManager::ProcessMessage(CNode& pfrom, CConnman& connman, std::string_view msg_type, CDataStream& vRecv)
Expand Down Expand Up @@ -883,7 +883,7 @@ MessageProcessingResult CQuorumManager::ProcessMessage(CNode& pfrom, CConnman& c
return {};
}

void CQuorumManager::StartCachePopulatorThread(const CQuorumCPtr pQuorum) const
void CQuorumManager::StartCachePopulatorThread(CQuorumCPtr pQuorum) const
{
if (!pQuorum->HasVerificationVector()) {
return;
Expand All @@ -896,7 +896,7 @@ void CQuorumManager::StartCachePopulatorThread(const CQuorumCPtr pQuorum) const
pQuorum->m_quorum_base_block_index->GetBlockHash().ToString());

// when then later some other thread tries to get keys, it will be much faster
workerPool.push([pQuorum, t, this](int threadId) {
workerPool.push([pQuorum = std::move(pQuorum), t, this](int threadId) {
for (const auto i : irange::range(pQuorum->members.size())) {
if (quorumThreadInterrupt) {
break;
Expand All @@ -913,7 +913,7 @@ void CQuorumManager::StartCachePopulatorThread(const CQuorumCPtr pQuorum) const
});
}

void CQuorumManager::StartQuorumDataRecoveryThread(CConnman& connman, const CQuorumCPtr pQuorum,
void CQuorumManager::StartQuorumDataRecoveryThread(CConnman& connman, CQuorumCPtr pQuorum,
const CBlockIndex* pIndex, uint16_t nDataMaskIn) const
{
assert(m_mn_activeman);
Expand All @@ -924,13 +924,13 @@ void CQuorumManager::StartQuorumDataRecoveryThread(CConnman& connman, const CQuo
return;
}

workerPool.push([&connman, pQuorum, pIndex, nDataMaskIn, this](int threadId) {
workerPool.push([&connman, pQuorum = std::move(pQuorum), pIndex, nDataMaskIn, this](int threadId) {
size_t nTries{0};
uint16_t nDataMask{nDataMaskIn};
int64_t nTimeLastSuccess{0};
uint256* pCurrentMemberHash{nullptr};
std::vector<uint256> vecMemberHashes;
const size_t nMyStartOffset{GetQuorumRecoveryStartOffset(pQuorum, pIndex)};
const size_t nMyStartOffset{GetQuorumRecoveryStartOffset(*pQuorum, pIndex)};
const int64_t nRequestTimeout{10};

auto printLog = [&](const std::string& strMessage) {
Expand Down Expand Up @@ -1006,7 +1006,7 @@ void CQuorumManager::StartQuorumDataRecoveryThread(CConnman& connman, const CQuo
return;
}

if (RequestQuorumData(pNode, connman, pQuorum, nDataMask, proTxHash)) {
if (RequestQuorumData(pNode, connman, *pQuorum, nDataMask, proTxHash)) {
nTimeLastSuccess = GetTime<std::chrono::seconds>().count();
printLog("Requested");
} else {
Expand Down
8 changes: 4 additions & 4 deletions src/llmq/quorums.h
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ class CQuorumManager

static bool HasQuorum(Consensus::LLMQType llmqType, const CQuorumBlockProcessor& quorum_block_processor, const uint256& quorumHash);

bool RequestQuorumData(CNode* pfrom, CConnman& connman, const CQuorumCPtr pQuorum, uint16_t nDataMask,
bool RequestQuorumData(CNode* pfrom, CConnman& connman, const CQuorum& quorum, uint16_t nDataMask,
const uint256& proTxHash = uint256()) const;

// all these methods will lock cs_main for a short period of time
Expand Down Expand Up @@ -309,10 +309,10 @@ class CQuorumManager
/// Returns the start offset for the masternode with the given proTxHash. This offset is applied when picking data recovery members of a quorum's
/// memberlist and is calculated based on a list of all member of all active quorums for the given llmqType in a way that each member
/// should receive the same number of request if all active llmqType members requests data from one llmqType quorum.
size_t GetQuorumRecoveryStartOffset(const CQuorumCPtr pQuorum, const CBlockIndex* pIndex) const;
size_t GetQuorumRecoveryStartOffset(const CQuorum& quorum, const CBlockIndex* pIndex) const;

void StartCachePopulatorThread(const CQuorumCPtr pQuorum) const;
void StartQuorumDataRecoveryThread(CConnman& connman, const CQuorumCPtr pQuorum, const CBlockIndex* pIndex,
void StartCachePopulatorThread(CQuorumCPtr pQuorum) const;
void StartQuorumDataRecoveryThread(CConnman& connman, CQuorumCPtr pQuorum, const CBlockIndex* pIndex,
uint16_t nDataMask) const;

void StartCleanupOldQuorumDataThread(const CBlockIndex* pIndex) const;
Expand Down
Loading
Loading