From b6934ae26ffccaf4a2d5504297b439ae00f7abdf Mon Sep 17 00:00:00 2001 From: Wesley Shillingford Date: Wed, 3 Jun 2020 15:33:40 +0100 Subject: [PATCH 1/5] Slow test fixes --- nano/node/nodeconfig.hpp | 2 +- nano/slow_test/node.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nano/node/nodeconfig.hpp b/nano/node/nodeconfig.hpp index 4d0aad0541..e81fd2b8cb 100644 --- a/nano/node/nodeconfig.hpp +++ b/nano/node/nodeconfig.hpp @@ -78,7 +78,7 @@ class node_config nano::ipc::ipc_config ipc_config; std::string external_address; uint16_t external_port{ 0 }; - std::chrono::milliseconds block_processor_batch_max_time{ std::chrono::milliseconds (5000) }; + std::chrono::milliseconds block_processor_batch_max_time{ network_params.network.is_test_network () ? std::chrono::milliseconds (500) : std::chrono::milliseconds (5000) }; 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_test_network () && !is_sanitizer_build) ? std::chrono::seconds (5) : std::chrono::seconds (15) }; diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index b6719dafe9..9dff4dab93 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -931,7 +931,7 @@ TEST (confirmation_height, many_accounts_send_receive_self) node->process_active (receive_blocks[i]); } - system.deadline_set (200s); + system.deadline_set (300s); num_blocks_to_confirm = num_accounts * 4; while (node->stats.count (nano::stat::type::confirmation_height, nano::stat::detail::blocks_confirmed, nano::stat::dir::in) != num_blocks_to_confirm) { From 63060067a9045a93aaa76d5864d12e86f624c730 Mon Sep 17 00:00:00 2001 From: Wesley Shillingford Date: Wed, 3 Jun 2020 17:13:15 +0100 Subject: [PATCH 2/5] Increase a deadline timer inside many_accounts_send_receive_self test --- nano/slow_test/node.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 9dff4dab93..6998d259b8 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -960,7 +960,7 @@ TEST (confirmation_height, many_accounts_send_receive_self) ASSERT_NO_ERROR (system.poll ()); } - system.deadline_set (20s); + system.deadline_set (60s); while (node->active.election_winner_details_size () > 0) { ASSERT_NO_ERROR (system.poll ()); From 5c1107d3a501077aff05bdeddc96bccd0692b26b Mon Sep 17 00:00:00 2001 From: Wesley Shillingford Date: Wed, 3 Jun 2020 17:15:12 +0100 Subject: [PATCH 3/5] Inserting to wallet should be unnecessary --- nano/slow_test/node.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 6998d259b8..9cc1a1147f 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -889,7 +889,6 @@ TEST (confirmation_height, many_accounts_send_receive_self) { nano::keypair key; keys.emplace_back (key); - system.wallet (0)->insert_adhoc (key.prv); nano::send_block send (latest_genesis, key.pub, nano::genesis_amount - 1 - i, nano::test_genesis_key.prv, nano::test_genesis_key.pub, *system.work.generate (latest_genesis)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); From d1be72a491f6edc58eaec7fd30fb25150ab035a4 Mon Sep 17 00:00:00 2001 From: Wesley Shillingford Date: Thu, 4 Jun 2020 09:28:57 +0100 Subject: [PATCH 4/5] Fix node_telemetry.under_load test slowdown from sequential elections --- nano/slow_test/node.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 9cc1a1147f..a5b86074ac 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -1319,11 +1319,13 @@ TEST (node_telemetry, under_load) nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; - auto node = system.add_node (node_config); - node_config.peering_port = nano::get_available_port (); nano::node_flags node_flags; - node_flags.disable_ongoing_telemetry_requests = true; + node_flags.disable_initial_telemetry_requests = true; + auto node = system.add_node (node_config, node_flags); + node->confirmation_height_processor.pause (); + node_config.peering_port = nano::get_available_port (); auto node1 = system.add_node (node_config, node_flags); + node1->confirmation_height_processor.pause (); nano::genesis genesis; nano::keypair key; nano::keypair key1; @@ -1351,7 +1353,7 @@ TEST (node_telemetry, under_load) std::thread thread1 (thread_func, nano::test_genesis_key, latest_genesis, nano::genesis_amount - num_blocks); std::thread thread2 (thread_func, key, latest_key, num_blocks); - ASSERT_TIMELY (200s, node1->ledger.cache.block_count == num_blocks * 2 + 3); + ASSERT_TIMELY (400s, node1->ledger.cache.block_count == num_blocks * 2 + 3); thread1.join (); thread2.join (); From 77608546fc634a783e7947e6735933e907864dd4 Mon Sep 17 00:00:00 2001 From: Wesley Shillingford Date: Thu, 4 Jun 2020 14:20:36 +0100 Subject: [PATCH 5/5] Fix write_database_queue stopping bug (thanks Gui for investigation) --- nano/node/node.cpp | 1 - nano/node/write_database_queue.cpp | 11 +---------- nano/node/write_database_queue.hpp | 4 ---- nano/slow_test/node.cpp | 4 +--- 4 files changed, 2 insertions(+), 18 deletions(-) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 4e30364e2b..0dad216a41 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -670,7 +670,6 @@ void nano::node::stop () if (!stopped.exchange (true)) { logger.always_log ("Node stopping"); - write_database_queue.stop (); // Cancels ongoing work generation tasks, which may be blocking other threads // No tasks may wait for work generation in I/O threads, or termination signal capturing will be unable to call node::stop() distributed_work.stop (); diff --git a/nano/node/write_database_queue.cpp b/nano/node/write_database_queue.cpp index 16ecc0afaf..3c652c8b0c 100644 --- a/nano/node/write_database_queue.cpp +++ b/nano/node/write_database_queue.cpp @@ -70,7 +70,7 @@ nano::write_guard nano::write_database_queue::wait (nano::writer writer) queue.push_back (writer); } - while (!stopped && queue.front () != writer) + while (queue.front () != writer) { cv.wait (lk); } @@ -111,12 +111,3 @@ nano::write_guard nano::write_database_queue::pop () { return write_guard (guard_finish_callback); } - -void nano::write_database_queue::stop () -{ - { - nano::lock_guard guard (mutex); - stopped = true; - } - cv.notify_all (); -} diff --git a/nano/node/write_database_queue.hpp b/nano/node/write_database_queue.hpp index 15093c85b8..ab3954923d 100644 --- a/nano/node/write_database_queue.hpp +++ b/nano/node/write_database_queue.hpp @@ -50,14 +50,10 @@ class write_database_queue final /** Doesn't actually pop anything until the returned write_guard is out of scope */ write_guard pop (); - /** This will release anything which is being blocked by the wait function */ - void stop (); - private: std::deque queue; std::mutex mutex; nano::condition_variable cv; std::function guard_finish_callback; - bool stopped{ false }; }; } diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index a5b86074ac..15a9ba7435 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -1322,10 +1322,8 @@ TEST (node_telemetry, under_load) nano::node_flags node_flags; node_flags.disable_initial_telemetry_requests = true; auto node = system.add_node (node_config, node_flags); - node->confirmation_height_processor.pause (); node_config.peering_port = nano::get_available_port (); auto node1 = system.add_node (node_config, node_flags); - node1->confirmation_height_processor.pause (); nano::genesis genesis; nano::keypair key; nano::keypair key1; @@ -1353,7 +1351,7 @@ TEST (node_telemetry, under_load) std::thread thread1 (thread_func, nano::test_genesis_key, latest_genesis, nano::genesis_amount - num_blocks); std::thread thread2 (thread_func, key, latest_key, num_blocks); - ASSERT_TIMELY (400s, node1->ledger.cache.block_count == num_blocks * 2 + 3); + ASSERT_TIMELY (200s, node1->ledger.cache.block_count == num_blocks * 2 + 3); thread1.join (); thread2.join ();