From ceb6f204e46cfd846db045856daaf1f90643c471 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Tue, 3 Dec 2024 15:14:24 -0600 Subject: [PATCH] GH-570 Add pause_at_block api endpoint --- plugins/producer_api_plugin/producer_api_plugin.cpp | 4 +++- .../include/eosio/producer_plugin/producer_plugin.hpp | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/plugins/producer_api_plugin/producer_api_plugin.cpp b/plugins/producer_api_plugin/producer_api_plugin.cpp index 0439351f04..a6d25c3d8f 100644 --- a/plugins/producer_api_plugin/producer_api_plugin.cpp +++ b/plugins/producer_api_plugin/producer_api_plugin.cpp @@ -119,7 +119,9 @@ void producer_api_plugin::plugin_startup() { app().get_plugin().add_api({ CALL_WITH_400(producer, producer_rw, producer, pause, INVOKE_V_V(producer, pause), 201), - CALL_WITH_400(producer, producer_rw, producer, resume, + CALL_WITH_400(producer, producer_rw, producer, pause_at_block, + INVOKE_V_R(producer, pause_at_block, producer_plugin::pause_at_block_params), 201), + CALL_WITH_400(producer, producer_rw, producer, resume, INVOKE_V_V(producer, resume), 201), CALL_WITH_400(producer, producer_rw, producer, update_runtime_options, INVOKE_V_R(producer, update_runtime_options, producer_plugin::runtime_options), 201), diff --git a/plugins/producer_plugin/include/eosio/producer_plugin/producer_plugin.hpp b/plugins/producer_plugin/include/eosio/producer_plugin/producer_plugin.hpp index ffe586cff7..03302b7c33 100644 --- a/plugins/producer_plugin/include/eosio/producer_plugin/producer_plugin.hpp +++ b/plugins/producer_plugin/include/eosio/producer_plugin/producer_plugin.hpp @@ -83,7 +83,12 @@ class producer_plugin : public appbase::plugin { controller::apply_blocks_result on_incoming_block(); + struct pause_at_block_params { + chain::block_num_type block_num{0}; // block height to pause block evaluation/production + }; + void pause(); + void pause_at_block(const pause_at_block_params& params); void resume(); bool paused() const; void update_runtime_options(const runtime_options& options); @@ -140,6 +145,9 @@ class producer_plugin : public appbase::plugin { void log_failed_transaction(const transaction_id_type& trx_id, const chain::packed_transaction_ptr& packed_trx_ptr, const char* reason) const; + // initiate calls to process_incoming_block to process all queued blocks + void process_blocks(); + // thread-safe, called when a new block is received void received_block(uint32_t block_num, chain::fork_db_add_t fork_db_add_result); @@ -168,3 +176,4 @@ FC_REFLECT(eosio::producer_plugin::get_account_ram_corrections_result, (rows)(mo FC_REFLECT(eosio::producer_plugin::get_unapplied_transactions_params, (lower_bound)(limit)(time_limit_ms)) FC_REFLECT(eosio::producer_plugin::unapplied_trx, (trx_id)(expiration)(trx_type)(first_auth)(first_receiver)(first_action)(total_actions)(billed_cpu_time_us)(size)) FC_REFLECT(eosio::producer_plugin::get_unapplied_transactions_result, (size)(incoming_size)(trxs)(more)) +FC_REFLECT(eosio::producer_plugin::pause_at_block_params, (block_num));