diff --git a/overlay/overlay-peers.cpp b/overlay/overlay-peers.cpp index 3464671b..532ac882 100644 --- a/overlay/overlay-peers.cpp +++ b/overlay/overlay-peers.cpp @@ -633,14 +633,9 @@ std::vector OverlayImpl::get_neighbours(td::uint32 max_si } void OverlayImpl::send_message_to_neighbours(td::BufferSlice data) { - wait_neighbours_not_empty([this, data = std::move(data)](td::Result R) { - if (R.is_error()) { - return; - } - for (auto &n : peer_list_.neighbours_) { - td::actor::send_closure(manager_, &OverlayManager::send_message, n, local_id_, overlay_id_, data.clone()); - } - }); + for (auto &n : peer_list_.neighbours_) { + td::actor::send_closure(manager_, &OverlayManager::send_message, n, local_id_, overlay_id_, data.clone()); + } } size_t OverlayImpl::neighbours_cnt() const { diff --git a/overlay/overlay.cpp b/overlay/overlay.cpp index 345d18e6..96e1610b 100644 --- a/overlay/overlay.cpp +++ b/overlay/overlay.cpp @@ -101,9 +101,9 @@ OverlayImpl::OverlayImpl(td::actor::ActorId keyring, td::actor VLOG(OVERLAY_INFO) << this << ": creating"; - update_root_member_list(std::move(nodes), std::move(root_public_keys), std::move(cert)); - - update_neighbours(static_cast(nodes.size())); + auto nodes_size = static_cast(nodes.size()); + OverlayImpl::update_root_member_list(std::move(nodes), std::move(root_public_keys), std::move(cert)); + update_neighbours(nodes_size); } void OverlayImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::overlay_getRandomPeers &query, @@ -457,20 +457,6 @@ void OverlayImpl::bcast_gc() { CHECK(delivered_broadcasts_.size() == bcast_lru_.size()); } -void OverlayImpl::wait_neighbours_not_empty(td::Promise promise, int max_retries) { - if (!peer_list_.neighbours_.empty()) { - promise.set_result(td::Unit()); - } else if (max_retries > 0) { - delay_action( - [SelfId = actor_id(this), promise = std::move(promise), max_retries]() mutable { - td::actor::send_closure(SelfId, &OverlayImpl::wait_neighbours_not_empty, std::move(promise), max_retries - 1); - }, - td::Timestamp::in(0.5)); - } else { - promise.set_error(td::Status::Error(ErrorCode::timeout)); - } -} - void OverlayImpl::send_broadcast(PublicKeyHash send_as, td::uint32 flags, td::BufferSlice data) { if (!has_valid_membership_certificate()) { VLOG(OVERLAY_WARNING) << "member certificate is invalid, valid_until=" @@ -481,20 +467,15 @@ void OverlayImpl::send_broadcast(PublicKeyHash send_as, td::uint32 flags, td::Bu VLOG(OVERLAY_WARNING) << "broadcast source certificate is invalid"; return; } - wait_neighbours_not_empty([this, send_as, flags, data = std::move(data)](td::Result R) mutable { - if (R.is_error()) { - return; - } - auto S = BroadcastSimple::create_new(actor_id(this), keyring_, send_as, std::move(data), flags); - if (S.is_error()) { - LOG(WARNING) << "failed to send broadcast: " << S; - } - }); + auto S = BroadcastSimple::create_new(actor_id(this), keyring_, send_as, std::move(data), flags); + if (S.is_error()) { + LOG(WARNING) << "failed to send broadcast: " << S; + } } void OverlayImpl::send_broadcast_fec(PublicKeyHash send_as, td::uint32 flags, td::BufferSlice data) { if (!has_valid_membership_certificate()) { - VLOG(OVERLAY_WARNING) << "meber certificate ist invalid, valid_until=" + VLOG(OVERLAY_WARNING) << "meber certificate is invalid, valid_until=" << peer_list_.local_cert_is_valid_until_.at_unix(); return; } @@ -502,12 +483,7 @@ void OverlayImpl::send_broadcast_fec(PublicKeyHash send_as, td::uint32 flags, td VLOG(OVERLAY_WARNING) << "broadcast source certificate is invalid"; return; } - wait_neighbours_not_empty([this, send_as, flags, data = std::move(data)](td::Result R) mutable { - if (R.is_error()) { - return; - } - OverlayOutboundFecBroadcast::create(std::move(data), flags, actor_id(this), send_as); - }); + OverlayOutboundFecBroadcast::create(std::move(data), flags, actor_id(this), send_as); } void OverlayImpl::print(td::StringBuilder &sb) { @@ -752,7 +728,8 @@ bool OverlayImpl::has_valid_broadcast_certificate(const PublicKeyHash &source, s return false; } auto it = certs_.find(source); - return check_source_eligible(source, it == certs_.end() ? nullptr : it->second.get(), (td::uint32)size, is_fec); + return check_source_eligible(source, it == certs_.end() ? nullptr : it->second.get(), (td::uint32)size, is_fec) != + BroadcastCheckResult::Forbidden; } } // namespace overlay diff --git a/overlay/overlay.hpp b/overlay/overlay.hpp index b08aaf46..05eaf1c4 100644 --- a/overlay/overlay.hpp +++ b/overlay/overlay.hpp @@ -320,8 +320,6 @@ class OverlayImpl : public Overlay { del_peer(peer_id); } - void wait_neighbours_not_empty(td::Promise promise, int max_retries = 20); - private: template void process_query(adnl::AdnlNodeIdShort src, T &query, td::Promise promise) { diff --git a/validator-session/validator-session.cpp b/validator-session/validator-session.cpp index fe265b28..33b78e84 100644 --- a/validator-session/validator-session.cpp +++ b/validator-session/validator-session.cpp @@ -992,6 +992,9 @@ ValidatorSessionImpl::ValidatorSessionImpl(catchain::CatChainSessionId session_i } void ValidatorSessionImpl::start() { + round_started_at_ = td::Timestamp::now(); + round_debug_at_ = td::Timestamp::in(60.0); + stats_init(); started_ = true; VLOG(VALIDATOR_SESSION_NOTICE) << this << ": started"; @@ -1097,8 +1100,6 @@ void ValidatorSessionImpl::start_up() { check_all(); td::actor::send_closure(rldp_, &rldp::Rldp::add_id, description().get_source_adnl_id(local_idx())); - - stats_init(); } void ValidatorSessionImpl::stats_init() { diff --git a/validator/db/celldb.cpp b/validator/db/celldb.cpp index 91e9054e..497f0feb 100644 --- a/validator/db/celldb.cpp +++ b/validator/db/celldb.cpp @@ -226,10 +226,6 @@ void CellDbIn::get_cell_db_reader(td::Promise> promise.set_result(boc_->get_cell_db_reader()); } -void CellDbIn::get_last_deleted_mc_state(td::Promise promise) { - promise.set_result(last_deleted_mc_state_); -} - std::vector> CellDbIn::prepare_stats() { TD_PERF_COUNTER(celldb_prepare_stats); auto r_boc_stats = boc_->get_stats(); @@ -257,6 +253,7 @@ std::vector> CellDbIn::prepare_stats() { double(celldb_size)); add_stat("max_possible_ram_to_celldb_ratio", double(total_mem_stat.total_ram) / double(celldb_size)); } + stats.emplace_back("last_deleted_mc_state", td::to_string(last_deleted_mc_state_)); return stats; // do not clear statistics, it is needed for flush_db_stats @@ -580,10 +577,6 @@ void CellDb::get_cell_db_reader(td::Promise> p td::actor::send_closure(cell_db_, &CellDbIn::get_cell_db_reader, std::move(promise)); } -void CellDb::get_last_deleted_mc_state(td::Promise promise) { - td::actor::send_closure(cell_db_, &CellDbIn::get_last_deleted_mc_state, std::move(promise)); -} - void CellDb::start_up() { CellDbBase::start_up(); boc_ = vm::DynamicBagOfCellsDb::create(); diff --git a/validator/db/celldb.hpp b/validator/db/celldb.hpp index 7cd36689..a3bf6cf1 100644 --- a/validator/db/celldb.hpp +++ b/validator/db/celldb.hpp @@ -65,7 +65,6 @@ class CellDbIn : public CellDbBase { void load_cell(RootHash hash, td::Promise> promise); void store_cell(BlockIdExt block_id, td::Ref cell, td::Promise> promise); void get_cell_db_reader(td::Promise> promise); - void get_last_deleted_mc_state(td::Promise promise); void migrate_cell(td::Bits256 hash); @@ -190,7 +189,6 @@ class CellDb : public CellDbBase { in_memory_boc_ = std::move(in_memory_boc); } void get_cell_db_reader(td::Promise> promise); - void get_last_deleted_mc_state(td::Promise promise); CellDb(td::actor::ActorId root_db, std::string path, td::Ref opts) : root_db_(root_db), path_(path), opts_(opts) { diff --git a/validator/db/rootdb.cpp b/validator/db/rootdb.cpp index f15220de..bb5d767f 100644 --- a/validator/db/rootdb.cpp +++ b/validator/db/rootdb.cpp @@ -285,10 +285,6 @@ void RootDb::get_cell_db_reader(td::Promise> p td::actor::send_closure(cell_db_, &CellDb::get_cell_db_reader, std::move(promise)); } -void RootDb::get_last_deleted_mc_state(td::Promise promise) { - td::actor::send_closure(cell_db_, &CellDb::get_last_deleted_mc_state, std::move(promise)); -} - void RootDb::store_persistent_state_file(BlockIdExt block_id, BlockIdExt masterchain_block_id, td::BufferSlice state, td::Promise promise) { td::actor::send_closure(archive_db_, &ArchiveManager::add_persistent_state, block_id, masterchain_block_id, diff --git a/validator/db/rootdb.hpp b/validator/db/rootdb.hpp index 4493d2d2..755ff257 100644 --- a/validator/db/rootdb.hpp +++ b/validator/db/rootdb.hpp @@ -64,7 +64,6 @@ class RootDb : public Db { td::Promise> promise) override; void get_block_state(ConstBlockHandle handle, td::Promise> promise) override; void get_cell_db_reader(td::Promise> promise) override; - void get_last_deleted_mc_state(td::Promise promise) override; void store_block_handle(BlockHandle handle, td::Promise promise) override; void get_block_handle(BlockIdExt id, td::Promise promise) override; diff --git a/validator/interfaces/db.h b/validator/interfaces/db.h index f8496a2e..46620322 100644 --- a/validator/interfaces/db.h +++ b/validator/interfaces/db.h @@ -52,7 +52,6 @@ class Db : public td::actor::Actor { td::Promise> promise) = 0; virtual void get_block_state(ConstBlockHandle handle, td::Promise> promise) = 0; virtual void get_cell_db_reader(td::Promise> promise) = 0; - virtual void get_last_deleted_mc_state(td::Promise promise) = 0; virtual void store_persistent_state_file(BlockIdExt block_id, BlockIdExt masterchain_block_id, td::BufferSlice state, td::Promise promise) = 0; diff --git a/validator/manager.cpp b/validator/manager.cpp index 5d1e6753..03c4f795 100644 --- a/validator/manager.cpp +++ b/validator/manager.cpp @@ -2178,20 +2178,10 @@ void ValidatorManagerImpl::update_shards() { td::actor::send_closure(SelfId, &ValidatorManagerImpl::written_destroyed_validator_sessions, std::move(gc)); }); td::actor::send_closure(db_, &Db::update_destroyed_validator_sessions, gc_list_, std::move(P)); - - if (!serializer_.empty()) { - td::actor::send_closure( - serializer_, &AsyncStateSerializer::auto_disable_serializer, - validating_masterchain && - last_masterchain_state_->get_validator_set(ShardIdFull{masterchainId})->export_vector().size() * 2 <= - last_masterchain_state_->get_total_validator_set(0)->export_vector().size()); - } } - if (!serializer_.empty()) { - td::actor::send_closure( - serializer_, &AsyncStateSerializer::auto_disable_serializer, - !validator_groups_.empty() && last_masterchain_state_->get_global_id() == -239); // mainnet only + td::actor::send_closure(serializer_, &AsyncStateSerializer::auto_disable_serializer, + is_validator() && last_masterchain_state_->get_global_id() == -239); // mainnet only } } @@ -2790,23 +2780,6 @@ void ValidatorManagerImpl::prepare_stats(td::Promiseid().seqno()](td::Result R) mutable { - TRY_RESULT_PROMISE(promise, seqno, std::move(R)); - std::string s; - if (seqno == 0) { - s = "none"; - } else if (seqno <= gc_seqno) { - s = PSTRING() << seqno << " (gc_seqno-" << (gc_seqno - seqno) << ")"; - } else { - s = PSTRING() << seqno << " (gc_seqno+" << (seqno - gc_seqno) << ")"; - } - std::vector> vec; - vec.emplace_back("lastgcdmasterchainstate", std::move(s)); - promise.set_value(std::move(vec)); - }); } td::NamedThreadSafeCounter::get_default().for_each([&](auto key, auto value) { vec.emplace_back("counter." + key, PSTRING() << value);