diff --git a/nano/lib/thread_roles.cpp b/nano/lib/thread_roles.cpp index 98dc3b64e3..fbb292f91d 100644 --- a/nano/lib/thread_roles.cpp +++ b/nano/lib/thread_roles.cpp @@ -70,6 +70,9 @@ std::string nano::thread_role::get_string (nano::thread_role::name role) case nano::thread_role::name::bootstrap_worker: thread_role_name_string = "Bootstrap work"; break; + case nano::thread_role::name::wallet_worker: + thread_role_name_string = "Wallet work"; + break; case nano::thread_role::name::request_aggregator: thread_role_name_string = "Req aggregator"; break; diff --git a/nano/lib/thread_roles.hpp b/nano/lib/thread_roles.hpp index b07026ab7a..818c36185b 100644 --- a/nano/lib/thread_roles.hpp +++ b/nano/lib/thread_roles.hpp @@ -28,6 +28,7 @@ enum class name confirmation_height_notifications, worker, bootstrap_worker, + wallet_worker, request_aggregator, state_block_signature_verification, epoch_upgrader, diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 0f8e9abb5e..eb5163897c 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -152,6 +152,7 @@ nano::node::node (std::shared_ptr io_ctx_a, std::filesy stats{ logger, config.stats_config }, workers{ config.background_threads, nano::thread_role::name::worker }, bootstrap_workers{ config.bootstrap_serving_threads, nano::thread_role::name::bootstrap_worker }, + wallet_workers{ 1, nano::thread_role::name::wallet_worker }, flags (flags_a), work (work_a), distributed_work (*this), @@ -479,7 +480,7 @@ nano::node::node (std::shared_ptr io_ctx_a, std::filesy // TODO: Is it neccessary to call this for all blocks? if (block->is_send ()) { - workers.push_task ([this, hash = block->hash (), destination = block->destination ()] () { + wallet_workers.push_task ([this, hash = block->hash (), destination = block->destination ()] () { wallets.receive_confirmed (hash, destination); }); } @@ -572,6 +573,8 @@ std::unique_ptr nano::collect_container_info (no composite->add_component (collect_container_info (node.network, "network")); composite->add_component (node.telemetry.collect_container_info ("telemetry")); composite->add_component (collect_container_info (node.workers, "workers")); + composite->add_component (collect_container_info (node.bootstrap_workers, "bootstrap_workers")); + composite->add_component (collect_container_info (node.wallet_workers, "wallet_workers")); composite->add_component (collect_container_info (node.observers, "observers")); composite->add_component (collect_container_info (node.wallets, "wallets")); composite->add_component (node.vote_processor.collect_container_info ("vote_processor")); @@ -728,6 +731,8 @@ void nano::node::stop () logger.info (nano::log::type::node, "Node stopping..."); + bootstrap_workers.stop (); + wallet_workers.stop (); vote_router.stop (); peer_history.stop (); // Cancels ongoing work generation tasks, which may be blocking other threads diff --git a/nano/node/node.hpp b/nano/node/node.hpp index f63ba5ec47..2cdbe9d6c5 100644 --- a/nano/node/node.hpp +++ b/nano/node/node.hpp @@ -155,6 +155,7 @@ class node final : public std::enable_shared_from_this nano::stats stats; nano::thread_pool workers; nano::thread_pool bootstrap_workers; + nano::thread_pool wallet_workers; nano::node_flags flags; nano::work_pool & work; nano::distributed_work_factory distributed_work;