Allow restarting block production with dummy checkpoint
This commit is contained in:
parent
3a7e65c888
commit
73cc012db9
3 changed files with 10 additions and 18 deletions
2
docs
2
docs
|
|
@ -1 +1 @@
|
||||||
Subproject commit cdc8ea8133a999afef8051700a4ce8edb0988ec4
|
Subproject commit f42a917c0cb93784567d649be60d610469c33ee0
|
||||||
|
|
@ -357,26 +357,14 @@ const vector<operation_history_object>& database::get_applied_operations() const
|
||||||
void database::apply_block( const signed_block& next_block, uint32_t skip )
|
void database::apply_block( const signed_block& next_block, uint32_t skip )
|
||||||
{
|
{
|
||||||
auto block_num = next_block.block_num();
|
auto block_num = next_block.block_num();
|
||||||
if( _checkpoints.size() )
|
if( _checkpoints.size() && _checkpoints.rbegin()->second != block_id_type() )
|
||||||
{
|
{
|
||||||
auto itr = _checkpoints.find( block_num );
|
auto itr = _checkpoints.find( block_num );
|
||||||
if( itr != _checkpoints.end() )
|
if( itr != _checkpoints.end() )
|
||||||
FC_ASSERT( next_block.id() == itr->second, "Block did not match checkpoint", ("checkpoint",*itr)("block_id",next_block.id()) );
|
FC_ASSERT( next_block.id() == itr->second, "Block did not match checkpoint", ("checkpoint",*itr)("block_id",next_block.id()) );
|
||||||
|
|
||||||
auto last = _checkpoints.rbegin();
|
if( _checkpoints.rbegin()->first >= block_num )
|
||||||
if( last->first >= block_num )
|
skip = ~0;// WE CAN SKIP ALMOST EVERYTHING
|
||||||
{
|
|
||||||
// WE CAN SKIP ALMOST EVERYTHING
|
|
||||||
skip = ~0;
|
|
||||||
|
|
||||||
/** clear the recently missed count because the checkpoint indicates that
|
|
||||||
* we will never have to go back further than this.
|
|
||||||
*/
|
|
||||||
const auto& _dgp = dynamic_global_property_id_type(0)(*this);
|
|
||||||
modify( _dgp, [&]( dynamic_global_property_object& dgp ){
|
|
||||||
dgp.recently_missed_count = 0;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
with_skip_flags( skip, [&]()
|
with_skip_flags( skip, [&]()
|
||||||
|
|
|
||||||
|
|
@ -49,8 +49,12 @@ void database::update_global_dynamic_data( const signed_block& b )
|
||||||
fc::raw::pack( enc, b.previous_secret );
|
fc::raw::pack( enc, b.previous_secret );
|
||||||
dgp.random = enc.result();
|
dgp.random = enc.result();
|
||||||
|
|
||||||
if( missed_blocks )
|
if( _checkpoints.size() && _checkpoints.rbegin()->first >= b.block_num() )
|
||||||
dgp.recently_missed_count += 2*missed_blocks;
|
dgp.recently_missed_count = 0;
|
||||||
|
else if( missed_blocks )
|
||||||
|
dgp.recently_missed_count += 4*missed_blocks;
|
||||||
|
else if( dgp.recently_missed_count > 4 )
|
||||||
|
dgp.recently_missed_count -= 3;
|
||||||
else if( dgp.recently_missed_count > 0 )
|
else if( dgp.recently_missed_count > 0 )
|
||||||
dgp.recently_missed_count--;
|
dgp.recently_missed_count--;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue