Skip to content

Commit dc08ef4

Browse files
committed
refactor: break circular dependency of CMasternodeManager over net.h
1 parent 9ac269c commit dc08ef4

7 files changed

Lines changed: 48 additions & 24 deletions

File tree

src/init.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1990,7 +1990,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
19901990
* need it or not further down and then query if the database is initialized
19911991
* to check if validation is enabled.
19921992
*/
1993-
node.mn_sync = std::make_unique<CMasternodeSync>(*node.connman, *node.netfulfilledman);
1993+
node.mn_sync = std::make_unique<CMasternodeSync>(std::make_unique<NodeSyncNotifierImpl>(*node.connman, *node.netfulfilledman));
19941994

19951995
node.govman = std::make_unique<CGovernanceManager>(*node.mn_metaman, *node.netfulfilledman, *node.chainman, node.dmnman, *node.mn_sync);
19961996

src/masternode/sync.cpp

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,15 @@
55
#include <masternode/sync.h>
66

77
#include <chain.h>
8-
#include <net.h>
9-
#include <netfulfilledman.h>
10-
#include <node/interface_ui.h>
118
#include <util/time.h>
129
#include <util/translation.h>
1310

14-
CMasternodeSync::CMasternodeSync(CConnman& _connman, CNetFulfilledRequestManager& netfulfilledman) :
11+
CMasternodeSync::CMasternodeSync(std::unique_ptr<NodeSyncNotifier>&& sync_notifier) :
1512
nTimeAssetSyncStarted{GetTime()},
1613
nTimeLastBumped{GetTime()},
17-
connman{_connman},
18-
m_netfulfilledman{netfulfilledman}
14+
m_sync_notifier{std::move(sync_notifier)}
1915
{
16+
assert(m_sync_notifier != nullptr);
2017
}
2118

2219
CMasternodeSync::~CMasternodeSync() = default;
@@ -36,7 +33,7 @@ void CMasternodeSync::Reset(bool fForce, bool fNotifyReset)
3633
nTimeLastUpdateBlockTip = 0;
3734
fReachedBestHeader = false;
3835
if (fNotifyReset) {
39-
uiInterface.NotifyAdditionalDataSyncProgressChanged(-1);
36+
m_sync_notifier->SyncReset();
4037
}
4138
}
4239

@@ -60,8 +57,6 @@ std::string CMasternodeSync::GetAssetName() const
6057

