diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index bc9e9135aa..da56b816d8 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -3848,3 +3848,25 @@ TEST (node, port_mapping) auto node = system.add_node (); node->port_mapping.refresh_devices (); } + +TEST (node, process_local_overflow) +{ + nano::test::system system; + auto config = system.default_config (); + config.block_processor.max_system_queue = 0; + auto & node = *system.add_node (config); + + nano::keypair key1; + nano::send_block_builder builder; + auto latest_hash = nano::dev::genesis->hash (); + auto send1 = builder.make_block () + .previous (latest_hash) + .destination (key1.pub) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) + .work (*system.work.generate (latest_hash)) + .build (); + + auto result = node.process_local (send1); + ASSERT_FALSE (result); +} \ No newline at end of file diff --git a/nano/core_test/toml.cpp b/nano/core_test/toml.cpp index 73e93987ba..204e40c13e 100644 --- a/nano/core_test/toml.cpp +++ b/nano/core_test/toml.cpp @@ -160,7 +160,6 @@ TEST (toml, daemon_config_deserialize_defaults) ASSERT_EQ (conf.node.bootstrap_bandwidth_limit, defaults.node.bootstrap_bandwidth_limit); ASSERT_EQ (conf.node.bootstrap_bandwidth_burst_ratio, defaults.node.bootstrap_bandwidth_burst_ratio); ASSERT_EQ (conf.node.block_processor_batch_max_time, defaults.node.block_processor_batch_max_time); - ASSERT_EQ (conf.node.block_process_timeout, defaults.node.block_process_timeout); ASSERT_EQ (conf.node.bootstrap_connections, defaults.node.bootstrap_connections); ASSERT_EQ (conf.node.bootstrap_connections_max, defaults.node.bootstrap_connections_max); ASSERT_EQ (conf.node.bootstrap_initiator_threads, defaults.node.bootstrap_initiator_threads); @@ -404,7 +403,6 @@ TEST (toml, daemon_config_deserialize_no_defaults) bootstrap_bandwidth_limit = 999 bootstrap_bandwidth_burst_ratio = 999.9 block_processor_batch_max_time = 999 - block_process_timeout = 999 bootstrap_connections = 999 bootstrap_connections_max = 999 bootstrap_initiator_threads = 999 @@ -609,7 +607,6 @@ TEST (toml, daemon_config_deserialize_no_defaults) ASSERT_NE (conf.node.bootstrap_bandwidth_limit, defaults.node.bootstrap_bandwidth_limit); ASSERT_NE (conf.node.bootstrap_bandwidth_burst_ratio, defaults.node.bootstrap_bandwidth_burst_ratio); ASSERT_NE (conf.node.block_processor_batch_max_time, defaults.node.block_processor_batch_max_time); - ASSERT_NE (conf.node.block_process_timeout, defaults.node.block_process_timeout); ASSERT_NE (conf.node.bootstrap_connections, defaults.node.bootstrap_connections); ASSERT_NE (conf.node.bootstrap_connections_max, defaults.node.bootstrap_connections_max); ASSERT_NE (conf.node.bootstrap_initiator_threads, defaults.node.bootstrap_initiator_threads); diff --git a/nano/node/blockprocessor.cpp b/nano/node/blockprocessor.cpp index 7fa7ac4e3f..1ee92ae2f4 100644 --- a/nano/node/blockprocessor.cpp +++ b/nano/node/blockprocessor.cpp @@ -158,17 +158,13 @@ std::optional nano::block_processor::add_blocking (std::shar try { - auto status = future.wait_for (node.config.block_process_timeout); - debug_assert (status != std::future_status::deferred); - if (status == std::future_status::ready) - { - return future.get (); - } + future.wait (); + return future.get (); } catch (std::future_error const &) { node.stats.inc (nano::stat::type::blockprocessor, nano::stat::detail::process_blocking_timeout); - node.logger.error (nano::log::type::blockprocessor, "Timeout processing block: {}", block->hash ().to_string ()); + node.logger.error (nano::log::type::blockprocessor, "Block dropped when processing: {}", block->hash ().to_string ()); } return std::nullopt; diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index 387c5b2081..b5c0f9a9e7 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -107,7 +107,6 @@ nano::error nano::node_config::serialize_toml (nano::tomlconfig & toml) const toml.put ("bootstrap_serving_threads", bootstrap_serving_threads, "Number of threads dedicated to serving bootstrap data to other peers. Defaults to half the number of CPU threads, and at least 2.\ntype:uint64"); toml.put ("bootstrap_frontier_request_count", bootstrap_frontier_request_count, "Number frontiers per bootstrap frontier request. Defaults to 1048576.\ntype:uint32,[1024..4294967295]"); toml.put ("block_processor_batch_max_time", block_processor_batch_max_time.count (), "The maximum time the block processor can continuously process blocks for.\ntype:milliseconds"); - toml.put ("block_process_timeout", block_process_timeout.count (), "Time to wait for block processing result.\ntype:seconds"); toml.put ("allow_local_peers", allow_local_peers, "Enable or disable local host peering.\ntype:bool"); toml.put ("vote_minimum", vote_minimum.to_string_dec (), "Local representatives do not vote if the delegated weight is under this threshold. Saves on system resources.\ntype:string,amount,raw"); toml.put ("vote_generator_delay", vote_generator_delay.count (), "Delay before votes are sent to allow for efficient bundling of hashes in votes.\ntype:milliseconds"); @@ -413,10 +412,6 @@ nano::error nano::node_config::deserialize_toml (nano::tomlconfig & toml) toml.get ("block_processor_batch_max_time", block_processor_batch_max_time_l); block_processor_batch_max_time = std::chrono::milliseconds (block_processor_batch_max_time_l); - auto block_process_timeout_l = block_process_timeout.count (); - toml.get ("block_process_timeout", block_process_timeout_l); - block_process_timeout = std::chrono::seconds{ block_process_timeout_l }; - auto unchecked_cutoff_time_l = static_cast (unchecked_cutoff_time.count ()); toml.get ("unchecked_cutoff_time", unchecked_cutoff_time_l); unchecked_cutoff_time = std::chrono::seconds (unchecked_cutoff_time_l); diff --git a/nano/node/nodeconfig.hpp b/nano/node/nodeconfig.hpp index ce744cdfc1..32786d70f5 100644 --- a/nano/node/nodeconfig.hpp +++ b/nano/node/nodeconfig.hpp @@ -99,8 +99,6 @@ class node_config std::string external_address; uint16_t external_port{ 0 }; std::chrono::milliseconds block_processor_batch_max_time{ std::chrono::milliseconds (500) }; - /** Time to wait for block processing result */ - std::chrono::seconds block_process_timeout{ 300 }; std::chrono::seconds unchecked_cutoff_time{ std::chrono::seconds (4 * 60 * 60) }; // 4 hours /** Timeout for initiated async operations */ std::chrono::seconds tcp_io_timeout{ (network_params.network.is_dev_network () && !is_sanitizer_build ()) ? std::chrono::seconds (5) : std::chrono::seconds (15) };