From 0f887e482f8268cba23536c85587ba42cdb62cfb Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Mon, 28 Oct 2019 14:13:06 -0500 Subject: [PATCH 1/9] Use medium priority for sync blocks --- plugins/net_plugin/net_plugin.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/net_plugin/net_plugin.cpp b/plugins/net_plugin/net_plugin.cpp index 46de88e5b2b..0114242a3c4 100644 --- a/plugins/net_plugin/net_plugin.cpp +++ b/plugins/net_plugin/net_plugin.cpp @@ -2808,7 +2808,8 @@ namespace eosio { // called from connection strand void connection::handle_message( const block_id_type& id, signed_block_ptr ptr ) { peer_dlog( this, "received signed_block ${id}", ("id", ptr->block_num() ) ); - app().post(priority::high, [ptr{std::move(ptr)}, id, c = shared_from_this()]() mutable { + auto priority = my_impl->sync_master->syncing_with_peer() ? priority::medium : priority::high; + app().post(priority, [ptr{std::move(ptr)}, id, c = shared_from_this()]() mutable { c->process_signed_block( id, std::move( ptr ) ); }); my_impl->dispatcher->bcast_notice( id ); From ed7910297379e761882a593356507925b22a3b45 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Tue, 29 Oct 2019 10:51:02 -0500 Subject: [PATCH 2/9] Allow priority of api call to be specified at time of registration instead of using hard coded low priority --- plugins/http_plugin/http_plugin.cpp | 11 ++++++----- .../include/eosio/http_plugin/http_plugin.hpp | 6 +++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/plugins/http_plugin/http_plugin.cpp b/plugins/http_plugin/http_plugin.cpp index 0ab7653b7af..fe5bebc29e5 100644 --- a/plugins/http_plugin/http_plugin.cpp +++ b/plugins/http_plugin/http_plugin.cpp @@ -139,7 +139,8 @@ namespace eosio { class http_plugin_impl { public: - map url_handlers; + // key -> priority, url_handler + map> url_handlers; optional listen_endpoint; string access_control_allow_origin; string access_control_allow_headers; @@ -311,11 +312,11 @@ namespace eosio { if( handler_itr != url_handlers.end()) { con->defer_http_response(); bytes_in_flight += body.size(); - app().post( appbase::priority::low, + app().post( handler_itr->second.first, [&ioc = thread_pool->get_executor(), &bytes_in_flight = this->bytes_in_flight, handler_itr, resource{std::move( resource )}, body{std::move( body )}, con]() { try { - handler_itr->second( resource, body, + handler_itr->second.second( resource, body, [&ioc, &bytes_in_flight, con]( int code, fc::variant response_body ) { boost::asio::post( ioc, [response_body{std::move( response_body )}, &bytes_in_flight, con, code]() mutable { std::string json = fc::json::to_string( response_body ); @@ -651,9 +652,9 @@ namespace eosio { } } - void http_plugin::add_handler(const string& url, const url_handler& handler) { + void http_plugin::add_handler(const string& url, const url_handler& handler, int priority) { fc_ilog( logger, "add api url: ${c}", ("c", url) ); - my->url_handlers.insert(std::make_pair(url,handler)); + my->url_handlers.insert(std::make_pair(url,std::make_pair(priority, handler))); } void http_plugin::handle_exception( const char *api_name, const char *call_name, const string& body, url_response_callback cb ) { diff --git a/plugins/http_plugin/include/eosio/http_plugin/http_plugin.hpp b/plugins/http_plugin/include/eosio/http_plugin/http_plugin.hpp index 5c81279fe62..fe567dab1a7 100644 --- a/plugins/http_plugin/include/eosio/http_plugin/http_plugin.hpp +++ b/plugins/http_plugin/include/eosio/http_plugin/http_plugin.hpp @@ -77,10 +77,10 @@ namespace eosio { void plugin_shutdown(); void handle_sighup() override; - void add_handler(const string& url, const url_handler&); - void add_api(const api_description& api) { + void add_handler(const string& url, const url_handler&, int priority = appbase::priority::low); + void add_api(const api_description& api, int priority = appbase::priority::low) { for (const auto& call : api) - add_handler(call.first, call.second); + add_handler(call.first, call.second, priority); } // standard exception handling for api handlers From 4e80a5eeece8384fe309b9028cf8d4beb27c8a4b Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Tue, 29 Oct 2019 10:51:49 -0500 Subject: [PATCH 3/9] Set get_info api call as medium priority since it is useful to get quick response when nodeos is busy --- plugins/chain_api_plugin/chain_api_plugin.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/chain_api_plugin/chain_api_plugin.cpp b/plugins/chain_api_plugin/chain_api_plugin.cpp index 334d560baae..6f7da1068fc 100644 --- a/plugins/chain_api_plugin/chain_api_plugin.cpp +++ b/plugins/chain_api_plugin/chain_api_plugin.cpp @@ -79,7 +79,9 @@ void chain_api_plugin::plugin_startup() { ro_api.set_shorten_abi_errors( !_http_plugin.verbose_errors() ); _http_plugin.add_api({ - CHAIN_RO_CALL(get_info, 200l), + CHAIN_RO_CALL(get_info, 200) + }, appbase::priority::medium); + _http_plugin.add_api({ CHAIN_RO_CALL(get_activated_protocol_features, 200), CHAIN_RO_CALL(get_block, 200), CHAIN_RO_CALL(get_block_header_state, 200), From 7aeeb59ea3c91cb7a483f9ca50fa3a4716cc7af0 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Tue, 29 Oct 2019 11:32:27 -0500 Subject: [PATCH 4/9] Make net_api_plugin and producer_api_pluign api calls medium priority for greater responsiveness --- plugins/net_api_plugin/net_api_plugin.cpp | 2 +- plugins/producer_api_plugin/producer_api_plugin.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/net_api_plugin/net_api_plugin.cpp b/plugins/net_api_plugin/net_api_plugin.cpp index 17d6af921d5..948b79d4187 100644 --- a/plugins/net_api_plugin/net_api_plugin.cpp +++ b/plugins/net_api_plugin/net_api_plugin.cpp @@ -75,7 +75,7 @@ void net_api_plugin::plugin_startup() { INVOKE_R_V(net_mgr, connections), 201), // CALL(net, net_mgr, open, // INVOKE_V_R(net_mgr, open, std::string), 200), - }); + }, appbase::priority::medium); } void net_api_plugin::plugin_initialize(const variables_map& options) { diff --git a/plugins/producer_api_plugin/producer_api_plugin.cpp b/plugins/producer_api_plugin/producer_api_plugin.cpp index bd3feb1e9bb..6c30ee04cfb 100644 --- a/plugins/producer_api_plugin/producer_api_plugin.cpp +++ b/plugins/producer_api_plugin/producer_api_plugin.cpp @@ -124,7 +124,7 @@ void producer_api_plugin::plugin_startup() { producer_plugin::get_supported_protocol_features_params), 201), CALL(producer, producer, get_account_ram_corrections, INVOKE_R_R(producer, get_account_ram_corrections, producer_plugin::get_account_ram_corrections_params), 201), - }); + }, appbase::priority::medium); } void producer_api_plugin::plugin_initialize(const variables_map& options) { From a247020ca3469e371aff4ac053ca95839b4af0ec Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Sat, 22 Feb 2020 14:28:33 -0600 Subject: [PATCH 5/9] Move to appbase with additional priority constants --- libraries/appbase | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/appbase b/libraries/appbase index c00333db208..9b1927e9d0a 160000 --- a/libraries/appbase +++ b/libraries/appbase @@ -1 +1 @@ -Subproject commit c00333db208a70812617c64d41f3d5a78bd5f24e +Subproject commit 9b1927e9d0a5266ada917dbbc59e9307a73b274f From 56a8bb69a8a11b28da099c8b430a42ddde820387 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Sat, 22 Feb 2020 14:38:59 -0600 Subject: [PATCH 6/9] Change default priority for api calls to medium_low --- plugins/http_plugin/include/eosio/http_plugin/http_plugin.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/http_plugin/include/eosio/http_plugin/http_plugin.hpp b/plugins/http_plugin/include/eosio/http_plugin/http_plugin.hpp index 703c54af5fc..515ae6c796a 100644 --- a/plugins/http_plugin/include/eosio/http_plugin/http_plugin.hpp +++ b/plugins/http_plugin/include/eosio/http_plugin/http_plugin.hpp @@ -77,8 +77,8 @@ namespace eosio { void plugin_shutdown(); void handle_sighup() override; - void add_handler(const string& url, const url_handler&, int priority = appbase::priority::low); - void add_api(const api_description& api, int priority = appbase::priority::low) { + void add_handler(const string& url, const url_handler&, int priority = appbase::priority::medium_low); + void add_api(const api_description& api, int priority = appbase::priority::medium_low) { for (const auto& call : api) add_handler(call.first, call.second, priority); } From bd9dbf6caa7d1797c894967b984a0370a8930515 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Sat, 22 Feb 2020 14:39:17 -0600 Subject: [PATCH 7/9] Change to medium priority --- plugins/net_plugin/net_plugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/net_plugin/net_plugin.cpp b/plugins/net_plugin/net_plugin.cpp index 4f61a8b3416..829689363b7 100644 --- a/plugins/net_plugin/net_plugin.cpp +++ b/plugins/net_plugin/net_plugin.cpp @@ -2605,7 +2605,7 @@ namespace eosio { uint32_t peer_lib = msg.last_irreversible_block_num; connection_wptr weak = shared_from_this(); - app().post( priority::low, [peer_lib, chain_plug = my_impl->chain_plug, weak{std::move(weak)}, + app().post( priority::medium, [peer_lib, chain_plug = my_impl->chain_plug, weak{std::move(weak)}, msg_lib_id = msg.last_irreversible_block_id]() { connection_ptr c = weak.lock(); if( !c ) return; From 93bdec4009d226838687c9228c344d4faf4b230a Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Mon, 24 Feb 2020 13:14:50 -0500 Subject: [PATCH 8/9] Revert "Set get_info api call as medium priority since it is useful to get quick response when nodeos is busy" Use default of medium_low for get_info. This reverts commit 828461a2a2fa5fe4afb7b34d28d120c5583a3019. --- plugins/chain_api_plugin/chain_api_plugin.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/plugins/chain_api_plugin/chain_api_plugin.cpp b/plugins/chain_api_plugin/chain_api_plugin.cpp index 6f7da1068fc..334d560baae 100644 --- a/plugins/chain_api_plugin/chain_api_plugin.cpp +++ b/plugins/chain_api_plugin/chain_api_plugin.cpp @@ -79,9 +79,7 @@ void chain_api_plugin::plugin_startup() { ro_api.set_shorten_abi_errors( !_http_plugin.verbose_errors() ); _http_plugin.add_api({ - CHAIN_RO_CALL(get_info, 200) - }, appbase::priority::medium); - _http_plugin.add_api({ + CHAIN_RO_CALL(get_info, 200l), CHAIN_RO_CALL(get_activated_protocol_features, 200), CHAIN_RO_CALL(get_block, 200), CHAIN_RO_CALL(get_block_header_state, 200), From 4dd1490839e44ef6a2d299279c8ed9311a2d96a5 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Mon, 24 Feb 2020 13:15:36 -0500 Subject: [PATCH 9/9] update to latest appbase --- libraries/appbase | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/appbase b/libraries/appbase index 9b1927e9d0a..38683dce826 160000 --- a/libraries/appbase +++ b/libraries/appbase @@ -1 +1 @@ -Subproject commit 9b1927e9d0a5266ada917dbbc59e9307a73b274f +Subproject commit 38683dce826855c95634bc86469262860e8755ad