This commit is contained in:
Piotr Wójcik 2024-11-04 20:36:03 +01:00
commit f14154507e
6 changed files with 22 additions and 16 deletions

View file

@ -145,6 +145,7 @@ enum class detail
retry, retry,
prioritized, prioritized,
pending, pending,
sync,
// processing queue // processing queue
queue, queue,
@ -459,6 +460,7 @@ enum class detail
timestamp_reset, timestamp_reset,
processing_frontiers, processing_frontiers,
frontiers_dropped, frontiers_dropped,
sync_accounts,
prioritize, prioritize,
prioritize_failed, prioritize_failed,
@ -492,6 +494,7 @@ enum class detail
deprioritize, deprioritize,
deprioritize_failed, deprioritize_failed,
sync_dependencies, sync_dependencies,
dependency_synced,
request_blocks, request_blocks,
request_account_info, request_account_info,

View file

@ -106,7 +106,7 @@ std::string nano::thread_role::get_string (nano::thread_role::name role)
case nano::thread_role::name::bootstrap_database_scan: case nano::thread_role::name::bootstrap_database_scan:
thread_role_name_string = "Bootstrap db"; thread_role_name_string = "Bootstrap db";
break; break;
case nano::thread_role::name::bootstrap_dependendy_walker: case nano::thread_role::name::bootstrap_dependency_walker:
thread_role_name_string = "Bootstrap walkr"; thread_role_name_string = "Bootstrap walkr";
break; break;
case nano::thread_role::name::bootstrap_frontier_scan: case nano::thread_role::name::bootstrap_frontier_scan:

View file

@ -41,7 +41,7 @@ enum class name
telemetry, telemetry,
bootstrap, bootstrap,
bootstrap_database_scan, bootstrap_database_scan,
bootstrap_dependendy_walker, bootstrap_dependency_walker,
bootstrap_frontier_scan, bootstrap_frontier_scan,
bootstrap_cleanup, bootstrap_cleanup,
bootstrap_worker, bootstrap_worker,

View file

