Skip to content

Commit 511f8f2

Browse files
committed
Reduce nodeconfig.hpp includes with nano::indirect<T> wrapper
Replace 30+ heavy subsystem config includes with forward declarations. Config members stored as `nano::indirect<T>` - a value-semantic heap wrapper that provides deep copy, move, implicit conversion to T&, and -> access. - Introduce `nano::indirect<T>` (nano/lib/indirect.hpp), similar to proposed std::indirect (P3019) - Store all subsystem configs as `indirect<T>` in node_config, removing direct includes of active_elections.hpp, network.hpp, vote_cache.hpp, etc. - Copy/move/dtor of node_config are all `= default` in the .cpp - Simplify to single constructor taking network_params - Access pattern: config.active_elections->size (via operator->) and implicit conversion where T const& is expected
1 parent 399da10 commit 511f8f2

77 files changed

Lines changed: 1137 additions & 864 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

nano/benchmarks/ledger.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#include <nano/lib/stats.hpp>
12
#include <nano/lib/files.hpp>
23
#include <nano/lib/logging.hpp>
34
#include <nano/node/make_store.hpp>

nano/core_test/active_elections.cpp

Lines changed: 50 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
#include <nano/node/bootstrap/bootstrap_config.hpp>
2+
#include <nano/node/vote_rebroadcaster.hpp>
3+
#include <nano/node/scheduler/optimistic.hpp>
4+
#include <nano/node/scheduler/hinted.hpp>
5+
#include <nano/node/repcrawler.hpp>
6+
#include <nano/node/network.hpp>
7+
#include <nano/node/bootstrap/bootstrap_service.hpp>
8+
#include <nano/node/backlog_scan.hpp>
19
#include <nano/lib/blocks.hpp>
210
#include <nano/lib/jsonconfig.hpp>
311
#include <nano/lib/vote.hpp>
@@ -45,7 +53,7 @@ TEST (active_elections, confirm_election_by_request)
4553
nano::test::system system;
4654
nano::node_config node_config1;
4755
// Disable vote rebroadcasting to prevent node1 from actively sending votes to node2
48-
node_config1.vote_rebroadcaster.enable = false;
56+
node_config1.vote_rebroadcaster->enable = false;
4957
auto & node1 = *system.add_node (node_config1);
5058

5159
nano::state_block_builder builder{};
@@ -135,7 +143,7 @@ TEST (active_elections, confirm_frontier)
135143
node_flags.disable_request_loop = true;
136144
node_flags.disable_ongoing_bootstrap = true;
137145
nano::node_config node_config;
138-
node_config.bootstrap.enable = false;
146+
node_config.bootstrap->enable = false;
139147
auto & node1 = *system.add_node (node_config, node_flags);
140148
system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv);
141149

@@ -148,7 +156,7 @@ TEST (active_elections, confirm_frontier)
148156
node_flags2.disable_ongoing_bootstrap = true;
149157
node_flags2.disable_rep_crawler = true;
150158
nano::node_config node_config2;
151-
node_config2.bootstrap.enable = false;
159+
node_config2.bootstrap->enable = false;
152160
// start node2 later so that we do not get the gossip traffic
153161
auto & node2 = *system.add_node (node_config2, node_flags2);
154162

@@ -274,9 +282,9 @@ TEST (active_elections, DISABLED_keep_local)
274282
nano::node_config node_config = system.default_config ();
275283
node_config.enable_voting = false;
276284
// Bound to 2, won't drop wallet created transactions, but good to test dropping remote
277-
node_config.active_elections.size = 2;
285+
node_config.active_elections->size = 2;
278286
// Disable frontier confirmation to allow the test to finish before
279-
node_config.backlog_scan.enable = false;
287+
node_config.backlog_scan->enable = false;
280288

281289
auto & node = *system.add_node (node_config);
282290
auto & wallet (*system.wallet (0));
@@ -338,7 +346,7 @@ TEST (active_elections, DISABLED_keep_local)
338346
node.process_active (receive3);
339347

340348
/// bound elections, should drop after one loop
341-
ASSERT_TIMELY_EQ (5s, node.active.size (), node_config.active_elections.size);
349+
ASSERT_TIMELY_EQ (5s, node.active.size (), node_config.active_elections->size);
342350
// ASSERT_EQ (1, node.scheduler.size ());
343351
}
344352

