1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-03-09 15:40:10 +00:00

Add "delshard", "delcollator" to validator-engine-console

This commit is contained in:
SpyCheese 2022-10-17 13:24:59 +03:00
parent e3823c46f3
commit d4339b839c
13 changed files with 241 additions and 5 deletions

View file

@ -54,10 +54,20 @@ void CollatorNode::tear_down() {
}
void CollatorNode::add_shard(ShardIdFull shard) {
if (std::find(shards_.begin(), shards_.end(), shard) != shards_.end()) {
return;
}
LOG(INFO) << "Collator node: local_id=" << local_id_ << " , shard=" << shard.to_str();
shards_.push_back(shard);
}
void CollatorNode::del_shard(ShardIdFull shard) {
auto it = std::find(shards_.begin(), shards_.end(), shard);
if (it != shards_.end()) {
shards_.erase(it);
}
}
void CollatorNode::new_masterchain_block_notification(td::Ref<MasterchainState> state) {
std::vector<BlockIdExt> top_blocks = {state->get_block_id()};
std::vector<ShardIdFull> next_shards;

View file

@ -32,6 +32,7 @@ class CollatorNode : public td::actor::Actor {
void start_up() override;
void tear_down() override;
void add_shard(ShardIdFull shard);
void del_shard(ShardIdFull shard);
void new_masterchain_block_notification(td::Ref<MasterchainState> state);

View file

@ -395,6 +395,9 @@ class ValidatorManagerImpl : public ValidatorManager {
void add_collator(adnl::AdnlNodeIdShort id, ShardIdFull shard) override {
UNREACHABLE();
}
void del_collator(adnl::AdnlNodeIdShort id, ShardIdFull shard) override {
UNREACHABLE();
}
void update_options(td::Ref<ValidatorManagerOptions> opts) override {
opts_ = std::move(opts);

View file

@ -454,6 +454,9 @@ class ValidatorManagerImpl : public ValidatorManager {
void add_collator(adnl::AdnlNodeIdShort id, ShardIdFull shard) override {
UNREACHABLE();
}
void del_collator(adnl::AdnlNodeIdShort id, ShardIdFull shard) override {
UNREACHABLE();
}
void update_options(td::Ref<ValidatorManagerOptions> opts) override {
opts_ = std::move(opts);
}

View file

@ -1795,7 +1795,7 @@ void ValidatorManagerImpl::new_masterchain_block() {
last_masterchain_block_handle_, last_masterchain_state_);
}
for (auto &c : collator_nodes_) {
td::actor::send_closure(c.second, &CollatorNode::new_masterchain_block_notification, last_masterchain_state_);
td::actor::send_closure(c.second.actor, &CollatorNode::new_masterchain_block_notification, last_masterchain_state_);
}
if (last_masterchain_seqno_ % 1024 == 0) {
@ -2722,10 +2722,23 @@ void ValidatorManagerImpl::get_validator_sessions_info(
void ValidatorManagerImpl::add_collator(adnl::AdnlNodeIdShort id, ShardIdFull shard) {
auto it = collator_nodes_.find(id);
if (it == collator_nodes_.end()) {
auto actor = td::actor::create_actor<CollatorNode>("collatornode", id, actor_id(this), adnl_, rldp_);
it = collator_nodes_.emplace(id, std::move(actor)).first;
it = collator_nodes_.emplace(id, Collator()).first;
it->second.actor = td::actor::create_actor<CollatorNode>("collatornode", id, actor_id(this), adnl_, rldp_);
}
it->second.shards.insert(shard);
td::actor::send_closure(it->second.actor, &CollatorNode::add_shard, shard);
}
void ValidatorManagerImpl::del_collator(adnl::AdnlNodeIdShort id, ShardIdFull shard) {
auto it = collator_nodes_.find(id);
if (it == collator_nodes_.end()) {
return;
}
td::actor::send_closure(it->second.actor, &CollatorNode::del_shard, shard);
it->second.shards.erase(shard);
if (it->second.shards.empty()) {
collator_nodes_.erase(it);
}
td::actor::send_closure(it->second, &CollatorNode::add_shard, shard);
}
void ValidatorManagerImpl::update_options(td::Ref<ValidatorManagerOptions> opts) {

View file

@ -563,6 +563,7 @@ class ValidatorManagerImpl : public ValidatorManager {
void add_persistent_state_description(td::Ref<PersistentStateDescription> desc) override;
void add_collator(adnl::AdnlNodeIdShort id, ShardIdFull shard) override;
void del_collator(adnl::AdnlNodeIdShort id, ShardIdFull shard) override;
void update_options(td::Ref<ValidatorManagerOptions> opts) override;
private:
@ -639,7 +640,11 @@ class ValidatorManagerImpl : public ValidatorManager {
std::map<BlockSeqno, WaitList<td::actor::Actor, td::Unit>> shard_client_waiters_;
std::map<adnl::AdnlNodeIdShort, td::actor::ActorOwn<CollatorNode>> collator_nodes_;
struct Collator {
td::actor::ActorOwn<CollatorNode> actor;
std::set<ShardIdFull> shards;
};
std::map<adnl::AdnlNodeIdShort, Collator> collator_nodes_;
std::set<ShardIdFull> extra_active_shards_;
std::map<ShardIdFull, BlockSeqno> last_validated_blocks_;

View file

@ -238,6 +238,7 @@ class ValidatorManagerInterface : public td::actor::Actor {
td::Promise<tl_object_ptr<ton_api::engine_validator_validatorSessionsInfo>> promise) = 0;
virtual void add_collator(adnl::AdnlNodeIdShort id, ShardIdFull shard) = 0;
virtual void del_collator(adnl::AdnlNodeIdShort id, ShardIdFull shard) = 0;
virtual void update_options(td::Ref<ValidatorManagerOptions> opts) = 0;
};