From e38d0532e0c7802cedf9c7bd9738475ed2b3619c Mon Sep 17 00:00:00 2001 From: Andrey Tvorozhkov Date: Sat, 3 Feb 2024 04:16:48 +0300 Subject: [PATCH] Do not run gc on readonly --- validator/manager-disk.cpp | 2 +- validator/manager-init.cpp | 11 ++++++++--- validator/manager-init.h | 2 +- validator/manager-init.hpp | 5 +++-- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/validator/manager-disk.cpp b/validator/manager-disk.cpp index ffb97ce7a..8c9c30001 100644 --- a/validator/manager-disk.cpp +++ b/validator/manager-disk.cpp @@ -908,7 +908,7 @@ void ValidatorManagerImpl::start_up() { td::actor::send_closure(SelfId, &ValidatorManagerImpl::started, R.move_as_ok()); }); - validator_manager_init(opts_, actor_id(this), db_.get(), std::move(P)); + validator_manager_init(opts_, actor_id(this), db_.get(), std::move(P), read_only_); } void ValidatorManagerImpl::started(ValidatorManagerInitResult R) { diff --git a/validator/manager-init.cpp b/validator/manager-init.cpp index aa110380d..268b6f895 100644 --- a/validator/manager-init.cpp +++ b/validator/manager-init.cpp @@ -356,7 +356,11 @@ void ValidatorManagerMasterchainStarter::got_init_block_state(td::Refget_block_id() == opts_->init_block_id() || state_->ancestor_is_valid(opts_->init_block_id()) || state_->get_block_id().seqno() < opts_->get_last_fork_masterchain_seqno()); - //finish(); + + if (read_only_) { + finish(); + return; + } auto P = td::PromiseCreator::lambda( [SelfId = actor_id(this), block_id = opts_->init_block_id()](td::Result R) { @@ -609,10 +613,11 @@ void ValidatorManagerMasterchainStarter::finish() { } void validator_manager_init(td::Ref opts, td::actor::ActorId manager, - td::actor::ActorId db, td::Promise promise) { + td::actor::ActorId db, td::Promise promise, + bool read_only_) { CHECK(!opts.is_null()); td::actor::create_actor("starter", std::move(opts), manager, db, - std::move(promise)) + std::move(promise), read_only_) .release(); } diff --git a/validator/manager-init.h b/validator/manager-init.h index d60efb31d..57202c631 100644 --- a/validator/manager-init.h +++ b/validator/manager-init.h @@ -38,7 +38,7 @@ struct ValidatorManagerInitResult { }; void validator_manager_init(td::Ref opts, td::actor::ActorId manager, - td::actor::ActorId db, td::Promise promise); + td::actor::ActorId db, td::Promise promise, bool read_only_ = false); } // namespace validator diff --git a/validator/manager-init.hpp b/validator/manager-init.hpp index 7dce4e47a..9759d3f85 100644 --- a/validator/manager-init.hpp +++ b/validator/manager-init.hpp @@ -83,8 +83,8 @@ class ValidatorManagerMasterchainStarter : public td::actor::Actor { public: ValidatorManagerMasterchainStarter(td::Ref opts, td::actor::ActorId manager, td::actor::ActorId db, - td::Promise promise) - : opts_(std::move(opts)), manager_(manager), db_(db), promise_(std::move(promise)) { + td::Promise promise, bool read_only = false) + : opts_(std::move(opts)), manager_(manager), db_(db), promise_(std::move(promise)), read_only_(read_only) { } void start_up() override; @@ -121,6 +121,7 @@ class ValidatorManagerMasterchainStarter : public td::actor::Actor { td::Ref gc_state_; BlockHandle last_key_block_handle_; bool has_new_hardforks_{false}; + bool read_only_ = false; td::actor::ActorId manager_; td::actor::ActorId db_;