Skip to content

Commit

Permalink
optimise transit_to_new_view; optimise handle pbft messages;
Browse files Browse the repository at this point in the history
  • Loading branch information
oldcold authored and VincentOCL committed Jul 11, 2019
1 parent 019f595 commit 20e08db
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 36 deletions.
3 changes: 3 additions & 0 deletions libraries/chain/pbft.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -456,6 +456,9 @@ namespace eosio {
}
}

if (pbft_db.should_committed()) {
pbft_db.commit_local();
}
transit_to_committed_state(s, true);
}

Expand Down
2 changes: 0 additions & 2 deletions libraries/chain/pbft_database.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -849,8 +849,6 @@ namespace eosio {
if (add_to_pbft_db) add_pbft_commit(c, pmm.sender_key);
}

if (add_to_pbft_db && should_committed()) commit_local();

auto cert_id = certificate.block_info.block_id;
auto cert_bs = ctrl.fetch_block_state_by_id(cert_id);
auto producer_schedule = lscb_active_producers();
Expand Down
69 changes: 35 additions & 34 deletions plugins/net_plugin/net_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -263,14 +263,14 @@ namespace eosio {
void pbft_outgoing_new_view(const pbft_new_view_ptr& new_view);
void pbft_outgoing_checkpoint(const pbft_checkpoint_ptr& checkpoint);

void handle_message( const connection_ptr& c, pbft_prepare &msg);
void handle_message( const connection_ptr& c, pbft_commit &msg);
void handle_message( const connection_ptr& c, pbft_view_change &msg);
void handle_message( const connection_ptr& c, pbft_new_view &msg);
void handle_message( const connection_ptr& c, pbft_checkpoint &msg);
void handle_message( const connection_ptr& c, pbft_stable_checkpoint &msg);
void handle_message( const connection_ptr& c, const pbft_prepare &msg);
void handle_message( const connection_ptr& c, const pbft_commit &msg);
void handle_message( const connection_ptr& c, const pbft_view_change &msg);
void handle_message( const connection_ptr& c, const pbft_new_view &msg);
void handle_message( const connection_ptr& c, const pbft_checkpoint &msg);
void handle_message( const connection_ptr& c, const pbft_stable_checkpoint &msg);
void handle_message( const connection_ptr& c, const checkpoint_request_message &msg);
void handle_message( const connection_ptr& c, compressed_pbft_message &msg);
void handle_message( const connection_ptr& c, const compressed_pbft_message &msg);

void start_conn_timer(boost::asio::steady_timer::duration du, std::weak_ptr<connection> from_connection);
void start_txn_timer();
Expand Down Expand Up @@ -3102,15 +3102,16 @@ namespace eosio {
}
}

void net_plugin_impl::handle_message( const connection_ptr& c, pbft_prepare &msg) {
void net_plugin_impl::handle_message( const connection_ptr& c, const pbft_prepare &msg) {

auto pmm = pbft_message_metadata<pbft_prepare>(std::move(msg), chain_id);

if (!is_pbft_msg_valid(pmm.msg)) return;
if (!is_pbft_msg_valid(msg)) return;

auto added = maybe_add_to_pbft_cache(std::string(pmm.msg.sender_signature));
auto added = maybe_add_to_pbft_cache(std::string(msg.sender_signature));
if (!added) return;

auto pmm = pbft_message_metadata<pbft_prepare>(std::move(msg), chain_id);


pbft_controller &pcc = my_impl->chain_plug->pbft_ctrl();
if (!pcc.pbft_db.is_valid_prepare(pmm.msg, pmm.sender_key)) return;

Expand All @@ -3120,15 +3121,15 @@ namespace eosio {
pbft_incoming_prepare_channel.publish(std::make_shared<pbft_message_metadata<pbft_prepare>>(std::move(pmm)));
}

void net_plugin_impl::handle_message( const connection_ptr& c, pbft_commit &msg) {
void net_plugin_impl::handle_message( const connection_ptr& c, const pbft_commit &msg) {

auto pmm = pbft_message_metadata<pbft_commit>(std::move(msg), chain_id);

if (!is_pbft_msg_valid(pmm.msg)) return;
if (!is_pbft_msg_valid(msg)) return;

auto added = maybe_add_to_pbft_cache(std::string(pmm.msg.sender_signature));
auto added = maybe_add_to_pbft_cache(std::string(msg.sender_signature));
if (!added) return;

auto pmm = pbft_message_metadata<pbft_commit>(std::move(msg), chain_id);

pbft_controller &pcc = my_impl->chain_plug->pbft_ctrl();
if (!pcc.pbft_db.is_valid_commit(pmm.msg, pmm.sender_key)) return;
Expand All @@ -3139,15 +3140,15 @@ namespace eosio {
pbft_incoming_commit_channel.publish(std::make_shared<pbft_message_metadata<pbft_commit>>(std::move(pmm)));
}

void net_plugin_impl::handle_message( const connection_ptr& c, pbft_view_change &msg) {
void net_plugin_impl::handle_message( const connection_ptr& c, const pbft_view_change &msg) {

auto pmm = pbft_message_metadata<pbft_view_change>( std::move(msg), chain_id);
if (!is_pbft_msg_valid(msg)) return;

if (!is_pbft_msg_valid(pmm.msg)) return;

auto added = maybe_add_to_pbft_cache(std::string(pmm.msg.sender_signature));
auto added = maybe_add_to_pbft_cache(std::string(msg.sender_signature));
if (!added) return;

auto pmm = pbft_message_metadata<pbft_view_change>( std::move(msg), chain_id);

pbft_controller &pcc = my_impl->chain_plug->pbft_ctrl();
controller &ctrl = my_impl->chain_plug->chain();
if (!pcc.pbft_db.is_valid_view_change(pmm.msg, pmm.sender_key)) return;
Expand All @@ -3174,21 +3175,21 @@ namespace eosio {
pbft_incoming_view_change_channel.publish(std::make_shared<pbft_message_metadata<pbft_view_change>>(std::move(pmm)));
}

void net_plugin_impl::handle_message( const connection_ptr& c, pbft_new_view &msg) {

auto pmm = pbft_message_metadata<pbft_new_view>(std::move(msg), chain_id);
void net_plugin_impl::handle_message( const connection_ptr& c, const pbft_new_view &msg) {

auto added = maybe_add_to_pbft_cache(std::string(pmm.msg.sender_signature));
auto added = maybe_add_to_pbft_cache(std::string(msg.sender_signature));
if (!added) return;

pbft_controller &pcc = my_impl->chain_plug->pbft_ctrl();

if (time_point_sec(time_point::now()) > time_point_sec(pmm.msg.common.timestamp) + 60 * pbft_message_TTL
|| pmm.msg.new_view <= pcc.state_machine->get_current_view()) {
if (time_point_sec(time_point::now()) > time_point_sec(msg.common.timestamp) + 60 * pbft_message_TTL
|| msg.new_view <= pcc.state_machine->get_current_view()) {
//skip new view messages that are too old or whose target views are lower than mine.
return;
}

auto pmm = pbft_message_metadata<pbft_new_view>(std::move(msg), chain_id);

if (pmm.sender_key != pcc.pbft_db.get_new_view_primary_key(pmm.msg.new_view)) return;

forward_pbft_msg(c, pmm.msg, INT_MAX);
Expand All @@ -3197,7 +3198,7 @@ namespace eosio {
pbft_incoming_new_view_channel.publish(std::make_shared<pbft_message_metadata<pbft_new_view>>(std::move(pmm)));
}

void net_plugin_impl::handle_message( const connection_ptr& c, compressed_pbft_message &msg) {
void net_plugin_impl::handle_message( const connection_ptr& c, const compressed_pbft_message &msg) {

auto decompressed_msg = decompress_pbft(msg.content);

Expand All @@ -3213,15 +3214,15 @@ namespace eosio {
}
}

void net_plugin_impl::handle_message( const connection_ptr& c, pbft_checkpoint &msg) {
void net_plugin_impl::handle_message( const connection_ptr& c, const pbft_checkpoint &msg) {

auto pmm = pbft_message_metadata<pbft_checkpoint>(std::move(msg), chain_id);

if (!is_pbft_msg_valid(pmm.msg)) return;
if (!is_pbft_msg_valid(msg)) return;

auto added = maybe_add_to_pbft_cache(std::string(pmm.msg.sender_signature));
auto added = maybe_add_to_pbft_cache(std::string(msg.sender_signature));
if (!added) return;

auto pmm = pbft_message_metadata<pbft_checkpoint>(std::move(msg), chain_id);

pbft_controller &pcc = my_impl->chain_plug->pbft_ctrl();
if (!pcc.pbft_db.is_valid_checkpoint(pmm.msg, pmm.sender_key)) return;

Expand All @@ -3231,7 +3232,7 @@ namespace eosio {
pbft_incoming_checkpoint_channel.publish(std::make_shared<pbft_message_metadata<pbft_checkpoint>>(std::move(pmm)));
}

void net_plugin_impl::handle_message( const connection_ptr& c, pbft_stable_checkpoint &msg) {
void net_plugin_impl::handle_message( const connection_ptr& c, const pbft_stable_checkpoint &msg) {

pbft_controller &pcc = my_impl->chain_plug->pbft_ctrl();

Expand Down

0 comments on commit 20e08db

Please sign in to comment.