6158
void CMasternodeSync::SwitchToNextAsset()
6259
{
63-
assert(m_netfulfilledman.IsValid());
64-
6560
switch(nCurrentAsset)
6661
{
6762
case(MASTERNODE_SYNC_BLOCKCHAIN):
@@ -72,11 +67,7 @@ void CMasternodeSync::SwitchToNextAsset()
7267
case(MASTERNODE_SYNC_GOVERNANCE):
7368
LogPrintf("CMasternodeSync::SwitchToNextAsset -- Completed %s in %llds\n", GetAssetName(), GetTime() - nTimeAssetSyncStarted);
7469
nCurrentAsset = MASTERNODE_SYNC_FINISHED;
75-
uiInterface.NotifyAdditionalDataSyncProgressChanged(1);
76-
// TODO: move connman to notifier
77-
connman.ForEachNode(CConnman::AllNodes, [this](const CNode* pnode) {
78-
m_netfulfilledman.AddFulfilledRequest(pnode->addr, "full-sync");
79-
});
70+
m_sync_notifier->SyncFinished();
8071
LogPrintf("CMasternodeSync::SwitchToNextAsset -- Sync has finished\n");
8172

8273
break;

src/masternode/sync.h

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,10 @@
55
#define BITCOIN_MASTERNODE_SYNC_H
66

77
#include <atomic>
8+
#include <memory>
89
#include <string>
910

10-
class CConnman;
1111
class CBlockIndex;
12-
class CMasternodeSync;
13-
class CNetFulfilledRequestManager;
1412

1513
/** Default for -syncmempool */
1614
static const bool DEFAULT_SYNC_MEMPOOL = true;
@@ -25,10 +23,16 @@ static constexpr int MASTERNODE_SYNC_TICK_SECONDS = 6;
2523
static constexpr int MASTERNODE_SYNC_TIMEOUT_SECONDS = 30; // our blocks are 2.5 minutes so 30 seconds should be fine
2624
static constexpr int MASTERNODE_SYNC_RESET_SECONDS = 900; // Reset fReachedBestHeader in CMasternodeSync::Reset if UpdateBlockTip hasn't been called for this seconds
2725

26+
class NodeSyncNotifier
27+
{
28+
public:
29+
virtual void SyncReset() = 0;
30+
virtual void SyncFinished() = 0;
31+
};
32+
2833
//
2934
// CMasternodeSync : Sync masternode assets in stages
3035
//
31-
3236
class CMasternodeSync
3337
{
3438
private:
@@ -47,14 +51,13 @@ class CMasternodeSync
4751
/// Last time UpdateBlockTip has been called
4852
std::atomic<int64_t> nTimeLastUpdateBlockTip{0};
4953

50-
CConnman& connman;
51-
CNetFulfilledRequestManager& m_netfulfilledman;
54+
std::unique_ptr<NodeSyncNotifier> m_sync_notifier;
5255

5356
public:
5457
CMasternodeSync() = delete;
5558
CMasternodeSync(const CMasternodeSync&) = delete;
5659
CMasternodeSync& operator=(const CMasternodeSync&) = delete;
57-
explicit CMasternodeSync(CConnman& _connman, CNetFulfilledRequestManager& netfulfilledman);
60+
explicit CMasternodeSync(std::unique_ptr<NodeSyncNotifier>&& sync_notifier);
5861
~CMasternodeSync();
5962

6063
bool IsBlockchainSynced() const { return nCurrentAsset > MASTERNODE_SYNC_BLOCKCHAIN; }

src/node/sync_manager.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,3 +333,18 @@ void SyncManager::ProcessMessage(CNode& peer, CConnman&, const std::string& msg_
333333

334334
LogPrint(BCLog::MNSYNC, "SYNCSTATUSCOUNT -- got inventory count: nItemID=%d nCount=%d peer=%d\n", nItemID, nCount, peer.GetId());
335335
}
336+
337+
void NodeSyncNotifierImpl::SyncReset()
338+
{
339+
uiInterface.NotifyAdditionalDataSyncProgressChanged(-1);
340+
}
341+
342+
void NodeSyncNotifierImpl::SyncFinished()
343+
{
344+
assert(m_netfulfilledman.IsValid());
345+
346+
uiInterface.NotifyAdditionalDataSyncProgressChanged(1);
347+
m_connman.ForEachNode(CConnman::AllNodes, [this](const CNode* pnode) {
348+
m_netfulfilledman.AddFulfilledRequest(pnode->addr, "full-sync");
349+
});
350+
}

src/node/sync_manager.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#ifndef BITCOIN_NODE_SYNC_MANAGER_H
66
#define BITCOIN_NODE_SYNC_MANAGER_H
77

8+
#include <masternode/sync.h>
89
#include <net_processing.h>
910

1011
class CGovernanceManager;
@@ -35,4 +36,18 @@ class SyncManager final : public NetHandler
3536
CNetFulfilledRequestManager& m_netfulfilledman;
3637
};
3738

39+
class NodeSyncNotifierImpl : public NodeSyncNotifier
40+
{
41+
public:
42+
NodeSyncNotifierImpl(CConnman& connman, CNetFulfilledRequestManager& netfulfilledman) :
43+
m_connman(connman),
44+
m_netfulfilledman(netfulfilledman)
45+
{}
46+
47+
void SyncReset() override;
48+
void SyncFinished() override;
49+
private:
50+
CConnman& m_connman;
51+
CNetFulfilledRequestManager& m_netfulfilledman;
52+
};
3853
#endif // BITCOIN_NODE_SYNC_MANAGER_H

src/test/util/setup_common.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include <node/blockstorage.h>
2424
#include <node/chainstate.h>
2525
#include <node/miner.h>
26+
#include <node/sync_manager.h>
2627
#include <policy/fees.h>
2728
#include <pow.h>
2829
#include <rpc/blockchain.h>
@@ -273,7 +274,7 @@ ChainTestingSetup::ChainTestingSetup(const std::string& chainName, const std::ve
273274
m_node.chainman = std::make_unique<ChainstateManager>();
274275
m_node.chainman->m_blockman.m_block_tree_db = std::make_unique<CBlockTreeDB>(m_cache_sizes.block_tree_db, true);
275276

276-
m_node.mn_sync = std::make_unique<CMasternodeSync>(*m_node.connman, *m_node.netfulfilledman);
277+
m_node.mn_sync = std::make_unique<CMasternodeSync>(std::make_unique<NodeSyncNotifierImpl>(*m_node.connman, *m_node.netfulfilledman));
277278
m_node.govman = std::make_unique<CGovernanceManager>(*m_node.mn_metaman, *m_node.netfulfilledman, *m_node.chainman, m_node.dmnman, *m_node.mn_sync);
278279

279280
// Start script-checking threads. Set g_parallel_script_checks to true so they are used.

test/lint/lint-circular-dependencies.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
"evo/specialtxman -> validation -> evo/specialtxman",
4949
"governance/classes -> governance/object -> governance/governance -> governance/classes",
5050
"governance/governance -> governance/signing -> governance/object -> governance/governance",
51-
"masternode/sync -> net -> masternode/sync",
5251
"instantsend/instantsend -> instantsend/signing -> llmq/signing_shares -> net_processing -> instantsend/instantsend",
5352
"instantsend/instantsend -> instantsend/signing -> llmq/signing_shares -> net_processing -> llmq/context -> instantsend/instantsend",
5453
"instantsend/instantsend -> instantsend/signing -> llmq/signing_shares -> net_processing -> masternode/active/context -> instantsend/instantsend",

0 commit comments

Comments
 (0)