@@ -436,7 +444,7 @@ TEST (active_elections, cached_vote_existing)
436444
{
437445
nano::test::system system;
438446
nano::node_config node_config = system.default_config ();
439-
node_config.backlog_scan.enable = false;
447+
node_config.backlog_scan->enable = false;
440448
auto & node = *system.add_node (node_config);
441449
nano::block_hash latest (node.latest (nano::dev::genesis_key.pub));
442450
nano::keypair key;
@@ -490,7 +498,7 @@ TEST (active_elections, cached_vote_multiple)
490498
{
491499
nano::test::system system;
492500
nano::node_config node_config = system.default_config ();
493-
node_config.backlog_scan.enable = false;
501+
node_config.backlog_scan->enable = false;
494502
auto & node = *system.add_node (node_config);
495503
nano::keypair key1;
496504
nano::block_builder builder;
@@ -543,16 +551,16 @@ TEST (active_elections, cached_vote_election_start)
543551
{
544552
nano::test::system system;
545553
nano::node_config node_config = system.default_config ();
546-
node_config.backlog_scan.enable = false;
547-
node_config.priority_scheduler.enable = false;
548-
node_config.optimistic_scheduler.enable = false;
554+
node_config.backlog_scan->enable = false;
555+
node_config.priority_scheduler->enable = false;
556+
node_config.optimistic_scheduler->enable = false;
549557
auto & node = *system.add_node (node_config);
550558
nano::block_hash latest (node.latest (nano::dev::genesis_key.pub));
551559
nano::keypair key1, key2;
552560
nano::send_block_builder send_block_builder;
553561
nano::state_block_builder state_block_builder;
554562
// Enough weight to trigger election hinting but not enough to confirm block on its own
555-
auto amount = ((node.online_reps.trended () / 100) * node.config.hinted_scheduler.hinting_threshold_percent) / 2 + 1000 * nano::Knano_ratio;
563+
auto amount = ((node.online_reps.trended () / 100) * node.config.hinted_scheduler->hinting_threshold_percent) / 2 + 1000 * nano::Knano_ratio;
556564
auto send1 = send_block_builder.make_block ()
557565
.previous (latest)
558566
.destination (key1.pub)
@@ -648,7 +656,7 @@ TEST (active_elections, vote_replays)
648656
nano::test::system system;
649657
nano::node_config node_config = system.default_config ();
650658
node_config.enable_voting = false;
651-
node_config.backlog_scan.enable = false;
659+
node_config.backlog_scan->enable = false;
652660
auto & node = *system.add_node (node_config);
653661
nano::keypair key;
654662
nano::state_block_builder builder;
@@ -799,7 +807,7 @@ TEST (active_elections, republish_winner)
799807
{
800808
nano::test::system system;
801809
nano::node_config node_config = system.default_config ();
802-
node_config.backlog_scan.enable = false;
810+
node_config.backlog_scan->enable = false;
803811
auto & node1 = *system.add_node (node_config);
804812
node_config.peering_port = system.get_available_port ();
805813
auto & node2 = *system.add_node (node_config);
@@ -865,7 +873,7 @@ TEST (active_elections, fork_filter_cleanup)
865873
nano::test::system system{};
866874

867875
nano::node_config node_config = system.default_config ();
868-
node_config.backlog_scan.enable = false;
876+
node_config.backlog_scan->enable = false;
869877

870878
auto & node1 = *system.add_node (node_config);
871879
nano::keypair key{};
@@ -946,7 +954,7 @@ TEST (active_elections, fork_replacement_tally)
946954
{
947955
nano::test::system system;
948956
nano::node_config node_config = system.default_config ();
949-
node_config.backlog_scan.enable = false;
957+
node_config.backlog_scan->enable = false;
950958
auto & node1 (*system.add_node (node_config));
951959

952960
size_t const reps_count = 20;
@@ -1104,7 +1112,7 @@ TEST (active_elections, confirmation_consistency)
11041112
{
11051113
nano::test::system system;
11061114
nano::node_config node_config = system.default_config ();
1107-
node_config.backlog_scan.enable = false;
1115+
node_config.backlog_scan->enable = false;
11081116
auto & node = *system.add_node (node_config);
11091117
system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv);
11101118
for (unsigned i = 0; i < 10; ++i)
@@ -1194,7 +1202,7 @@ TEST (active_elections, activate_account_chain)
11941202
nano::test::system system;
11951203
nano::node_flags flags;
11961204
nano::node_config config = system.default_config ();
1197-
config.backlog_scan.enable = false;
1205+
config.backlog_scan->enable = false;
11981206
auto & node = *system.add_node (config, flags);
11991207

12001208
nano::keypair key;
@@ -1286,7 +1294,7 @@ TEST (active_elections, activate_inactive)
12861294
nano::test::system system;
12871295
nano::node_flags flags;
12881296
nano::node_config config = system.default_config ();
1289-
config.backlog_scan.enable = false;
1297+
config.backlog_scan->enable = false;
12901298
auto & node = *system.add_node (config, flags);
12911299

12921300
nano::keypair key;
@@ -1399,7 +1407,7 @@ TEST (active_elections, vacancy)
13991407
std::atomic<bool> updated = false;
14001408
nano::test::system system;
14011409
nano::node_config config = system.default_config ();
1402-
config.active_elections.size = 1;
1410+
config.active_elections->size = 1;
14031411
auto & node = *system.add_node (config);
14041412
nano::state_block_builder builder;
14051413
auto send = builder.make_block ()
@@ -1436,15 +1444,15 @@ TEST (active_elections, limit_vote_hinted_elections)
14361444
nano::test::system system;
14371445
nano::node_config config = system.default_config ();
14381446
const int aec_limit = 10;
1439-
config.backlog_scan.enable = false;
1440-
config.optimistic_scheduler.enable = false;
1441-
config.active_elections.size = aec_limit;
1442-
config.active_elections.hinted_limit_percentage = 10; // Should give us a limit of 1 hinted election
1447+
config.backlog_scan->enable = false;
1448+
config.optimistic_scheduler->enable = false;
1449+
config.active_elections->size = aec_limit;
1450+
config.active_elections->hinted_limit_percentage = 10; // Should give us a limit of 1 hinted election
14431451
auto & node = *system.add_node (config);
14441452

14451453
// Setup representatives
14461454
// Enough weight to trigger election hinting but not enough to confirm block on its own
1447-
const auto amount = ((node.online_reps.trended () / 100) * node.config.hinted_scheduler.hinting_threshold_percent) + 1000 * nano::Knano_ratio;
1455+
const auto amount = ((node.online_reps.trended () / 100) * node.config.hinted_scheduler->hinting_threshold_percent) + 1000 * nano::Knano_ratio;
14481456
nano::keypair rep1 = nano::test::setup_rep (system, node, amount / 2);
14491457
nano::keypair rep2 = nano::test::setup_rep (system, node, amount / 2);
14501458

@@ -1502,9 +1510,9 @@ TEST (active_elections, bound_election_winners)
15021510
nano::test::system system;
15031511
nano::node_config config = system.default_config ();
15041512
// Set election winner limit to a low value
1505-
config.active_elections.max_election_winners = 5;
1513+
config.active_elections->max_election_winners = 5;
15061514
// Large batch size would complicate this testcase
1507-
config.cementing_set.batch_size = 1;
1515+
config.cementing_set->batch_size = 1;
15081516
auto & node = *system.add_node (config);
15091517

15101518
// Start elections for a couple of blocks, number of elections is larger than the election winner set limit
@@ -1544,15 +1552,15 @@ TEST (active_elections, broadcast_block_on_activation)
15441552
nano::test::system system;
15451553
nano::node_config config1 = system.default_config ();
15461554
// Deactivates elections on both nodes.
1547-
config1.active_elections.size = 0;
1548-
config1.bootstrap.enable = false;
1549-
config1.priority_scheduler.enable = false;
1550-
config1.optimistic_scheduler.enable = false;
1555+
config1.active_elections->size = 0;
1556+
config1.bootstrap->enable = false;
1557+
config1.priority_scheduler->enable = false;
1558+
config1.optimistic_scheduler->enable = false;
15511559
nano::node_config config2 = system.default_config ();
1552-
config2.active_elections.size = 0;
1553-
config2.bootstrap.enable = false;
1554-
config2.priority_scheduler.enable = false;
1555-
config2.optimistic_scheduler.enable = false;
1560+
config2.active_elections->size = 0;
1561+
config2.bootstrap->enable = false;
1562+
config2.priority_scheduler->enable = false;
1563+
config2.optimistic_scheduler->enable = false;
15561564
nano::node_flags flags;
15571565
// Disables bootstrap listener to make sure the block won't be shared by this channel.
15581566
flags.disable_bootstrap_listener = true;
@@ -1588,7 +1596,7 @@ TEST (active_elections, stale_election)
15881596

15891597
// Configure node with short stale threshold for testing
15901598
nano::node_config node_config = system.default_config ();
1591-
node_config.active_elections.stale_threshold = 2s; // Short threshold for faster testing
1599+
node_config.active_elections->stale_threshold = 2s; // Short threshold for faster testing
15921600

15931601
auto & node = *system.add_node (node_config);
15941602

@@ -1634,7 +1642,7 @@ TEST (active_elections, stale_election_multiple)
16341642

16351643
// Configure node with short stale threshold for testing
16361644
nano::node_config node_config = system.default_config ();
1637-
node_config.active_elections.stale_threshold = 2s; // Short threshold for faster testing
1645+
node_config.active_elections->stale_threshold = 2s; // Short threshold for faster testing
16381646

16391647
auto & node = *system.add_node (node_config);
16401648

@@ -1762,10 +1770,10 @@ TEST (active_elections, cancel_cemented_races)
17621770
nano::node_config config = system.default_config ();
17631771

17641772
// Disable schedulers and backlog scan to have full control
1765-
config.backlog_scan.enable = false;
1766-
config.priority_scheduler.enable = false;
1767-
config.hinted_scheduler.enable = false;
1768-
config.optimistic_scheduler.enable = false;
1773+
config.backlog_scan->enable = false;
1774+
config.priority_scheduler->enable = false;
1775+
config.hinted_scheduler->enable = false;
1776+
config.optimistic_scheduler->enable = false;
17691777

17701778
auto & node = *system.add_node (config);
17711779

@@ -1845,7 +1853,7 @@ TEST (active_elections, cancel_already_cemented)
18451853

18461854
nano::node_config config;
18471855
// Configure checkup interval for faster test execution
1848-
config.active_elections.checkup_interval = 100ms;
1856+
config.active_elections->checkup_interval = 100ms;
18491857

18501858
auto & node = *system.add_node (config);
18511859

nano/core_test/block_processor.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#include <nano/node/bounded_backlog.hpp>
2+
#include <nano/node/backlog_scan.hpp>
13
#include <nano/lib/blockbuilders.hpp>
24
#include <nano/lib/blocks.hpp>
35
#include <nano/lib/stats_enums.hpp>
@@ -122,7 +124,7 @@ TEST (block_processor, add_blocking_overfill)
122124

123125
nano::node_config node_config;
124126
// Queue size 0 guarantees immediate rejection
125-
node_config.block_processor.max_system_queue = 0;
127+
node_config.block_processor->max_system_queue = 0;
126128
auto & node = *system.add_node (node_config);
127129

128130
nano::keypair key;
@@ -200,7 +202,7 @@ TEST (block_processor, add_many_overfill)
200202

201203
nano::node_config node_config;
202204
// Only 4 blocks fit in the system queue, remaining will be dropped
203-
node_config.block_processor.max_system_queue = 4;
205+
node_config.block_processor->max_system_queue = 4;
204206
auto & node = *system.add_node (node_config);
205207

206208
auto latest = nano::dev::genesis->hash ();
@@ -316,11 +318,11 @@ TEST (block_processor, backlog_throttling)
316318
nano::node_config node_config;
317319
// Backlog won't be rolled back, as we want to test the throttling works when backlog is exceeded
318320
node_config.max_backlog = 5;
319-
node_config.backlog_scan.enable = false;
320-
node_config.bounded_backlog.enable = false; // Disable rollbacks
321+
node_config.backlog_scan->enable = false;
322+
node_config.bounded_backlog->enable = false; // Disable rollbacks
321323
// Allow at most 4 blocks per second when throttling
322-
node_config.block_processor.batch_size = 1;
323-
node_config.block_processor.backlog_throttle = 500ms;
324+
node_config.block_processor->batch_size = 1;
325+
node_config.block_processor->backlog_throttle = 500ms;
324326
auto & node = *system.add_node (node_config);
325327

326328
const int howmany_blocks = 2;

0 commit comments

Comments
 (0)