mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Reload validator options when needed
This commit is contained in:
parent
011e97f53c
commit
be2169e523
10 changed files with 47 additions and 4 deletions
|
@ -1404,7 +1404,7 @@ td::Status ValidatorEngine::load_global_config() {
|
||||||
return td::Status::OK();
|
return td::Status::OK();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ValidatorEngine::init_validator_options() {
|
void ValidatorEngine::set_shard_check_function() {
|
||||||
if (!not_all_shards_) {
|
if (!not_all_shards_) {
|
||||||
validator_options_.write().set_shard_check_function([](ton::ShardIdFull shard) -> bool { return true; });
|
validator_options_.write().set_shard_check_function([](ton::ShardIdFull shard) -> bool { return true; });
|
||||||
} else {
|
} else {
|
||||||
|
@ -1711,7 +1711,7 @@ void ValidatorEngine::got_key(ton::PublicKey key) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ValidatorEngine::start() {
|
void ValidatorEngine::start() {
|
||||||
init_validator_options();
|
set_shard_check_function();
|
||||||
read_config_ = true;
|
read_config_ = true;
|
||||||
start_adnl();
|
start_adnl();
|
||||||
}
|
}
|
||||||
|
@ -3412,7 +3412,10 @@ void ValidatorEngine::run_control_query(ton::ton_api::engine_validator_addCollat
|
||||||
promise.set_value(ton::serialize_tl_object(ton::create_tl_object<ton::ton_api::engine_validator_success>(), true));
|
promise.set_value(ton::serialize_tl_object(ton::create_tl_object<ton::ton_api::engine_validator_success>(), true));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
set_shard_check_function();
|
||||||
if (!validator_manager_.empty()) {
|
if (!validator_manager_.empty()) {
|
||||||
|
td::actor::send_closure(validator_manager_, &ton::validator::ValidatorManagerInterface::update_options,
|
||||||
|
validator_options_);
|
||||||
td::actor::send_closure(validator_manager_, &ton::validator::ValidatorManagerInterface::add_collator,
|
td::actor::send_closure(validator_manager_, &ton::validator::ValidatorManagerInterface::add_collator,
|
||||||
ton::adnl::AdnlNodeIdShort(id), shard);
|
ton::adnl::AdnlNodeIdShort(id), shard);
|
||||||
}
|
}
|
||||||
|
@ -3443,8 +3446,19 @@ void ValidatorEngine::run_control_query(ton::ton_api::engine_validator_addShard
|
||||||
promise.set_value(create_control_query_error(R.move_as_error()));
|
promise.set_value(create_control_query_error(R.move_as_error()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
set_shard_check_function();
|
||||||
|
if (!validator_manager_.empty()) {
|
||||||
|
td::actor::send_closure(validator_manager_, &ton::validator::ValidatorManagerInterface::update_options,
|
||||||
|
validator_options_);
|
||||||
|
}
|
||||||
|
write_config([promise = std::move(promise)](td::Result<td::Unit> R) mutable {
|
||||||
|
if (R.is_error()) {
|
||||||
|
promise.set_value(create_control_query_error(R.move_as_error()));
|
||||||
|
} else {
|
||||||
promise.set_value(ton::serialize_tl_object(ton::create_tl_object<ton::ton_api::engine_validator_success>(), true));
|
promise.set_value(ton::serialize_tl_object(ton::create_tl_object<ton::ton_api::engine_validator_success>(), true));
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void ValidatorEngine::process_control_query(td::uint16 port, ton::adnl::AdnlNodeIdShort src,
|
void ValidatorEngine::process_control_query(td::uint16 port, ton::adnl::AdnlNodeIdShort src,
|
||||||
ton::adnl::AdnlNodeIdShort dst, td::BufferSlice data,
|
ton::adnl::AdnlNodeIdShort dst, td::BufferSlice data,
|
||||||
|
|
|
@ -283,7 +283,7 @@ class ValidatorEngine : public td::actor::Actor {
|
||||||
void load_empty_local_config(td::Promise<td::Unit> promise);
|
void load_empty_local_config(td::Promise<td::Unit> promise);
|
||||||
void load_local_config(td::Promise<td::Unit> promise);
|
void load_local_config(td::Promise<td::Unit> promise);
|
||||||
void load_config(td::Promise<td::Unit> promise);
|
void load_config(td::Promise<td::Unit> promise);
|
||||||
void init_validator_options();
|
void set_shard_check_function();
|
||||||
|
|
||||||
void start();
|
void start();
|
||||||
|
|
||||||
|
|
|
@ -386,6 +386,10 @@ class ValidatorManagerImpl : public ValidatorManager {
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void update_options(td::Ref<ValidatorManagerOptions> opts) override {
|
||||||
|
opts_ = std::move(opts);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PublicKeyHash local_id_;
|
PublicKeyHash local_id_;
|
||||||
|
|
||||||
|
|
|
@ -445,6 +445,9 @@ class ValidatorManagerImpl : public ValidatorManager {
|
||||||
void add_collator(adnl::AdnlNodeIdShort id, ShardIdFull shard) override {
|
void add_collator(adnl::AdnlNodeIdShort id, ShardIdFull shard) override {
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
|
void update_options(td::Ref<ValidatorManagerOptions> opts) override {
|
||||||
|
opts_ = std::move(opts);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
td::Ref<ValidatorManagerOptions> opts_;
|
td::Ref<ValidatorManagerOptions> opts_;
|
||||||
|
|
|
@ -2696,6 +2696,16 @@ void ValidatorManagerImpl::add_collator(adnl::AdnlNodeIdShort id, ShardIdFull sh
|
||||||
td::actor::send_closure(it->second, &CollatorNode::add_shard, shard);
|
td::actor::send_closure(it->second, &CollatorNode::add_shard, shard);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ValidatorManagerImpl::update_options(td::Ref<ValidatorManagerOptions> opts) {
|
||||||
|
if (!shard_client_.empty()) {
|
||||||
|
td::actor::send_closure(shard_client_, &ShardClient::update_options, opts);
|
||||||
|
}
|
||||||
|
if (!serializer_.empty()) {
|
||||||
|
td::actor::send_closure(serializer_, &AsyncStateSerializer::update_options, opts);
|
||||||
|
}
|
||||||
|
opts_ = std::move(opts);
|
||||||
|
}
|
||||||
|
|
||||||
td::actor::ActorOwn<ValidatorManagerInterface> ValidatorManagerFactory::create(
|
td::actor::ActorOwn<ValidatorManagerInterface> ValidatorManagerFactory::create(
|
||||||
td::Ref<ValidatorManagerOptions> opts, std::string db_root, td::actor::ActorId<keyring::Keyring> keyring,
|
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<adnl::Adnl> adnl, td::actor::ActorId<rldp::Rldp> rldp,
|
||||||
|
|
|
@ -556,6 +556,7 @@ class ValidatorManagerImpl : public ValidatorManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_collator(adnl::AdnlNodeIdShort id, ShardIdFull shard) override;
|
void add_collator(adnl::AdnlNodeIdShort id, ShardIdFull shard) override;
|
||||||
|
void update_options(td::Ref<ValidatorManagerOptions> opts) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
td::Timestamp resend_shard_blocks_at_;
|
td::Timestamp resend_shard_blocks_at_;
|
||||||
|
|
|
@ -331,6 +331,10 @@ void ShardClient::force_update_shard_client_ex(BlockHandle handle, td::Ref<Maste
|
||||||
applied_all_shards();
|
applied_all_shards();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ShardClient::update_options(td::Ref<ValidatorManagerOptions> opts) {
|
||||||
|
opts_ = std::move(opts);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace validator
|
} // namespace validator
|
||||||
|
|
||||||
} // namespace ton
|
} // namespace ton
|
||||||
|
|
|
@ -97,6 +97,8 @@ class ShardClient : public td::actor::Actor {
|
||||||
|
|
||||||
void force_update_shard_client(BlockHandle handle, td::Promise<td::Unit> promise);
|
void force_update_shard_client(BlockHandle handle, td::Promise<td::Unit> promise);
|
||||||
void force_update_shard_client_ex(BlockHandle handle, td::Ref<MasterchainState> state, td::Promise<td::Unit> promise);
|
void force_update_shard_client_ex(BlockHandle handle, td::Ref<MasterchainState> state, td::Promise<td::Unit> promise);
|
||||||
|
|
||||||
|
void update_options(td::Ref<ValidatorManagerOptions> opts);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace validator
|
} // namespace validator
|
||||||
|
|
|
@ -91,6 +91,10 @@ class AsyncStateSerializer : public td::actor::Actor {
|
||||||
void fail_handler(td::Status reason);
|
void fail_handler(td::Status reason);
|
||||||
void fail_handler_cont();
|
void fail_handler_cont();
|
||||||
void success_handler();
|
void success_handler();
|
||||||
|
|
||||||
|
void update_options(td::Ref<ValidatorManagerOptions> opts) {
|
||||||
|
opts_ = std::move(opts);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace validator
|
} // namespace validator
|
||||||
|
|
|
@ -228,6 +228,7 @@ class ValidatorManagerInterface : public td::actor::Actor {
|
||||||
td::Promise<tl_object_ptr<ton_api::engine_validator_validatorSessionsInfo>> promise) = 0;
|
td::Promise<tl_object_ptr<ton_api::engine_validator_validatorSessionsInfo>> promise) = 0;
|
||||||
|
|
||||||
virtual void add_collator(adnl::AdnlNodeIdShort id, ShardIdFull shard) = 0;
|
virtual void add_collator(adnl::AdnlNodeIdShort id, ShardIdFull shard) = 0;
|
||||||
|
virtual void update_options(td::Ref<ValidatorManagerOptions> opts) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace validator
|
} // namespace validator
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue