From a59558987093f698a9c085004a1ed089168890d6 Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Thu, 5 Sep 2024 12:23:01 +0300 Subject: [PATCH] Add "lastgcdmasterchainstate" to validator stats --- validator/db/celldb.cpp | 13 +++++++++++++ validator/db/celldb.hpp | 3 +++ validator/db/rootdb.cpp | 4 ++++ validator/db/rootdb.hpp | 1 + validator/interfaces/db.h | 1 + validator/manager.cpp | 17 +++++++++++++++++ 6 files changed, 39 insertions(+) diff --git a/validator/db/celldb.cpp b/validator/db/celldb.cpp index 463e6e34a..1701ae588 100644 --- a/validator/db/celldb.cpp +++ b/validator/db/celldb.cpp @@ -188,12 +188,17 @@ void CellDbIn::store_cell(BlockIdExt block_id, td::Ref cell, td::Promi if (!opts_->get_disable_rocksdb_stats()) { cell_db_statistics_.store_cell_time_.insert(timer.elapsed() * 1e6); } + LOG(DEBUG) << "Stored state " << block_id.to_str(); } void CellDbIn::get_cell_db_reader(td::Promise> 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_); +} + void CellDbIn::flush_db_stats() { if (opts_->get_disable_rocksdb_stats()) { return; @@ -320,6 +325,10 @@ void CellDbIn::gc_cont2(BlockHandle handle) { if (!opts_->get_disable_rocksdb_stats()) { cell_db_statistics_.gc_cell_time_.insert(timer.elapsed() * 1e6); } + if (handle->id().is_masterchain()) { + last_deleted_mc_state_ = handle->id().seqno(); + } + LOG(DEBUG) << "Deleted state " << handle->id().to_str(); } void CellDbIn::skip_gc() { @@ -453,6 +462,10 @@ 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 b3857971c..335d8a08e 100644 --- a/validator/db/celldb.hpp +++ b/validator/db/celldb.hpp @@ -61,6 +61,7 @@ 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); @@ -143,6 +144,7 @@ class CellDbIn : public CellDbBase { std::shared_ptr snapshot_statistics_; CellDbStatistics cell_db_statistics_; td::Timestamp statistics_flush_at_ = td::Timestamp::never(); + BlockSeqno last_deleted_mc_state_ = 0; public: class MigrationProxy : public td::actor::Actor { @@ -167,6 +169,7 @@ class CellDb : public CellDbBase { boc_->set_loader(std::make_unique(std::move(snapshot), on_load_callback_)).ensure(); } 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 93dcfc91f..3071f565d 100644 --- a/validator/db/rootdb.cpp +++ b/validator/db/rootdb.cpp @@ -274,6 +274,10 @@ 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 45044e4f8..061e9add8 100644 --- a/validator/db/rootdb.hpp +++ b/validator/db/rootdb.hpp @@ -63,6 +63,7 @@ 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 8bbf7f31f..e0d88e4e7 100644 --- a/validator/interfaces/db.h +++ b/validator/interfaces/db.h @@ -51,6 +51,7 @@ 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 79927d0ef..9058be76a 100644 --- a/validator/manager.cpp +++ b/validator/manager.cpp @@ -2767,6 +2767,23 @@ 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)); + }); } if (!shard_client_.empty()) {