do not emit signed_block_header and block_num; use a single block_signal_params type

This commit is contained in:
Lin Huang
2023-12-18 13:34:46 -05:00
parent 7a018f6a51
commit 7c4ca8a5df
17 changed files with 92 additions and 88 deletions
+9 -9
View File
@@ -342,9 +342,9 @@ struct controller_impl {
set_activation_handler<builtin_protocol_feature_t::bls_primitives>();
set_activation_handler<builtin_protocol_feature_t::disable_deferred_trxs_stage_2>();
self.irreversible_block.connect([this](std::tuple<const signed_block_ptr&, const block_id_type&, uint32_t> t) {
const auto& [ block, id, block_num ] = t;
wasmif.current_lib(block_num);
self.irreversible_block.connect([this](block_signal_params t) {
const auto& [ block, id] = t;
wasmif.current_lib(block->block_num());
});
@@ -449,7 +449,7 @@ struct controller_impl {
apply_block( br, *bitr, controller::block_status::complete, trx_meta_cache_lookup{} );
}
emit( self.irreversible_block, std::tie((*bitr)->block, (*bitr)->id, (*bitr)->block_num) );
emit( self.irreversible_block, std::tie((*bitr)->block, (*bitr)->id) );
// blog.append could fail due to failures like running out of space.
// Do it before commit so that in case it throws, DB can be rolled back.
@@ -1951,7 +1951,7 @@ struct controller_impl {
if( s == controller::block_status::incomplete ) {
fork_db.add( bsp );
fork_db.mark_valid( bsp );
emit( self.accepted_block_header, std::tie(bsp->block, bsp->id, bsp->header, bsp->block_num) );
emit( self.accepted_block_header, std::tie(bsp->block, bsp->id) );
EOS_ASSERT( bsp == fork_db.head(), fork_database_exception, "committed block did not become the new head in fork database");
} else if (s != controller::block_status::irreversible) {
fork_db.mark_valid( bsp );
@@ -1963,7 +1963,7 @@ struct controller_impl {
dm_logger->on_accepted_block(bsp);
}
emit( self.accepted_block, std::tie(bsp->block, bsp->id, bsp->header, bsp->block_num) );
emit( self.accepted_block, std::tie(bsp->block, bsp->id) );
if( s == controller::block_status::incomplete ) {
log_irreversible();
@@ -2265,7 +2265,7 @@ struct controller_impl {
trusted_producer_light_validation = true;
};
emit( self.accepted_block_header, std::tie(bsp->block, bsp->id, bsp->header, bsp->block_num) );
emit( self.accepted_block_header, std::tie(bsp->block, bsp->id) );
if( read_mode != db_read_mode::IRREVERSIBLE ) {
maybe_switch_forks( br, fork_db.pending_head(), s, forked_branch_cb, trx_lookup );
@@ -2309,7 +2309,7 @@ struct controller_impl {
fork_db.add( bsp, true );
}
emit( self.accepted_block_header, std::tie(bsp->block, bsp->id, bsp->header, bsp->block_num) );
emit( self.accepted_block_header, std::tie(bsp->block, bsp->id) );
controller::block_report br;
if( s == controller::block_status::irreversible ) {
@@ -2317,7 +2317,7 @@ struct controller_impl {
// On replay, log_irreversible is not called and so no irreversible_block signal is emitted.
// So emit it explicitly here.
emit( self.irreversible_block, std::tie(bsp->block, bsp->id, bsp->block_num) );
emit( self.irreversible_block, std::tie(bsp->block, bsp->id) );
if (!self.skip_db_sessions(s)) {
db.commit(bsp->block_num);
@@ -44,6 +44,8 @@ namespace eosio { namespace chain {
// lookup transaction_metadata via supplied function to avoid re-creation
using trx_meta_cache_lookup = std::function<transaction_metadata_ptr( const transaction_id_type&)>;
using block_signal_params = std::tuple<const signed_block_ptr&, const block_id_type&>;
class fork_database;
enum class db_read_mode {
@@ -326,10 +328,10 @@ namespace eosio { namespace chain {
static std::optional<uint64_t> convert_exception_to_error_code( const fc::exception& e );
signal<void(uint32_t)> block_start;
signal<void(std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t>)> accepted_block_header;
signal<void(std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t>)> accepted_block;
signal<void(std::tuple<const signed_block_ptr&, const block_id_type&, uint32_t>)> irreversible_block;
signal<void(uint32_t)> block_start;
signal<void(block_signal_params)> accepted_block_header;
signal<void(block_signal_params)> accepted_block;
signal<void(block_signal_params)> irreversible_block;
signal<void(const transaction_metadata_ptr&)> accepted_transaction;
signal<void(std::tuple<const transaction_trace_ptr&, const packed_transaction_ptr&>)> applied_transaction;
+2 -2
View File
@@ -321,8 +321,8 @@ namespace eosio { namespace testing {
control->add_indices();
if (lambda) lambda();
chain_transactions.clear();
control->accepted_block.connect([this]( std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t ){
const auto& [ block, id, header, block_num ] = t;
control->accepted_block.connect([this]( block_signal_params t ){
const auto& [ block, id ] = t;
FC_ASSERT( block );
for( auto receipt : block->transactions ) {
if( std::holds_alternative<packed_transaction>(receipt.trx) ) {
@@ -15,9 +15,9 @@ namespace eosio::chain::plugin_interface {
namespace channels {
using rejected_block = channel_decl<struct rejected_block_tag, signed_block_ptr>;
using accepted_block_header = channel_decl<struct accepted_block_header_tag, std::tuple<signed_block_ptr, block_id_type, signed_block_header, uint32_t>>;
using accepted_block = channel_decl<struct accepted_block_tag, std::tuple<signed_block_ptr, block_id_type, signed_block_header, uint32_t>>;
using irreversible_block = channel_decl<struct irreversible_block_tag, std::tuple<signed_block_ptr, block_id_type, uint32_t>>;
using accepted_block_header = channel_decl<struct accepted_block_header_tag, block_signal_params>;
using accepted_block = channel_decl<struct accepted_block_tag, block_signal_params>;
using irreversible_block = channel_decl<struct irreversible_block_tag,block_signal_params>;
using applied_transaction = channel_decl<struct applied_transaction_tag, transaction_trace_ptr>;
}
+8 -8
View File
@@ -1014,18 +1014,18 @@ void chain_plugin_impl::plugin_initialize(const variables_map& options) {
// relay signals to channels
accepted_block_header_connection = chain->accepted_block_header.connect(
[this]( std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t ) {
[this]( block_signal_params t ) {
accepted_block_header_channel.publish( priority::medium, t );
} );
accepted_block_connection = chain->accepted_block.connect( [this]( std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t ) {
const auto& [ block, id, header, block_num ] = t;
accepted_block_connection = chain->accepted_block.connect( [this]( block_signal_params t ) {
const auto& [ block, id ] = t;
if (_account_query_db) {
_account_query_db->commit_block(block, header, block_num);
_account_query_db->commit_block(block, static_cast<signed_block_header>(*block), block->block_num());
}
if (_trx_retry_db) {
_trx_retry_db->on_accepted_block(block_num);
_trx_retry_db->on_accepted_block(block->block_num());
}
if (_trx_finality_status_processing) {
@@ -1035,11 +1035,11 @@ void chain_plugin_impl::plugin_initialize(const variables_map& options) {
accepted_block_channel.publish( priority::high, t );
} );
irreversible_block_connection = chain->irreversible_block.connect( [this]( std::tuple<const signed_block_ptr&, const block_id_type&, uint32_t> t ) {
const auto& [ block, id, block_num ] = t;
irreversible_block_connection = chain->irreversible_block.connect( [this]( block_signal_params t ) {
const auto& [ block, id ] = t;
if (_trx_retry_db) {
_trx_retry_db->on_irreversible_block(block, block_num);
_trx_retry_db->on_irreversible_block(block, block->block_num());
}
if (_trx_finality_status_processing) {
@@ -37,9 +37,9 @@ BOOST_FIXTURE_TEST_CASE(newaccount_test, validating_tester) { try {
auto aq_db = account_query_db(*control);
//link aq_db to the `accepted_block` signal on the controller
auto c2 = control->accepted_block.connect([&](std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t) {
const auto& [ block, id, header, block_num ] = t;
aq_db.commit_block( block, header, block_num );
auto c2 = control->accepted_block.connect([&](block_signal_params t) {
const auto& [ block, id ] = t;
aq_db.commit_block( block, static_cast<signed_block_header>(*block), block->block_num() );
});
produce_blocks(10);
@@ -63,9 +63,9 @@ BOOST_FIXTURE_TEST_CASE(updateauth_test, validating_tester) { try {
auto aq_db = account_query_db(*control);
//link aq_db to the `accepted_block` signal on the controller
auto c = control->accepted_block.connect([&](std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t) {
const auto& [ block, id, header, block_num ] = t;
aq_db.commit_block( block, header, block_num );
auto c = control->accepted_block.connect([&](block_signal_params t) {
const auto& [ block, id ] = t;
aq_db.commit_block( block, static_cast<signed_block_header>(*block), block->block_num() );
});
produce_blocks(10);
@@ -98,9 +98,9 @@ BOOST_FIXTURE_TEST_CASE(updateauth_test_multi_threaded, validating_tester) { try
auto aq_db = account_query_db(*control);
//link aq_db to the `accepted_block` signal on the controller
auto c = control->accepted_block.connect([&](std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t) {
const auto& [ block, id, header, block_num ] = t;
aq_db.commit_block( block, header, block_num );
auto c = control->accepted_block.connect([&](block_signal_params t) {
const auto& [ block, id ] = t;
aq_db.commit_block( block, static_cast<signed_block_header>(*block), block->block_num() );
});
produce_blocks(10);
@@ -151,9 +151,9 @@ BOOST_AUTO_TEST_CASE(future_fork_test) { try {
auto aq_db = account_query_db(*node_a.control);
//link aq_db to the `accepted_block` signal on the controller
auto c = node_a.control->accepted_block.connect([&](std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t) {
const auto& [ block, id, header, block_num ] = t;
aq_db.commit_block( block, header, block_num );
auto c = node_a.control->accepted_block.connect([&](block_signal_params t) {
const auto& [ block, id ] = t;
aq_db.commit_block( block, static_cast<signed_block_header>(*block), block->block_num() );
});
// create 10 blocks synced
@@ -199,9 +199,9 @@ BOOST_AUTO_TEST_CASE(fork_test) { try {
auto aq_db = account_query_db(*node_a.control);
//link aq_db to the `accepted_block` signal on the controller
auto c = node_a.control->accepted_block.connect([&](std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t) {
const auto& [ block, id, header, block_num ] = t;
aq_db.commit_block( block, header, block_num );
auto c = node_a.control->accepted_block.connect([&](block_signal_params t) {
const auto& [ block, id ] = t;
aq_db.commit_block( block, static_cast<signed_block_header>(*block), block->block_num() );
});
// create 10 blocks synced
+7 -7
View File
@@ -4284,17 +4284,17 @@ namespace eosio {
{
chain::controller& cc = chain_plug->chain();
cc.accepted_block_header.connect( [my = shared_from_this()]( std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t ) {
const auto& [ block, id, header, block_num ] = t;
my->on_accepted_block_header( block, id, block_num );
cc.accepted_block_header.connect( [my = shared_from_this()]( block_signal_params t ) {
const auto& [ block, id ] = t;
my->on_accepted_block_header( block, id, block->block_num() );
} );
cc.accepted_block.connect( [my = shared_from_this()]( std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t ) {
cc.accepted_block.connect( [my = shared_from_this()]( block_signal_params t ) {
my->on_accepted_block();
} );
cc.irreversible_block.connect( [my = shared_from_this()]( std::tuple<const signed_block_ptr&, const block_id_type&, uint32_t> t ) {
const auto& [ block, id, block_num ] = t;
my->on_irreversible_block( id, block_num );
cc.irreversible_block.connect( [my = shared_from_this()]( block_signal_params t ) {
const auto& [ block, id ] = t;
my->on_irreversible_block( id, block->block_num() );
} );
}
+7 -7
View File
@@ -1329,16 +1329,16 @@ void producer_plugin_impl::plugin_startup() {
EOS_ASSERT(_producers.empty() || chain_plug->accept_transactions(), plugin_config_exception,
"node cannot have any producer-name configured because no block production is possible with no [api|p2p]-accepted-transactions");
_accepted_block_connection.emplace(chain.accepted_block.connect([this](std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t) {
const auto& [ block, id, header, block_num ] = t;
_accepted_block_connection.emplace(chain.accepted_block.connect([this](block_signal_params t) {
const auto& [ block, id ] = t;
on_block(block);
}));
_accepted_block_header_connection.emplace(chain.accepted_block_header.connect([this](std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t) {
const auto& [ block, id, header, block_num ] = t;
on_block_header(header.producer, block_num, block->timestamp);
_accepted_block_header_connection.emplace(chain.accepted_block_header.connect([this](block_signal_params t) {
const auto& [ block, id ] = t;
on_block_header(static_cast<signed_block_header>(*block).producer, block->block_num(), block->timestamp);
}));
_irreversible_block_connection.emplace(chain.irreversible_block.connect([this](std::tuple<const signed_block_ptr&, const block_id_type&, uint32_t> t) {
const auto& [ block, id, block_num ] = t;
_irreversible_block_connection.emplace(chain.irreversible_block.connect([this](block_signal_params t) {
const auto& [ block, id ] = t;
on_irreversible_block(block);
}));
@@ -129,8 +129,8 @@ BOOST_AUTO_TEST_CASE(producer) {
std::deque<signed_block_ptr> all_blocks;
std::promise<void> empty_blocks_promise;
std::future<void> empty_blocks_fut = empty_blocks_promise.get_future();
auto ab = chain_plug->chain().accepted_block.connect( [&](std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t) {
const auto& [ block, id, header, block_num ] = t;
auto ab = chain_plug->chain().accepted_block.connect( [&](chain::block_signal_params t) {
const auto& [ block, id ] = t;
static int num_empty = std::numeric_limits<int>::max();
all_blocks.push_back( block );
if( block->transactions.empty() ) {
@@ -329,9 +329,9 @@ void state_history_plugin_impl::plugin_initialize(const variables_map& options)
on_applied_transaction(std::get<0>(t), std::get<1>(t));
}));
accepted_block_connection.emplace(
chain.accepted_block.connect([&](std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t) {
const auto& [ block, id, header, block_num ] = t;
on_accepted_block(block, id, header, block_num);
chain.accepted_block.connect([&](block_signal_params t) {
const auto& [ block, id ] = t;
on_accepted_block(block, id, static_cast<signed_block_header>(*block), block->block_num());
}));
block_start_connection.emplace(
chain.block_start.connect([&](uint32_t block_num) { on_block_start(block_num); }));
@@ -32,13 +32,13 @@ private:
void test_control_plugin_impl::connect() {
_irreversible_block_connection.emplace(
_chain.irreversible_block.connect( [&]( std::tuple<const chain::signed_block_ptr&, const chain::block_id_type&, uint32_t> t ) {
const auto& [ block, id, block_num ] = t;
_chain.irreversible_block.connect( [&]( chain::block_signal_params t ) {
const auto& [ block, id ] = t;
applied_irreversible_block( id );
} ));
_accepted_block_connection =
_chain.accepted_block.connect( [&]( std::tuple<const chain::signed_block_ptr&, const chain::block_id_type&, const chain::signed_block_header&, uint32_t> t ) {
const auto& [ block, id, header, block_num ] = t;
_chain.accepted_block.connect( [&]( chain::block_signal_params t ) {
const auto& [ block, id ] = t;
accepted_block( id );
} );
}
@@ -377,18 +377,18 @@ struct trace_api_plugin_impl {
}));
accepted_block_connection.emplace(
chain.accepted_block.connect([this](std::tuple<const chain::signed_block_ptr&, const chain::block_id_type&, const chain::signed_block_header&, uint32_t> t) {
chain.accepted_block.connect([this](chain::block_signal_params t) {
emit_killer([&](){
const auto& [ block, id, header, block_num ] = t;
extraction->signal_accepted_block(block, id, block_num);
const auto& [ block, id ] = t;
extraction->signal_accepted_block(block, id, block->block_num());
});
}));
irreversible_block_connection.emplace(
chain.irreversible_block.connect([this](std::tuple<const chain::signed_block_ptr&, const chain::block_id_type&, uint32_t> t) {
const auto& [ block, id, block_num ] = t;
chain.irreversible_block.connect([this](chain::block_signal_params t) {
const auto& [ block, id ] = t;
emit_killer([&](){
extraction->signal_irreversible_block(block_num);
extraction->signal_irreversible_block(block->block_num());
});
}));
+2 -2
View File
@@ -1471,8 +1471,8 @@ void transaction_tests(T& chain) {
if (t && t->receipt && t->receipt->status != transaction_receipt::executed) { trace = t; }
} );
signed_block_ptr block;
auto c2 = chain.control->accepted_block.connect([&](std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t) {
const auto& [ b, id, header, block_num ] = t;
auto c2 = chain.control->accepted_block.connect([&](block_signal_params t) {
const auto& [ b, id ] = t;
block = b; });
// test error handling on deferred transaction failure
+4 -4
View File
@@ -217,12 +217,12 @@ BOOST_AUTO_TEST_CASE(broadcasted_block_test)
signed_block_ptr bcasted_blk_by_prod_node;
signed_block_ptr bcasted_blk_by_recv_node;
producer_node.control->accepted_block.connect( [&](std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t) {
const auto& [ block, id, header, block_num ] = t;
producer_node.control->accepted_block.connect( [&](block_signal_params t) {
const auto& [ block, id ] = t;
bcasted_blk_by_prod_node = block;
});
receiving_node.control->accepted_block.connect( [&](std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t) {
const auto& [ block, id, header, block_num ] = t;
receiving_node.control->accepted_block.connect( [&](block_signal_params t) {
const auto& [ block, id ] = t;
bcasted_blk_by_recv_node = block;
});
+6 -4
View File
@@ -151,8 +151,9 @@ BOOST_AUTO_TEST_CASE( signal_validated_blocks ) try {
signed_block_ptr accepted_block;
block_id_type accepted_id;
auto c = chain.control->accepted_block.connect([&](std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t) {
const auto& [ block, id, header, block_num ] = t;
auto c = chain.control->accepted_block.connect([&](block_signal_params t) {
const auto& [ block, id ] = t;
auto block_num = block->block_num();
BOOST_CHECK(block);
const auto& bsp_by_id = chain.control->fetch_block_state_by_id(id);
BOOST_CHECK(bsp_by_id->block_num == block_num);
@@ -169,8 +170,9 @@ BOOST_AUTO_TEST_CASE( signal_validated_blocks ) try {
});
signed_block_ptr validated_block;
block_id_type validated_id;
auto c2 = validator.control->accepted_block.connect([&](std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t) {
const auto& [ block, id, header, block_num ] = t;
auto c2 = validator.control->accepted_block.connect([&](block_signal_params t) {
const auto& [ block, id ] = t;
auto block_num = block->block_num();
BOOST_CHECK(block);
const auto& bsp_by_id = validator.control->fetch_block_state_by_id(id);
BOOST_CHECK(bsp_by_id->block_num == block_num);
+5 -5
View File
@@ -355,11 +355,11 @@ BOOST_AUTO_TEST_CASE( validator_accepts_valid_blocks ) try {
block_id_type first_id;
signed_block_header first_header;
auto c = n2.control->accepted_block.connect( [&]( std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t ) {
const auto& [ block, id, header, block_num ] = t;
auto c = n2.control->accepted_block.connect( [&]( block_signal_params t ) {
const auto& [ block, id ] = t;
first_block = block;
first_id = id;
first_header = header;
first_header = static_cast<signed_block_header>(*block);
} );
push_blocks( n1, n2 );
@@ -703,8 +703,8 @@ BOOST_AUTO_TEST_CASE( push_block_returns_forked_transactions ) try {
// test forked blocks signal accepted_block in order, required by trace_api_plugin
std::vector<signed_block_ptr> accepted_blocks;
auto conn = c.control->accepted_block.connect( [&]( std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t ) {
const auto& [ block, id, header, block_num ] = t;
auto conn = c.control->accepted_block.connect( [&]( block_signal_params t ) {
const auto& [ block, id ] = t;
accepted_blocks.emplace_back( block );
} );
+3 -3
View File
@@ -631,8 +631,8 @@ struct state_history_tester : state_history_tester_logs, tester {
trace_converter.add_transaction(std::get<0>(t), std::get<1>(t));
});
control.accepted_block.connect([&](std::tuple<const signed_block_ptr&, const block_id_type&, const signed_block_header&, uint32_t> t) {
const auto& [ block, id, block_header, block_num ] = t;
control.accepted_block.connect([&](block_signal_params t) {
const auto& [ block, id ] = t;
eosio::state_history_log_header header{.magic = eosio::ship_magic(eosio::ship_current_version, 0),
.block_id = id,
.payload_size = 0};
@@ -641,7 +641,7 @@ struct state_history_tester : state_history_tester_logs, tester {
trace_converter.pack(buf, false, block);
});
chain_state_log.pack_and_write_entry(header, block_header.previous, [&control](auto&& buf) {
chain_state_log.pack_and_write_entry(header, static_cast<signed_block_header>(*block).previous, [&control](auto&& buf) {
eosio::state_history::pack_deltas(buf, control.db(), true);
});
});