Revert coroutine changes for core & rpc_test (#3081)
* Revert coroutine changes for core & rpc_test * Fix merge
This commit is contained in:
parent
97970e87b2
commit
8ce76120fe
9 changed files with 65 additions and 90 deletions
|
|
@ -347,16 +347,8 @@ set(Boost_USE_MULTITHREADED ON)
|
|||
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules")
|
||||
|
||||
find_package(
|
||||
Boost 1.69.0 REQUIRED
|
||||
COMPONENTS coroutine
|
||||
context
|
||||
filesystem
|
||||
log
|
||||
log_setup
|
||||
thread
|
||||
program_options
|
||||
system)
|
||||
find_package(Boost 1.69.0 REQUIRED COMPONENTS filesystem log log_setup thread
|
||||
program_options system)
|
||||
|
||||
# RocksDB
|
||||
include_directories(rocksdb/include)
|
||||
|
|
@ -549,6 +541,7 @@ if(NANO_FUZZER_TEST)
|
|||
endif()
|
||||
|
||||
if(NANO_TEST OR RAIBLOCKS_TEST)
|
||||
find_package(Boost 1.69.0 REQUIRED COMPONENTS coroutine context)
|
||||
if(WIN32)
|
||||
if(MSVC_VERSION)
|
||||
if(MSVC_VERSION GREATER_EQUAL 1910)
|
||||
|
|
|
|||
0
ci/cmake-format-all.sh
Normal file → Executable file
0
ci/cmake-format-all.sh
Normal file → Executable file
|
|
@ -7,4 +7,5 @@ target_link_libraries(
|
|||
test_common
|
||||
gtest
|
||||
Boost::boost
|
||||
Boost::coroutine)
|
||||
Boost::coroutine
|
||||
Boost::context)
|
||||
|
|
|
|||
|
|
@ -152,8 +152,6 @@ target_link_libraries(
|
|||
libminiupnpc-static
|
||||
argon2
|
||||
lmdb
|
||||
Boost::coroutine
|
||||
Boost::context
|
||||
Boost::filesystem
|
||||
Boost::log_setup
|
||||
Boost::log
|
||||
|
|
|
|||
|
|
@ -22,10 +22,7 @@ publish_filter (256 * 1024),
|
|||
udp_channels (node_a, port_a),
|
||||
tcp_channels (node_a),
|
||||
port (port_a),
|
||||
disconnect_observer ([]() {}),
|
||||
cleanup_timer{ node_a.io_ctx },
|
||||
cookie_timer{ node_a.io_ctx },
|
||||
keepalive_timer{ node_a.io_ctx }
|
||||
disconnect_observer ([]() {})
|
||||
{
|
||||
boost::thread::attributes attrs;
|
||||
nano::thread_attributes::set (attrs);
|
||||
|
|
@ -136,9 +133,6 @@ void nano::network::stop ()
|
|||
{
|
||||
thread.join ();
|
||||
}
|
||||
cleanup_timer.cancel ();
|
||||
cookie_timer.cancel ();
|
||||
keepalive_timer.cancel ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -737,47 +731,38 @@ void nano::network::cleanup (std::chrono::steady_clock::time_point const & cutof
|
|||
|
||||
void nano::network::ongoing_cleanup ()
|
||||
{
|
||||
node.spawn (
|
||||
[this](boost::asio::yield_context yield) {
|
||||
boost::system::error_code ec;
|
||||
while (!stopped && !ec)
|
||||
cleanup (std::chrono::steady_clock::now () - node.network_params.node.cutoff);
|
||||
std::weak_ptr<nano::node> node_w (node.shared ());
|
||||
node.workers.add_timed_task (std::chrono::steady_clock::now () + node.network_params.node.period, [node_w]() {
|
||||
if (auto node_l = node_w.lock ())
|
||||
{
|
||||
cleanup (std::chrono::steady_clock::now () - node.network_params.node.cutoff);
|
||||
cleanup_timer.expires_from_now (node.network_params.node.period);
|
||||
cleanup_timer.async_wait (yield[ec]);
|
||||
node_l->network.ongoing_cleanup ();
|
||||
}
|
||||
debug_assert (stopped || ec == boost::asio::error::operation_aborted);
|
||||
});
|
||||
}
|
||||
|
||||
void nano::network::ongoing_syn_cookie_cleanup ()
|
||||
{
|
||||
node.spawn (
|
||||
[this](boost::asio::yield_context yield) {
|
||||
boost::system::error_code ec;
|
||||
while (!stopped && !ec)
|
||||
syn_cookies.purge (std::chrono::steady_clock::now () - nano::transport::syn_cookie_cutoff);
|
||||
std::weak_ptr<nano::node> node_w (node.shared ());
|
||||
node.workers.add_timed_task (std::chrono::steady_clock::now () + (nano::transport::syn_cookie_cutoff * 2), [node_w]() {
|
||||
if (auto node_l = node_w.lock ())
|
||||
{
|
||||
this->syn_cookies.purge (std::chrono::steady_clock::now () - nano::transport::syn_cookie_cutoff);
|
||||
cookie_timer.expires_from_now (nano::transport::syn_cookie_cutoff * 2);
|
||||
cookie_timer.async_wait (yield[ec]);
|
||||
node_l->network.ongoing_syn_cookie_cleanup ();
|
||||
}
|
||||
debug_assert (stopped || ec == boost::asio::error::operation_aborted);
|
||||
});
|
||||
}
|
||||
|
||||
void nano::network::ongoing_keepalive ()
|
||||
{
|
||||
node.spawn (
|
||||
[this](boost::asio::yield_context yield) {
|
||||
boost::system::error_code ec;
|
||||
while (!stopped && !ec)
|
||||
flood_keepalive (0.75f);
|
||||
flood_keepalive_self (0.25f);
|
||||
std::weak_ptr<nano::node> node_w (node.shared ());
|
||||
node.workers.add_timed_task (std::chrono::steady_clock::now () + node.network_params.node.half_period, [node_w]() {
|
||||
if (auto node_l = node_w.lock ())
|
||||
{
|
||||
flood_keepalive (0.75f);
|
||||
flood_keepalive_self (0.25f);
|
||||
keepalive_timer.expires_from_now (node.network_params.node.half_period);
|
||||
keepalive_timer.async_wait (yield[ec]);
|
||||
node_l->network.ongoing_keepalive ();
|
||||
}
|
||||
debug_assert (stopped || ec == boost::asio::error::operation_aborted);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -195,9 +195,6 @@ public:
|
|||
// Called when a new channel is observed
|
||||
std::function<void(std::shared_ptr<nano::transport::channel>)> channel_observer;
|
||||
std::atomic<bool> stopped{ false };
|
||||
boost::asio::steady_timer cleanup_timer;
|
||||
boost::asio::steady_timer cookie_timer;
|
||||
boost::asio::steady_timer keepalive_timer;
|
||||
static unsigned const broadcast_interval_ms = 10;
|
||||
static size_t const buffer_size = 512;
|
||||
static size_t const confirm_req_hashes_max = 7;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
#include <nano/boost/asio/spawn.hpp>
|
||||
#include <nano/lib/config.hpp>
|
||||
#include <nano/lib/stats.hpp>
|
||||
#include <nano/lib/work.hpp>
|
||||
|
|
@ -94,12 +93,6 @@ public:
|
|||
{
|
||||
io_ctx.post (action_a);
|
||||
}
|
||||
template <typename... Params>
|
||||
void spawn (Params... args)
|
||||
{
|
||||
boost::coroutines::attributes attributes{ boost::coroutines::stack_allocator::traits_type::default_size () * (is_sanitizer_build ? 2 : 1) };
|
||||
boost::asio::spawn (io_ctx, std::forward<Params> (args)..., attributes);
|
||||
}
|
||||
bool copy_with_compaction (boost::filesystem::path const &);
|
||||
void keepalive (std::string const &, uint16_t);
|
||||
void start ();
|
||||
|
|
|
|||
|
|
@ -1,13 +1,6 @@
|
|||
add_executable(rpc_test entry.cpp rpc.cpp)
|
||||
|
||||
target_link_libraries(
|
||||
rpc_test
|
||||
node
|
||||
secure
|
||||
rpc
|
||||
test_common
|
||||
gtest
|
||||
Boost::coroutine)
|
||||
target_link_libraries(rpc_test node secure rpc test_common gtest)
|
||||
|
||||
target_compile_definitions(
|
||||
rpc_test
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
#include <nano/boost/asio/spawn.hpp>
|
||||
#include <nano/boost/beast/core/flat_buffer.hpp>
|
||||
#include <nano/boost/beast/http.hpp>
|
||||
#include <nano/lib/rpcconfig.hpp>
|
||||
|
|
@ -27,26 +26,23 @@ class test_response
|
|||
{
|
||||
public:
|
||||
test_response (boost::property_tree::ptree const & request_a, boost::asio::io_context & io_ctx_a) :
|
||||
request (request_a)
|
||||
request (request_a),
|
||||
sock (io_ctx_a)
|
||||
{
|
||||
}
|
||||
|
||||
test_response (boost::property_tree::ptree const & request_a, uint16_t port_a, boost::asio::io_context & io_ctx_a) :
|
||||
request (request_a)
|
||||
request (request_a),
|
||||
sock (io_ctx_a)
|
||||
{
|
||||
run (port_a, io_ctx_a);
|
||||
run (port_a);
|
||||
}
|
||||
|
||||
void run (uint16_t port_a, boost::asio::io_context & io_ctx_a)
|
||||
void run (uint16_t port_a)
|
||||
{
|
||||
boost::asio::spawn (io_ctx_a, [this, &io_ctx_a, port_a](boost::asio::yield_context yield) {
|
||||
boost::asio::ip::tcp::socket sock (io_ctx_a);
|
||||
boost::beast::flat_buffer sb;
|
||||
boost::beast::http::request<boost::beast::http::string_body> req;
|
||||
|
||||
try
|
||||
sock.async_connect (nano::tcp_endpoint (boost::asio::ip::address_v6::loopback (), port_a), [this](boost::system::error_code const & ec) {
|
||||
if (!ec)
|
||||
{
|
||||
sock.async_connect (nano::tcp_endpoint (boost::asio::ip::address_v6::loopback (), port_a), yield);
|
||||
std::stringstream ostream;
|
||||
boost::property_tree::write_json (ostream, request);
|
||||
req.method (boost::beast::http::verb::post);
|
||||
|
|
@ -55,27 +51,46 @@ public:
|
|||
ostream.flush ();
|
||||
req.body () = ostream.str ();
|
||||
req.prepare_payload ();
|
||||
boost::beast::http::async_write (sock, req, yield);
|
||||
boost::beast::http::async_read (sock, sb, resp, yield);
|
||||
std::stringstream body (resp.body ());
|
||||
try
|
||||
{
|
||||
boost::property_tree::read_json (body, json);
|
||||
status = 200;
|
||||
}
|
||||
catch (std::exception const &)
|
||||
{
|
||||
status = 400;
|
||||
}
|
||||
boost::beast::http::async_write (sock, req, [this](boost::system::error_code const & ec, size_t bytes_transferred) {
|
||||
if (!ec)
|
||||
{
|
||||
boost::beast::http::async_read (sock, sb, resp, [this](boost::system::error_code const & ec, size_t bytes_transferred) {
|
||||
if (!ec)
|
||||
{
|
||||
std::stringstream body (resp.body ());
|
||||
try
|
||||
{
|
||||
boost::property_tree::read_json (body, json);
|
||||
status = 200;
|
||||
}
|
||||
catch (std::exception &)
|
||||
{
|
||||
status = 500;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
status = 400;
|
||||
}
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
status = 600;
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (boost::system::error_code const &)
|
||||
else
|
||||
{
|
||||
status = 400;
|
||||
}
|
||||
});
|
||||
}
|
||||
boost::property_tree::ptree const & request;
|
||||
boost::asio::ip::tcp::socket sock;
|
||||
boost::property_tree::ptree json;
|
||||
boost::beast::flat_buffer sb;
|
||||
boost::beast::http::request<boost::beast::http::string_body> req;
|
||||
boost::beast::http::response<boost::beast::http::string_body> resp;
|
||||
std::atomic<int> status{ 0 };
|
||||
};
|
||||
|
|
@ -7259,8 +7274,8 @@ TEST (rpc, simultaneous_calls)
|
|||
std::atomic<int> count{ num };
|
||||
for (int i = 0; i < num; ++i)
|
||||
{
|
||||
std::thread ([&test_responses, &promise, &count, i, port = rpc.config.port, &io_ctx = system.io_ctx]() {
|
||||
test_responses[i]->run (port, io_ctx);
|
||||
std::thread ([&test_responses, &promise, &count, i, port = rpc.config.port]() {
|
||||
test_responses[i]->run (port);
|
||||
if (--count == 0)
|
||||
{
|
||||
promise.set_value ();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue