Skip to content

Commit 9084530

Browse files
committed
refactor: migrate CGovernanceManager::ProcessMessage() and friends
1 parent 8b9bf7c commit 9084530

File tree

3 files changed

+30
-21
lines changed

3 files changed

+30
-21
lines changed

src/governance/governance.cpp

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ bool CGovernanceManager::SerializeVoteForHash(const uint256& nHash, CDataStream&
140140
return cmapVoteToObject.Get(nHash, pGovobj) && pGovobj->GetVoteFile().SerializeVoteToStream(nHash, ss);
141141
}
142142

143-
PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, PeerManager& peerman, std::string_view msg_type, CDataStream& vRecv)
143+
MessageProcessingResult CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, PeerManager& peerman, std::string_view msg_type, CDataStream& vRecv)
144144
{
145145
if (!IsValid()) return {};
146146
if (!m_mn_sync.IsBlockchainSynced()) return {};
@@ -155,9 +155,7 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
155155

156156
uint256 nProp;
157157
CBloomFilter filter;
158-
159158
vRecv >> nProp;
160-
161159
vRecv >> filter;
162160

163161
LogPrint(BCLog::GOBJECT, "MNGOVERNANCESYNC -- syncing governance objects to our peer %s\n", peer.GetLogString());
@@ -166,6 +164,8 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
166164
} else {
167165
SyncSingleObjVotes(peer, peerman, nProp, filter, connman);
168166
}
167+
168+
return {};
169169
}
170170

171171
// A NEW GOVERNANCE OBJECT HAS ARRIVED
@@ -177,11 +177,12 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
177177

178178
uint256 nHash = govobj.GetHash();
179179

180-
WITH_LOCK(::cs_main, peerman.EraseObjectRequest(peer.GetId(), CInv(MSG_GOVERNANCE_OBJECT, nHash)));
180+
MessageProcessingResult ret{};
181+
ret.m_to_erase = CInv{MSG_GOVERNANCE_OBJECT, nHash};
181182

182183
if (!m_mn_sync.IsBlockchainSynced()) {
183184
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECT -- masternode list not synced\n");
184-
return {};
185+
return ret;
185186
}
186187

187188
std::string strHash = nHash.ToString();
@@ -190,21 +191,21 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
190191

191192
if (!AcceptMessage(nHash)) {
192193
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECT -- Received unrequested object: %s\n", strHash);
193-
return {};
194+
return ret;
194195
}
195196

196197
LOCK2(::cs_main, cs);
197198

198199
if (mapObjects.count(nHash) || mapPostponedObjects.count(nHash) || mapErasedGovernanceObjects.count(nHash)) {
199200
// TODO - print error code? what if it's GOVOBJ_ERROR_IMMATURE?
200201
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECT -- Received already seen object: %s\n", strHash);
201-
return {};
202+
return ret;
202203
}
203204

204205
bool fRateCheckBypassed = false;
205206
if (!MasternodeRateCheck(govobj, true, false, fRateCheckBypassed)) {
206207
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECT -- masternode rate check failed - %s - (current block height %d) \n", strHash, nCachedBlockHeight);
207-
return {};
208+
return ret;
208209
}
209210

210211
std::string strError;
@@ -215,7 +216,7 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
215216

216217
if (fRateCheckBypassed && fIsValid && !MasternodeRateCheck(govobj, true)) {
217218
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECT -- masternode rate check failed (after signature verification) - %s - (current block height %d)\n", strHash, nCachedBlockHeight);
218-
return {};
219+
return ret;
219220
}
220221

221222
if (!fIsValid) {
@@ -225,13 +226,15 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
225226
} else {
226227
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECT -- Governance object is invalid - %s\n", strError);
227228
// apply node's ban score
228-
return tl::unexpected{20};
229+
ret.m_error = MisbehavingError{20};
230+
return ret;
229231
}
230232

231-
return {};
233+
return ret;
232234
}
233235

234236
AddGovernanceObject(govobj, peerman, &peer);
237+
return ret;
235238
}
236239

237240
// A NEW GOVERNANCE OBJECT VOTE HAS ARRIVED
@@ -240,12 +243,14 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
240243
vRecv >> vote;
241244

242245
uint256 nHash = vote.GetHash();
243-
WITH_LOCK(::cs_main, peerman.EraseObjectRequest(peer.GetId(), CInv(MSG_GOVERNANCE_OBJECT_VOTE, nHash)));
246+
247+
MessageProcessingResult ret{};
248+
ret.m_to_erase = CInv{MSG_GOVERNANCE_OBJECT_VOTE, nHash};
244249

245250
// Ignore such messages until masternode list is synced
246251
if (!m_mn_sync.IsBlockchainSynced()) {
247252
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECTVOTE -- masternode list not synced\n");
248-
return {};
253+
return ret;
249254
}
250255