@ -272,6 +272,8 @@ nano::block_hash nano::bootstrap::account_sets::next_blocking (std::function<boo
void nano::bootstrap::account_sets::sync_dependencies () void nano::bootstrap::account_sets::sync_dependencies ()
{ {
stats.inc (nano::stat::type::bootstrap_account_sets, nano::stat::detail::sync_dependencies);
// Sample all accounts with a known dependency account (> account 0) // Sample all accounts with a known dependency account (> account 0)
auto begin = blocking.get<tag_dependency_account> ().upper_bound (nano::account{ 0 }); auto begin = blocking.get<tag_dependency_account> ().upper_bound (nano::account{ 0 });
auto end = blocking.get<tag_dependency_account> ().end (); auto end = blocking.get<tag_dependency_account> ().end ();
@ -287,7 +289,7 @@ void nano::bootstrap::account_sets::sync_dependencies ()
if (!blocked (entry.dependency_account) && !prioritized (entry.dependency_account)) if (!blocked (entry.dependency_account) && !prioritized (entry.dependency_account))
{ {
stats.inc (nano::stat::type::bootstrap_account_sets, nano::stat::detail::sync_dependencies); stats.inc (nano::stat::type::bootstrap_account_sets, nano::stat::detail::dependency_synced);
priority_set (entry.dependency_account); priority_set (entry.dependency_account);
} }
} }

View file

@ -60,7 +60,7 @@ nano::bootstrap_service::~bootstrap_service ()
debug_assert (!database_thread.joinable ()); debug_assert (!database_thread.joinable ());
debug_assert (!dependencies_thread.joinable ()); debug_assert (!dependencies_thread.joinable ());
debug_assert (!frontiers_thread.joinable ()); debug_assert (!frontiers_thread.joinable ());
debug_assert (!timeout_thread.joinable ()); debug_assert (!cleanup_thread.joinable ());
debug_assert (!workers.alive ()); debug_assert (!workers.alive ());
} }
@ -70,7 +70,7 @@ void nano::bootstrap_service::start ()
debug_assert (!database_thread.joinable ()); debug_assert (!database_thread.joinable ());
debug_assert (!dependencies_thread.joinable ()); debug_assert (!dependencies_thread.joinable ());
debug_assert (!frontiers_thread.joinable ()); debug_assert (!frontiers_thread.joinable ());
debug_assert (!timeout_thread.joinable ()); debug_assert (!cleanup_thread.joinable ());
if (!config.enable) if (!config.enable)
{ {
@ -99,7 +99,7 @@ void nano::bootstrap_service::start ()
if (config.enable_dependency_walker) if (config.enable_dependency_walker)
{ {
dependencies_thread = std::thread ([this] () { dependencies_thread = std::thread ([this] () {
nano::thread_role::set (nano::thread_role::name::bootstrap_dependendy_walker); nano::thread_role::set (nano::thread_role::name::bootstrap_dependency_walker);
run_dependencies (); run_dependencies ();
}); });
} }
@ -112,7 +112,7 @@ void nano::bootstrap_service::start ()
}); });
} }
timeout_thread = std::thread ([this] () { cleanup_thread = std::thread ([this] () {
nano::thread_role::set (nano::thread_role::name::bootstrap_cleanup); nano::thread_role::set (nano::thread_role::name::bootstrap_cleanup);
run_timeouts (); run_timeouts ();
}); });
@ -130,7 +130,7 @@ void nano::bootstrap_service::stop ()
nano::join_or_pass (database_thread); nano::join_or_pass (database_thread);
nano::join_or_pass (dependencies_thread); nano::join_or_pass (dependencies_thread);
nano::join_or_pass (frontiers_thread); nano::join_or_pass (frontiers_thread);
nano::join_or_pass (timeout_thread); nano::join_or_pass (cleanup_thread);
workers.stop (); workers.stop ();
} }
@ -418,7 +418,7 @@ nano::block_hash nano::bootstrap_service::next_blocking ()
debug_assert (!mutex.try_lock ()); debug_assert (!mutex.try_lock ());
auto blocking = accounts.next_blocking ([this] (nano::block_hash const & hash) { auto blocking = accounts.next_blocking ([this] (nano::block_hash const & hash) {
return count_tags (hash, query_source::blocking) == 0; return count_tags (hash, query_source::dependencies) == 0;
}); });
if (blocking.is_zero ()) if (blocking.is_zero ())
{ {
@ -590,7 +590,7 @@ void nano::bootstrap_service::run_database ()
} }
} }
void nano::bootstrap_service::run_one_blocking () void nano::bootstrap_service::run_one_dependency ()
{ {
// No need to wait for blockprocessor, as we are not processing blocks // No need to wait for blockprocessor, as we are not processing blocks
auto channel = wait_channel (); auto channel = wait_channel ();
@ -603,7 +603,7 @@ void nano::bootstrap_service::run_one_blocking ()
{ {
return; return;
} }
request_info (blocking, channel, query_source::blocking); request_info (blocking, channel, query_source::dependencies);
} }
void nano::bootstrap_service::run_dependencies () void nano::bootstrap_service::run_dependencies ()
@ -613,7 +613,7 @@ void nano::bootstrap_service::run_dependencies ()
{ {
lock.unlock (); lock.unlock ();
stats.inc (nano::stat::type::bootstrap, nano::stat::detail::loop_dependencies); stats.inc (nano::stat::type::bootstrap, nano::stat::detail::loop_dependencies);
run_one_blocking (); run_one_dependency ();
lock.lock (); lock.lock ();
} }
} }

View file

@ -76,7 +76,7 @@ public: // Tag
invalid, invalid,
priority, priority,
database, database,
blocking, dependencies,
frontiers, frontiers,
}; };
@ -104,9 +104,9 @@ private:
void run_database (); void run_database ();
void run_one_database (bool should_throttle); void run_one_database (bool should_throttle);
void run_dependencies (); void run_dependencies ();
void run_one_blocking (); void run_one_dependency ();
void run_one_frontier ();
void run_frontiers (); void run_frontiers ();
void run_one_frontier ();
void run_timeouts (); void run_timeouts ();
void cleanup_and_sync (); void cleanup_and_sync ();
@ -194,6 +194,7 @@ private:
// Requests for accounts from database have much lower hitrate and could introduce strain on the network // Requests for accounts from database have much lower hitrate and could introduce strain on the network
// A separate (lower) limiter ensures that we always reserve resources for querying accounts from priority queue // A separate (lower) limiter ensures that we always reserve resources for querying accounts from priority queue
nano::rate_limiter database_limiter; nano::rate_limiter database_limiter;
// Rate limiter for frontier requests
nano::rate_limiter frontiers_limiter; nano::rate_limiter frontiers_limiter;
nano::interval sync_dependencies_interval; nano::interval sync_dependencies_interval;
@ -205,7 +206,7 @@ private:
std::thread database_thread; std::thread database_thread;
std::thread dependencies_thread; std::thread dependencies_thread;
std::thread frontiers_thread; std::thread frontiers_thread;
std::thread timeout_thread; std::thread cleanup_thread;
nano::thread_pool workers; nano::thread_pool workers;
nano::random_generator_mt rng; nano::random_generator_mt rng;