Skip to content

Commit

Permalink
Add options validator to be queried and to broadcast block when it's …
Browse files Browse the repository at this point in the history
…unsync

Signed-off-by: ice-charon <[email protected]>
  • Loading branch information
ice-charon authored and ice-hermes committed Jul 12, 2024
1 parent 7fe5040 commit 3ffd6e6
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 8 deletions.
18 changes: 17 additions & 1 deletion validator-engine/validator-engine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1798,7 +1798,8 @@ void ValidatorEngine::started_overlays() {
void ValidatorEngine::start_validator() {
validator_options_.write().set_allow_blockchain_init(config_.validators.size() > 0);
validator_manager_ = ton::validator::ValidatorManagerFactory::create(
validator_options_, db_root_, keyring_.get(), adnl_.get(), rldp_.get(), overlay_manager_.get());
validator_options_, db_root_, keyring_.get(), adnl_.get(), rldp_.get(), overlay_manager_.get(),
allow_query_unsync_, allow_broadcast_unsync_);

for (auto &v : config_.validators) {
td::actor::send_closure(validator_manager_, &ton::validator::ValidatorManagerInterface::add_permanent_key, v.first,
Expand Down Expand Up @@ -3816,6 +3817,21 @@ int main(int argc, char *argv[]) {
p.add_option('\0', "enable-precompiled-smc",
"enable exectuion of precompiled contracts (experimental, disabled by default)",
[]() { block::precompiled::set_precompiled_execution_enabled(true); });

// ion options
p.add_checked_option(
'\0', "allow-query-unsync", "allow query node while it's not sync (default: not set)",
[&]() -> td::Status {
acts.push_back([&x]() { td::actor::send_closure(x, &ValidatorEngine::set_allow_query_unsync); });
return td::Status::OK();
});
p.add_checked_option(
'\0', "allow-broadcast-unsync", "allow broadcast a block while node isn't sync (default: not set)",
[&]() -> td::Status {
acts.push_back([&x]() { td::actor::send_closure(x, &ValidatorEngine::set_allow_broadcast_unsync); });
return td::Status::OK();
});

auto S = p.run(argc, argv);
if (S.is_error()) {
LOG(ERROR) << "failed to parse options: " << S.move_as_error();
Expand Down
10 changes: 10 additions & 0 deletions validator-engine/validator-engine.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,9 @@ class ValidatorEngine : public td::actor::Actor {
ton::BlockSeqno truncate_seqno_{0};
std::string session_logs_file_;

bool allow_query_unsync_ = false;
bool allow_broadcast_unsync_ = false;

std::set<ton::CatchainSeqno> unsafe_catchains_;
std::map<ton::BlockSeqno, std::pair<ton::CatchainSeqno, td::uint32>> unsafe_catchain_rotations_;

Expand Down Expand Up @@ -272,6 +275,13 @@ class ValidatorEngine : public td::actor::Actor {
void set_archive_preload_period(double value) {
archive_preload_period_ = value;
}
void set_allow_query_unsync() {
allow_query_unsync_ = true;
}
void set_allow_broadcast_unsync() {
allow_broadcast_unsync_ = true;
}

void start_up() override;
ValidatorEngine() {
}
Expand Down
8 changes: 4 additions & 4 deletions validator/manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ void ValidatorManagerImpl::validate_block(ReceivedBlock block, td::Promise<Block
}

void ValidatorManagerImpl::prevalidate_block(BlockBroadcast broadcast, td::Promise<td::Unit> promise) {
if (!started_) {
if (!started_ && !allow_broadcast_unsync_) {
promise.set_error(td::Status::Error(ErrorCode::notready, "node not started"));
return;
}
Expand Down Expand Up @@ -535,7 +535,7 @@ void ValidatorManagerImpl::created_ext_server(td::actor::ActorOwn<adnl::AdnlExtS
}

void ValidatorManagerImpl::run_ext_query(td::BufferSlice data, td::Promise<td::BufferSlice> promise) {
if (!started_) {
if (!started_ && !allow_query_unsync_) {
promise.set_error(td::Status::Error(ErrorCode::notready, "node not synced"));
return;
}
Expand Down Expand Up @@ -2843,9 +2843,9 @@ void ValidatorManagerImpl::process_lookup_block_for_litequery_error(AccountIdPre
td::actor::ActorOwn<ValidatorManagerInterface> ValidatorManagerFactory::create(
td::Ref<ValidatorManagerOptions> opts, std::string db_root, td::actor::ActorId<keyring::Keyring> keyring,
td::actor::ActorId<adnl::Adnl> adnl, td::actor::ActorId<rldp::Rldp> rldp,
td::actor::ActorId<overlay::Overlays> overlays) {
td::actor::ActorId<overlay::Overlays> overlays, bool allow_query_unsync, bool allow_bradcast_unsync) {
return td::actor::create_actor<validator::ValidatorManagerImpl>("manager", std::move(opts), db_root, keyring, adnl,
rldp, overlays);
rldp, overlays, allow_query_unsync, allow_bradcast_unsync);
}

} // namespace validator
Expand Down
4 changes: 3 additions & 1 deletion validator/manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ class ValidatorManagerFactory {
td::actor::ActorId<keyring::Keyring> keyring,
td::actor::ActorId<adnl::Adnl> adnl,
td::actor::ActorId<rldp::Rldp> rldp,
td::actor::ActorId<overlay::Overlays> overlays);
td::actor::ActorId<overlay::Overlays> overlays,
bool allow_query_unsync,
bool allow_broadcast_unsync);
};

} // namespace validator
Expand Down
8 changes: 6 additions & 2 deletions validator/manager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -502,8 +502,10 @@ class ValidatorManagerImpl : public ValidatorManager {

ValidatorManagerImpl(td::Ref<ValidatorManagerOptions> opts, std::string db_root,
td::actor::ActorId<keyring::Keyring> keyring, td::actor::ActorId<adnl::Adnl> adnl,
td::actor::ActorId<rldp::Rldp> rldp, td::actor::ActorId<overlay::Overlays> overlays)
: opts_(std::move(opts)), db_root_(db_root), keyring_(keyring), adnl_(adnl), rldp_(rldp), overlays_(overlays) {
td::actor::ActorId<rldp::Rldp> rldp, td::actor::ActorId<overlay::Overlays> overlays,
bool allow_query_unsync, bool allow_broadcast_unsync)
: opts_(std::move(opts)), db_root_(db_root), keyring_(keyring), adnl_(adnl), rldp_(rldp), overlays_(overlays)
, allow_query_unsync_(allow_query_unsync), allow_broadcast_unsync_(allow_broadcast_unsync) {
}

public:
Expand Down Expand Up @@ -629,6 +631,8 @@ class ValidatorManagerImpl : public ValidatorManager {

bool started_ = false;
bool allow_validate_ = false;
bool allow_query_unsync_ = false;
bool allow_broadcast_unsync_ = false;

private:
double state_ttl() const {
Expand Down

0 comments on commit 3ffd6e6

Please sign in to comment.