251256
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECTVOTE -- Received vote: %s\n", vote.ToString(tip_mn_list));
@@ -255,7 +260,7 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
255260
if (!AcceptMessage(nHash)) {
256261
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECTVOTE -- Received unrequested vote object: %s, hash: %s, peer = %d\n",
257262
vote.ToString(tip_mn_list), strHash, peer.GetId());
258-
return {};
263+
return ret;
259264
}
260265

261266
CGovernanceException exception;
@@ -266,11 +271,14 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
266271
} else {
267272
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECTVOTE -- Rejected vote, error = %s\n", exception.what());
268273
if ((exception.GetNodePenalty() != 0) && m_mn_sync.IsSynced()) {
269-
return tl::unexpected{exception.GetNodePenalty()};
274+
ret.m_error = MisbehavingError{exception.GetNodePenalty()};
275+
return ret;
270276
}
271-
return {};
277+
return ret;
272278
}
279+
return ret;
273280
}
281+
274282
return {};
275283
}
276284

@@ -961,7 +969,7 @@ void CGovernanceManager::SyncSingleObjVotes(CNode& peer, PeerManager& peerman, c
961969
LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s -- sent %d votes to peer=%d\n", __func__, nVoteCount, peer.GetId());
962970
}
963971

964-
PeerMsgRet CGovernanceManager::SyncObjects(CNode& peer, PeerManager& peerman, CConnman& connman) const
972+
MessageProcessingResult CGovernanceManager::SyncObjects(CNode& peer, PeerManager& peerman, CConnman& connman) const
965973
{
966974
assert(m_netfulfilledman.IsValid());
967975

@@ -971,7 +979,7 @@ PeerMsgRet CGovernanceManager::SyncObjects(CNode& peer, PeerManager& peerman, CC
971979
if (m_netfulfilledman.HasFulfilledRequest(peer.addr, NetMsgType::MNGOVERNANCESYNC)) {
972980
// Asking for the whole list multiple times in a short period of time is no good
973981
LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s -- peer already asked me for the list\n", __func__);
974-
return tl::unexpected{20};
982+
return MisbehavingError{20};
975983
}
976984
m_netfulfilledman.AddFulfilledRequest(peer.addr, NetMsgType::MNGOVERNANCESYNC);
977985

src/governance/governance.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <util/check.h>
1515

1616
#include <optional>
17+
#include <string_view>
1718

1819
class CBloomFilter;
1920
class CBlockIndex;
@@ -272,9 +273,9 @@ class CGovernanceManager : public GovernanceStore
272273
bool ConfirmInventoryRequest(const CInv& inv);
273274

274275
void SyncSingleObjVotes(CNode& peer, PeerManager& peerman, const uint256& nProp, const CBloomFilter& filter, CConnman& connman);
275-
PeerMsgRet SyncObjects(CNode& peer, PeerManager& peerman, CConnman& connman) const;
276+
[[nodiscard]] MessageProcessingResult SyncObjects(CNode& peer, PeerManager& peerman, CConnman& connman) const;
276277

277-
PeerMsgRet ProcessMessage(CNode& peer, CConnman& connman, PeerManager& peerman, std::string_view msg_type, CDataStream& vRecv);
278+
[[nodiscard]] MessageProcessingResult ProcessMessage(CNode& peer, CConnman& connman, PeerManager& peerman, std::string_view msg_type, CDataStream& vRecv);
278279

279280
private:
280281
void ResetVotedFundingTrigger();

src/net_processing.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5270,7 +5270,7 @@ void PeerManagerImpl::ProcessMessage(
52705270
PostProcessMessage(m_cj_ctx->server->ProcessMessage(pfrom, msg_type, vRecv), pfrom.GetId());
52715271
PostProcessMessage(m_sporkman.ProcessMessage(pfrom, m_connman, msg_type, vRecv), pfrom.GetId());
52725272
m_mn_sync.ProcessMessage(pfrom, msg_type, vRecv);
5273-
ProcessPeerMsgRet(m_govman.ProcessMessage(pfrom, m_connman, *this, msg_type, vRecv), pfrom);
5273+
PostProcessMessage(m_govman.ProcessMessage(pfrom, m_connman, *this, msg_type, vRecv), pfrom.GetId());
52745274
PostProcessMessage(CMNAuth::ProcessMessage(pfrom, peer->m_their_services, m_connman, m_mn_metaman, m_mn_activeman, m_mn_sync, m_dmnman->GetListAtChainTip(), msg_type, vRecv), pfrom.GetId());
52755275
PostProcessMessage(m_llmq_ctx->quorum_block_processor->ProcessMessage(pfrom, msg_type, vRecv), pfrom.GetId());
52765276
PostProcessMessage(m_llmq_ctx->qdkgsman->ProcessMessage(pfrom, is_masternode, msg_type, vRecv), pfrom.GetId());

0 commit comments

Comments
 (0)