Skip to content

Commit c07b522

Browse files
committed
refactor: move CConnman out of CDKGSession{,Handler,Manager} ctor
1 parent 01876c7 commit c07b522

9 files changed

+51
-58
lines changed

src/init.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -2280,7 +2280,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
22802280

22812281
// ********************************************************* Step 10a: schedule Dash-specific tasks
22822282

2283-
node.llmq_ctx->Start(*node.peerman);
2283+
node.llmq_ctx->Start(*node.connman, *node.peerman);
22842284

22852285
node.scheduler->scheduleEvery(std::bind(&CNetFulfilledRequestManager::DoMaintenance, std::ref(*node.netfulfilledman)), std::chrono::minutes{1});
22862286
node.scheduler->scheduleEvery(std::bind(&CMasternodeSync::DoMaintenance, std::ref(*node.mn_sync), std::cref(*node.peerman), std::cref(*node.govman)), std::chrono::seconds{1});

src/llmq/context.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ LLMQContext::LLMQContext(ChainstateManager& chainman, CConnman& connman, CDeterm
2727
bls_worker{std::make_shared<CBLSWorker>()},
2828
dkg_debugman{std::make_unique<llmq::CDKGDebugManager>()},
2929
quorum_block_processor{std::make_unique<llmq::CQuorumBlockProcessor>(chainman.ActiveChainstate(), dmnman, evo_db)},
30-
qdkgsman{std::make_unique<llmq::CDKGSessionManager>(*bls_worker, chainman.ActiveChainstate(), connman, dmnman,
31-
*dkg_debugman, mn_metaman, *quorum_block_processor,
32-
mn_activeman, sporkman, unit_tests, wipe)},
30+
qdkgsman{std::make_unique<llmq::CDKGSessionManager>(*bls_worker, chainman.ActiveChainstate(), dmnman, *dkg_debugman,
31+
mn_metaman, *quorum_block_processor, mn_activeman, sporkman,
32+
unit_tests, wipe)},
3333
qman{std::make_unique<llmq::CQuorumManager>(*bls_worker, chainman.ActiveChainstate(), connman, dmnman, *qdkgsman,
3434
evo_db, *quorum_block_processor, mn_activeman, mn_sync, sporkman,
3535
unit_tests, wipe)},
@@ -74,13 +74,13 @@ void LLMQContext::Interrupt() {
7474
llmq::quorumInstantSendManager->InterruptWorkerThread();
7575
}
7676

77-
void LLMQContext::Start(PeerManager& peerman)
77+
void LLMQContext::Start(CConnman& connman, PeerManager& peerman)
7878
{
7979
assert(clhandler == llmq::chainLocksHandler.get());
8080
assert(isman == llmq::quorumInstantSendManager.get());
8181

8282
if (is_masternode) {
83-
qdkgsman->StartThreads(peerman);
83+
qdkgsman->StartThreads(connman, peerman);
8484
}
8585
qman->Start();
8686
shareman->RegisterAsRecoveredSigsListener();

src/llmq/context.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ struct LLMQContext {
4646
~LLMQContext();
4747

4848
void Interrupt();
49-
void Start(PeerManager& peerman);
49+
void Start(CConnman& connman, PeerManager& peerman);
5050
void Stop();
5151

5252
/** Guaranteed if LLMQContext is initialized then all members are valid too

src/llmq/dkgsession.cpp

+6-8
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,12 @@ CDKGMember::CDKGMember(const CDeterministicMNCPtr& _dmn, size_t _idx) :
7272
}
7373

7474
CDKGSession::CDKGSession(const CBlockIndex* pQuorumBaseBlockIndex, const Consensus::LLMQParams& _params,
75-
CBLSWorker& _blsWorker, CConnman& _connman, CDeterministicMNManager& dmnman,
76-
CDKGSessionManager& _dkgManager, CDKGDebugManager& _dkgDebugManager,
77-
CMasternodeMetaMan& mn_metaman, const CActiveMasternodeManager* const mn_activeman,
78-
const CSporkManager& sporkman) :
75+
CBLSWorker& _blsWorker, CDeterministicMNManager& dmnman, CDKGSessionManager& _dkgManager,
76+
CDKGDebugManager& _dkgDebugManager, CMasternodeMetaMan& mn_metaman,
77+
const CActiveMasternodeManager* const mn_activeman, const CSporkManager& sporkman) :
7978
params(_params),
8079
blsWorker(_blsWorker),
8180
cache(_blsWorker),
82-
connman(_connman),
8381
m_dmnman(dmnman),
8482
dkgManager(_dkgManager),
8583
dkgDebugManager(_dkgDebugManager),
@@ -417,7 +415,7 @@ void CDKGSession::VerifyPendingContributions()
417415
pendingContributionVerifications.clear();
418416
}
419417

420-
void CDKGSession::VerifyAndComplain(CDKGPendingMessages& pendingMessages, PeerManager& peerman)
418+
void CDKGSession::VerifyAndComplain(CConnman& connman, CDKGPendingMessages& pendingMessages, PeerManager& peerman)
421419
{
422420
if (!AreWeMember()) {
423421
return;
@@ -453,12 +451,12 @@ void CDKGSession::VerifyAndComplain(CDKGPendingMessages& pendingMessages, PeerMa
453451
logger.Batch("verified contributions. time=%d", t1.count());
454452
logger.Flush();
455453

456-
VerifyConnectionAndMinProtoVersions();
454+
VerifyConnectionAndMinProtoVersions(connman);
457455

458456
SendComplaint(pendingMessages, peerman);
459457
}
460458

461-
void CDKGSession::VerifyConnectionAndMinProtoVersions() const
459+
void CDKGSession::VerifyConnectionAndMinProtoVersions(CConnman& connman) const
462460
{
463461
assert(m_mn_metaman.IsValid());
464462

src/llmq/dkgsession.h

+5-6
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,6 @@ class CDKGSession
280280

281281
CBLSWorker& blsWorker;
282282
CBLSWorkerCache cache;
283-
CConnman& connman;
284283
CDeterministicMNManager& m_dmnman;
285284
CDKGSessionManager& dkgManager;
286285
CDKGDebugManager& dkgDebugManager;
@@ -327,9 +326,9 @@ class CDKGSession
327326

328327
public:
329328
CDKGSession(const CBlockIndex* pQuorumBaseBlockIndex, const Consensus::LLMQParams& _params, CBLSWorker& _blsWorker,
330-
CConnman& _connman, CDeterministicMNManager& dmnman, CDKGSessionManager& _dkgManager,
331-
CDKGDebugManager& _dkgDebugManager, CMasternodeMetaMan& mn_metaman,
332-
const CActiveMasternodeManager* const mn_activeman, const CSporkManager& sporkman);
329+
CDeterministicMNManager& dmnman, CDKGSessionManager& _dkgManager, CDKGDebugManager& _dkgDebugManager,
330+
CMasternodeMetaMan& mn_metaman, const CActiveMasternodeManager* const mn_activeman,
331+
const CSporkManager& sporkman);
333332

334333
// TODO: remove Init completely
335334
bool Init(const uint256& _myProTxHash, int _quorumIndex);
@@ -357,8 +356,8 @@ class CDKGSession
357356
void VerifyPendingContributions() EXCLUSIVE_LOCKS_REQUIRED(cs_pending);
358357

359358
// Phase 2: complaint
360-
void VerifyAndComplain(CDKGPendingMessages& pendingMessages, PeerManager& peerman);
361-
void VerifyConnectionAndMinProtoVersions() const;
359+
void VerifyAndComplain(CConnman& connman, CDKGPendingMessages& pendingMessages, PeerManager& peerman);
360+
void VerifyConnectionAndMinProtoVersions(CConnman& connman) const;
362361
void SendComplaint(CDKGPendingMessages& pendingMessages, PeerManager& peerman);
363362
bool PreVerifyMessage(const CDKGComplaint& qc, bool& retBan) const;
364363
std::optional<CInv> ReceiveMessage(const CDKGComplaint& qc);

src/llmq/dkgsessionhandler.cpp

+18-18
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,13 @@
2424
namespace llmq
2525
{
2626

27-
CDKGSessionHandler::CDKGSessionHandler(CBLSWorker& _blsWorker, CChainState& chainstate, CConnman& _connman,
28-
CDeterministicMNManager& dmnman, CDKGDebugManager& _dkgDebugManager,
29-
CDKGSessionManager& _dkgManager, CMasternodeMetaMan& mn_metaman,
30-
CQuorumBlockProcessor& _quorumBlockProcessor,
27+
CDKGSessionHandler::CDKGSessionHandler(CBLSWorker& _blsWorker, CChainState& chainstate, CDeterministicMNManager& dmnman,
28+
CDKGDebugManager& _dkgDebugManager, CDKGSessionManager& _dkgManager,
29+
CMasternodeMetaMan& mn_metaman, CQuorumBlockProcessor& _quorumBlockProcessor,
3130
const CActiveMasternodeManager* const mn_activeman, const CSporkManager& sporkman,
3231
const Consensus::LLMQParams& _params, int _quorumIndex) :
3332
blsWorker(_blsWorker),
3433
m_chainstate(chainstate),
35-
connman(_connman),
3634
m_dmnman(dmnman),
3735
dkgDebugManager(_dkgDebugManager),
3836
dkgManager(_dkgManager),
@@ -42,8 +40,8 @@ CDKGSessionHandler::CDKGSessionHandler(CBLSWorker& _blsWorker, CChainState& chai
4240
m_sporkman(sporkman),
4341
params(_params),
4442
quorumIndex(_quorumIndex),
45-
curSession(std::make_unique<CDKGSession>(nullptr, _params, _blsWorker, _connman, dmnman, _dkgManager,
46-
_dkgDebugManager, m_mn_metaman, m_mn_activeman, sporkman)),
43+
curSession(std::make_unique<CDKGSession>(nullptr, _params, _blsWorker, dmnman, _dkgManager, _dkgDebugManager,
44+
m_mn_metaman, m_mn_activeman, sporkman)),
4745
pendingContributions(
4846
(size_t)_params.size * 2,
4947
MSG_QUORUM_CONTRIB), // we allow size*2 messages as we need to make sure we see bad behavior (double messages)
@@ -165,15 +163,15 @@ void CDKGSessionHandler::ProcessMessage(const CNode& pfrom, PeerManager& peerman
165163
}
166164
}
167165

168-
void CDKGSessionHandler::StartThread(PeerManager& peerman)
166+
void CDKGSessionHandler::StartThread(CConnman& connman, PeerManager& peerman)
169167
{
170168
if (phaseHandlerThread.joinable()) {
171169
throw std::runtime_error("Tried to start an already started CDKGSessionHandler thread.");
172170
}
173171

174172
m_thread_name = strprintf("llmq-%d-%d", ToUnderlying(params.type), quorumIndex);
175173
phaseHandlerThread = std::thread(&util::TraceThread, m_thread_name.c_str(),
176-
[this, &peerman] { PhaseHandlerThread(peerman); });
174+
[this, &connman, &peerman] { PhaseHandlerThread(connman, peerman); });
177175
}
178176

179177
void CDKGSessionHandler::StopThread()
@@ -190,7 +188,7 @@ bool CDKGSessionHandler::InitNewQuorum(const CBlockIndex* pQuorumBaseBlockIndex)
190188
return false;
191189
}
192190

193-
curSession = std::make_unique<CDKGSession>(pQuorumBaseBlockIndex, params, blsWorker, connman, m_dmnman, dkgManager,
191+
curSession = std::make_unique<CDKGSession>(pQuorumBaseBlockIndex, params, blsWorker, m_dmnman, dkgManager,
194192
dkgDebugManager, m_mn_metaman, m_mn_activeman, m_sporkman);
195193

196194
if (!curSession->Init(m_mn_activeman->GetProTxHash(), quorumIndex)) {
@@ -528,7 +526,7 @@ bool ProcessPendingMessageBatch(CConnman& connman, CDKGSession& session, CDKGPen
528526
return true;
529527
}
530528

531-
void CDKGSessionHandler::HandleDKGRound(PeerManager& peerman)
529+
void CDKGSessionHandler::HandleDKGRound(CConnman& connman, PeerManager& peerman)
532530
{
533531
WaitForNextPhase(std::nullopt, QuorumPhase::Initialized);
534532

@@ -562,31 +560,33 @@ void CDKGSessionHandler::HandleDKGRound(PeerManager& peerman)
562560

563561
// Contribute
564562
auto fContributeStart = [this, &peerman]() { curSession->Contribute(pendingContributions, peerman); };
565-
auto fContributeWait = [this, &peerman] {
563+
auto fContributeWait = [this, &connman, &peerman] {
566564
return ProcessPendingMessageBatch<CDKGContribution, MSG_QUORUM_CONTRIB>(connman, *curSession,
567565
pendingContributions, peerman, 8);
568566
};
569567
HandlePhase(QuorumPhase::Contribute, QuorumPhase::Complain, curQuorumHash, 0.05, fContributeStart, fContributeWait);
570568

571569
// Complain
572-
auto fComplainStart = [this, &peerman]() { curSession->VerifyAndComplain(pendingComplaints, peerman); };
573-
auto fComplainWait = [this, &peerman] {
570+
auto fComplainStart = [this, &connman, &peerman]() {
571+
curSession->VerifyAndComplain(connman, pendingComplaints, peerman);
572+
};
573+
auto fComplainWait = [this, &connman, &peerman] {
574574
return ProcessPendingMessageBatch<CDKGComplaint, MSG_QUORUM_COMPLAINT>(connman, *curSession, pendingComplaints,
575575
peerman, 8);
576576
};
577577
HandlePhase(QuorumPhase::Complain, QuorumPhase::Justify, curQuorumHash, 0.05, fComplainStart, fComplainWait);
578578

579579
// Justify
580580
auto fJustifyStart = [this, &peerman]() { curSession->VerifyAndJustify(pendingJustifications, peerman); };
581-
auto fJustifyWait = [this, &peerman] {
581+
auto fJustifyWait = [this, &connman, &peerman] {
582582
return ProcessPendingMessageBatch<CDKGJustification, MSG_QUORUM_JUSTIFICATION>(connman, *curSession,
583583
pendingJustifications, peerman, 8);
584584
};
585585
HandlePhase(QuorumPhase::Justify, QuorumPhase::Commit, curQuorumHash, 0.05, fJustifyStart, fJustifyWait);
586586

587587
// Commit
588588
auto fCommitStart = [this, &peerman]() { curSession->VerifyAndCommit(pendingPrematureCommitments, peerman); };
589-
auto fCommitWait = [this, &peerman] {
589+
auto fCommitWait = [this, &connman, &peerman] {
590590
return ProcessPendingMessageBatch<CDKGPrematureCommitment, MSG_QUORUM_PREMATURE_COMMITMENT>(
591591
connman, *curSession, pendingPrematureCommitments, peerman, 8);
592592
};
@@ -600,12 +600,12 @@ void CDKGSessionHandler::HandleDKGRound(PeerManager& peerman)
600600
}
601601
}
602602

603-
void CDKGSessionHandler::PhaseHandlerThread(PeerManager& peerman)
603+
void CDKGSessionHandler::PhaseHandlerThread(CConnman& connman, PeerManager& peerman)
604604
{
605605
while (!stopRequested) {
606606
try {
607607
LogPrint(BCLog::LLMQ_DKG, "CDKGSessionHandler::%s -- %s qi[%d] - starting HandleDKGRound\n", __func__, params.name, quorumIndex);
608-
HandleDKGRound(peerman);
608+
HandleDKGRound(connman, peerman);
609609
} catch (AbortPhaseException& e) {
610610
dkgDebugManager.UpdateLocalSessionStatus(params.type, quorumIndex, [&](CDKGDebugSessionStatus& status) {
611611
status.statusBits.aborted = true;

src/llmq/dkgsessionhandler.h

+5-7
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ class CDKGSessionHandler
129129

130130
CBLSWorker& blsWorker;
131131
CChainState& m_chainstate;
132-
CConnman& connman;
133132
CDeterministicMNManager& m_dmnman;
134133
CDKGDebugManager& dkgDebugManager;
135134
CDKGSessionManager& dkgManager;
@@ -156,17 +155,16 @@ class CDKGSessionHandler
156155
CDKGPendingMessages pendingPrematureCommitments;
157156

158157
public:
159-
CDKGSessionHandler(CBLSWorker& _blsWorker, CChainState& chainstate, CConnman& _connman,
160-
CDeterministicMNManager& dmnman, CDKGDebugManager& _dkgDebugManager,
161-
CDKGSessionManager& _dkgManager, CMasternodeMetaMan& mn_metaman,
158+
CDKGSessionHandler(CBLSWorker& _blsWorker, CChainState& chainstate, CDeterministicMNManager& dmnman,
159+
CDKGDebugManager& _dkgDebugManager, CDKGSessionManager& _dkgManager, CMasternodeMetaMan& mn_metaman,
162160
CQuorumBlockProcessor& _quorumBlockProcessor, const CActiveMasternodeManager* const mn_activeman,
163161
const CSporkManager& sporkman, const Consensus::LLMQParams& _params, int _quorumIndex);
164162
~CDKGSessionHandler();
165163

166164
void UpdatedBlockTip(const CBlockIndex *pindexNew);
167165
void ProcessMessage(const CNode& pfrom, PeerManager& peerman, const std::string& msg_type, CDataStream& vRecv);
168166

169-
void StartThread(PeerManager& peerman);
167+
void StartThread(CConnman& connman, PeerManager& peerman);
170168
void StopThread();
171169

172170
bool GetContribution(const uint256& hash, CDKGContribution& ret) const;
@@ -191,8 +189,8 @@ class CDKGSessionHandler
191189
void WaitForNewQuorum(const uint256& oldQuorumHash) const;
192190
void SleepBeforePhase(QuorumPhase curPhase, const uint256& expectedQuorumHash, double randomSleepFactor, const WhileWaitFunc& runWhileWaiting) const;
193191
void HandlePhase(QuorumPhase curPhase, QuorumPhase nextPhase, const uint256& expectedQuorumHash, double randomSleepFactor, const StartPhaseFunc& startPhaseFunc, const WhileWaitFunc& runWhileWaiting);
194-
void HandleDKGRound(PeerManager& peerman);
195-
void PhaseHandlerThread(PeerManager& peerman);
192+
void HandleDKGRound(CConnman& connman, PeerManager& peerman);
193+
void PhaseHandlerThread(CConnman& connman, PeerManager& peerman);
196194
};
197195

198196
} // namespace llmq

src/llmq/dkgsessionmgr.cpp

+7-8
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,14 @@ static const std::string DB_VVEC = "qdkg_V";
2929
static const std::string DB_SKCONTRIB = "qdkg_S";
3030
static const std::string DB_ENC_CONTRIB = "qdkg_E";
3131

32-
CDKGSessionManager::CDKGSessionManager(CBLSWorker& _blsWorker, CChainState& chainstate, CConnman& _connman,
33-
CDeterministicMNManager& dmnman, CDKGDebugManager& _dkgDebugManager,
34-
CMasternodeMetaMan& mn_metaman, CQuorumBlockProcessor& _quorumBlockProcessor,
32+
CDKGSessionManager::CDKGSessionManager(CBLSWorker& _blsWorker, CChainState& chainstate, CDeterministicMNManager& dmnman,
33+
CDKGDebugManager& _dkgDebugManager, CMasternodeMetaMan& mn_metaman,
34+
CQuorumBlockProcessor& _quorumBlockProcessor,
3535
const CActiveMasternodeManager* const mn_activeman,
3636
const CSporkManager& sporkman, bool unitTests, bool fWipe) :
3737
db(std::make_unique<CDBWrapper>(unitTests ? "" : (gArgs.GetDataDirNet() / "llmq/dkgdb"), 1 << 20, unitTests, fWipe)),
3838
blsWorker(_blsWorker),
3939
m_chainstate(chainstate),
40-
connman(_connman),
4140
m_dmnman(dmnman),
4241
dkgDebugManager(_dkgDebugManager),
4342
quorumBlockProcessor(_quorumBlockProcessor),
@@ -53,19 +52,19 @@ CDKGSessionManager::CDKGSessionManager(CBLSWorker& _blsWorker, CChainState& chai
5352
auto session_count = (params.useRotation) ? params.signingActiveQuorumCount : 1;
5453
for (const auto i : irange::range(session_count)) {
5554
dkgSessionHandlers.emplace(std::piecewise_construct, std::forward_as_tuple(params.type, i),
56-
std::forward_as_tuple(blsWorker, m_chainstate, connman, dmnman, dkgDebugManager,
57-
*this, mn_metaman, quorumBlockProcessor, mn_activeman,
55+
std::forward_as_tuple(blsWorker, m_chainstate, dmnman, dkgDebugManager, *this,
56+
mn_metaman, quorumBlockProcessor, mn_activeman,
5857
spork_manager, params, i));
5958
}
6059
}
6160
}
6261

6362
CDKGSessionManager::~CDKGSessionManager() = default;
6463

65-
void CDKGSessionManager::StartThreads(PeerManager& peerman)
64+
void CDKGSessionManager::StartThreads(CConnman& connman, PeerManager& peerman)
6665
{
6766
for (auto& it : dkgSessionHandlers) {
68-
it.second.StartThread(peerman);
67+
it.second.StartThread(connman, peerman);
6968
}
7069
}
7170

src/llmq/dkgsessionmgr.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ class CDKGSessionManager
4242

4343
CBLSWorker& blsWorker;
4444
CChainState& m_chainstate;
45-
CConnman& connman;
4645
CDeterministicMNManager& m_dmnman;
4746
CDKGDebugManager& dkgDebugManager;
4847
CQuorumBlockProcessor& quorumBlockProcessor;
@@ -71,13 +70,13 @@ class CDKGSessionManager
7170
mutable std::map<ContributionsCacheKey, ContributionsCacheEntry> contributionsCache GUARDED_BY(contributionsCacheCs);
7271

7372
public:
74-
CDKGSessionManager(CBLSWorker& _blsWorker, CChainState& chainstate, CConnman& _connman,
75-
CDeterministicMNManager& dmnman, CDKGDebugManager& _dkgDebugManager, CMasternodeMetaMan& mn_metaman,
73+
CDKGSessionManager(CBLSWorker& _blsWorker, CChainState& chainstate, CDeterministicMNManager& dmnman,
74+
CDKGDebugManager& _dkgDebugManager, CMasternodeMetaMan& mn_metaman,
7675
CQuorumBlockProcessor& _quorumBlockProcessor, const CActiveMasternodeManager* const mn_activeman,
7776
const CSporkManager& sporkman, bool unitTests, bool fWipe);
7877
~CDKGSessionManager();
7978

80-
void StartThreads(PeerManager& peerman);
79+
void StartThreads(CConnman& connman, PeerManager& peerman);
8180
void StopThreads();
8281

8382
void UpdatedBlockTip(const CBlockIndex *pindexNew, bool fInitialDownload);

0 commit comments

Comments
 (0)