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

Don't store candidates on collator nodes

This commit is contained in:
SpyCheese 2023-07-27 17:15:11 +03:00
parent 503e10c05a
commit 44ba040934
7 changed files with 31 additions and 19 deletions

View file

@ -271,7 +271,8 @@ class HardforkCreator : public td::actor::Actor {
td::Promise<std::string> promise) override { td::Promise<std::string> promise) override {
} }
void download_out_msg_queue_proof(ton::BlockIdExt block_id, ton::ShardIdFull dst_shard, td::Timestamp timeout, void download_out_msg_queue_proof(ton::BlockIdExt block_id, ton::ShardIdFull dst_shard,
block::ImportedMsgQueueLimits limits, td::Timestamp timeout,
td::Promise<td::Ref<ton::validator::OutMsgQueueProof>> promise) override { td::Promise<td::Ref<ton::validator::OutMsgQueueProof>> promise) override {
} }

View file

@ -372,7 +372,8 @@ class TestNode : public td::actor::Actor {
td::Promise<std::string> promise) override { td::Promise<std::string> promise) override {
} }
void download_out_msg_queue_proof(ton::BlockIdExt block_id, ton::ShardIdFull dst_shard, td::Timestamp timeout, void download_out_msg_queue_proof(ton::BlockIdExt block_id, ton::ShardIdFull dst_shard,
block::ImportedMsgQueueLimits, td::Timestamp timeout,
td::Promise<td::Ref<ton::validator::OutMsgQueueProof>> promise) override { td::Promise<td::Ref<ton::validator::OutMsgQueueProof>> promise) override {
} }

View file

@ -272,7 +272,8 @@ void CollatorNode::receive_query_cont(ShardIdFull shard, td::Ref<MasterchainStat
std::vector<BlockIdExt> prev_blocks, Ed25519_PublicKey creator, std::vector<BlockIdExt> prev_blocks, Ed25519_PublicKey creator,
td::Promise<BlockCandidate> promise) { td::Promise<BlockCandidate> promise) {
run_collate_query(shard, min_mc_state->get_block_id(), std::move(prev_blocks), creator, run_collate_query(shard, min_mc_state->get_block_id(), std::move(prev_blocks), creator,
min_mc_state->get_validator_set(shard), manager_, td::Timestamp::in(10.0), std::move(promise)); min_mc_state->get_validator_set(shard), manager_, td::Timestamp::in(10.0), std::move(promise),
CollateMode::skip_store_candidate);
} }
void CollatorNode::process_result(std::shared_ptr<CacheEntry> cache_entry, td::Result<BlockCandidate> R) { void CollatorNode::process_result(std::shared_ptr<CacheEntry> cache_entry, td::Result<BlockCandidate> R) {

View file

@ -26,6 +26,7 @@ namespace ton {
namespace validator { namespace validator {
enum ValidateMode { fake = 1, full_collated_data = 2 }; enum ValidateMode { fake = 1, full_collated_data = 2 };
enum CollateMode { skip_store_candidate = 1 };
td::actor::ActorOwn<Db> create_db_actor(td::actor::ActorId<ValidatorManager> manager, std::string db_root_); td::actor::ActorOwn<Db> create_db_actor(td::actor::ActorId<ValidatorManager> manager, std::string db_root_);
td::actor::ActorOwn<LiteServerCache> create_liteserver_cache_actor(td::actor::ActorId<ValidatorManager> manager, td::actor::ActorOwn<LiteServerCache> create_liteserver_cache_actor(td::actor::ActorId<ValidatorManager> manager,
@ -83,9 +84,9 @@ void run_validate_query(ShardIdFull shard, BlockIdExt min_masterchain_block_id,
td::actor::ActorId<ValidatorManager> manager, td::Timestamp timeout, td::actor::ActorId<ValidatorManager> manager, td::Timestamp timeout,
td::Promise<ValidateCandidateResult> promise, unsigned mode = 0); td::Promise<ValidateCandidateResult> promise, unsigned mode = 0);
void run_collate_query(ShardIdFull shard, const BlockIdExt& min_masterchain_block_id, std::vector<BlockIdExt> prev, void run_collate_query(ShardIdFull shard, const BlockIdExt& min_masterchain_block_id, std::vector<BlockIdExt> prev,
Ed25519_PublicKey local_id, td::Ref<ValidatorSet> validator_set, Ed25519_PublicKey creator, td::Ref<ValidatorSet> validator_set,
td::actor::ActorId<ValidatorManager> manager, td::Timestamp timeout, td::actor::ActorId<ValidatorManager> manager, td::Timestamp timeout,
td::Promise<BlockCandidate> promise); td::Promise<BlockCandidate> promise, unsigned mode = 0);
void run_collate_hardfork(ShardIdFull shard, const BlockIdExt& min_masterchain_block_id, std::vector<BlockIdExt> prev, void run_collate_hardfork(ShardIdFull shard, const BlockIdExt& min_masterchain_block_id, std::vector<BlockIdExt> prev,
td::actor::ActorId<ValidatorManager> manager, td::Timestamp timeout, td::actor::ActorId<ValidatorManager> manager, td::Timestamp timeout,
td::Promise<BlockCandidate> promise); td::Promise<BlockCandidate> promise);

View file

@ -75,6 +75,7 @@ class Collator final : public td::actor::Actor {
td::Timestamp timeout; td::Timestamp timeout;
td::Timestamp queue_cleanup_timeout_, soft_timeout_, medium_timeout_; td::Timestamp queue_cleanup_timeout_, soft_timeout_, medium_timeout_;
td::Promise<BlockCandidate> main_promise; td::Promise<BlockCandidate> main_promise;
unsigned mode_ = 0;
ton::BlockSeqno last_block_seqno{0}; ton::BlockSeqno last_block_seqno{0};
ton::BlockSeqno prev_mc_block_seqno{0}; ton::BlockSeqno prev_mc_block_seqno{0};
ton::BlockSeqno new_block_seqno{0}; ton::BlockSeqno new_block_seqno{0};
@ -89,7 +90,8 @@ class Collator final : public td::actor::Actor {
public: public:
Collator(ShardIdFull shard, bool is_hardfork, BlockIdExt min_masterchain_block_id, Collator(ShardIdFull shard, bool is_hardfork, BlockIdExt min_masterchain_block_id,
std::vector<BlockIdExt> prev, Ref<ValidatorSet> validator_set, Ed25519_PublicKey collator_id, std::vector<BlockIdExt> prev, Ref<ValidatorSet> validator_set, Ed25519_PublicKey collator_id,
td::actor::ActorId<ValidatorManager> manager, td::Timestamp timeout, td::Promise<BlockCandidate> promise); td::actor::ActorId<ValidatorManager> manager, td::Timestamp timeout, td::Promise<BlockCandidate> promise,
unsigned mode);
~Collator() override = default; ~Collator() override = default;
bool is_busy() const { bool is_busy() const {
return busy_; return busy_;

View file

@ -57,7 +57,7 @@ static inline bool dbg(int c) {
Collator::Collator(ShardIdFull shard, bool is_hardfork, BlockIdExt min_masterchain_block_id, Collator::Collator(ShardIdFull shard, bool is_hardfork, BlockIdExt min_masterchain_block_id,
std::vector<BlockIdExt> prev, td::Ref<ValidatorSet> validator_set, Ed25519_PublicKey collator_id, std::vector<BlockIdExt> prev, td::Ref<ValidatorSet> validator_set, Ed25519_PublicKey collator_id,
td::actor::ActorId<ValidatorManager> manager, td::Timestamp timeout, td::actor::ActorId<ValidatorManager> manager, td::Timestamp timeout,
td::Promise<BlockCandidate> promise) td::Promise<BlockCandidate> promise, unsigned mode)
: shard_(shard) : shard_(shard)
, is_hardfork_(is_hardfork) , is_hardfork_(is_hardfork)
, min_mc_block_id{min_masterchain_block_id} , min_mc_block_id{min_masterchain_block_id}
@ -71,6 +71,7 @@ Collator::Collator(ShardIdFull shard, bool is_hardfork, BlockIdExt min_mastercha
, soft_timeout_(td::Timestamp::at(timeout.at() - 3.0)) , soft_timeout_(td::Timestamp::at(timeout.at() - 3.0))
, medium_timeout_(td::Timestamp::at(timeout.at() - 1.5)) , medium_timeout_(td::Timestamp::at(timeout.at() - 1.5))
, main_promise(std::move(promise)) , main_promise(std::move(promise))
, mode_(mode)
, perf_timer_("collate", 0.1, [manager](double duration) { , perf_timer_("collate", 0.1, [manager](double duration) {
send_closure(manager, &ValidatorManager::add_perf_timer_stat, "collate", duration); send_closure(manager, &ValidatorManager::add_perf_timer_stat, "collate", duration);
}) { }) {
@ -4200,6 +4201,9 @@ bool Collator::create_block_candidate() {
<< consensus_config.max_collated_data_size << ")"); << consensus_config.max_collated_data_size << ")");
} }
// 4. save block candidate // 4. save block candidate
if (mode_ & CollateMode::skip_store_candidate) {
td::actor::send_closure_later(actor_id(this), &Collator::return_block_candidate, td::Unit());
} else {
LOG(INFO) << "saving new BlockCandidate"; LOG(INFO) << "saving new BlockCandidate";
td::actor::send_closure_later(manager, &ValidatorManager::set_block_candidate, block_candidate->id, td::actor::send_closure_later(manager, &ValidatorManager::set_block_candidate, block_candidate->id,
block_candidate->clone(), [self = get_self()](td::Result<td::Unit> saved) -> void { block_candidate->clone(), [self = get_self()](td::Result<td::Unit> saved) -> void {
@ -4207,6 +4211,7 @@ bool Collator::create_block_candidate() {
td::actor::send_closure_later(std::move(self), &Collator::return_block_candidate, td::actor::send_closure_later(std::move(self), &Collator::return_block_candidate,
std::move(saved)); std::move(saved));
}); });
}
// 5. communicate about bad and delayed external messages // 5. communicate about bad and delayed external messages
if (!bad_ext_msgs_.empty() || !delay_ext_msgs_.empty()) { if (!bad_ext_msgs_.empty() || !delay_ext_msgs_.empty()) {
LOG(INFO) << "sending complete_external_messages() to Manager"; LOG(INFO) << "sending complete_external_messages() to Manager";

View file

@ -210,9 +210,9 @@ void run_validate_query(ShardIdFull shard, BlockIdExt min_masterchain_block_id,
} }
void run_collate_query(ShardIdFull shard, const BlockIdExt& min_masterchain_block_id, std::vector<BlockIdExt> prev, void run_collate_query(ShardIdFull shard, const BlockIdExt& min_masterchain_block_id, std::vector<BlockIdExt> prev,
Ed25519_PublicKey collator_id, td::Ref<ValidatorSet> validator_set, Ed25519_PublicKey creator, td::Ref<ValidatorSet> validator_set,
td::actor::ActorId<ValidatorManager> manager, td::Timestamp timeout, td::actor::ActorId<ValidatorManager> manager, td::Timestamp timeout,
td::Promise<BlockCandidate> promise) { td::Promise<BlockCandidate> promise, unsigned mode) {
BlockSeqno seqno = 0; BlockSeqno seqno = 0;
for (auto& p : prev) { for (auto& p : prev) {
if (p.seqno() > seqno) { if (p.seqno() > seqno) {
@ -220,8 +220,8 @@ void run_collate_query(ShardIdFull shard, const BlockIdExt& min_masterchain_bloc
} }
} }
td::actor::create_actor<Collator>(PSTRING() << "collate" << shard.to_str() << ":" << (seqno + 1), shard, false, td::actor::create_actor<Collator>(PSTRING() << "collate" << shard.to_str() << ":" << (seqno + 1), shard, false,
min_masterchain_block_id, std::move(prev), std::move(validator_set), collator_id, min_masterchain_block_id, std::move(prev), std::move(validator_set), creator,
std::move(manager), timeout, std::move(promise)) std::move(manager), timeout, std::move(promise), mode)
.release(); .release();
} }
@ -236,7 +236,8 @@ void run_collate_hardfork(ShardIdFull shard, const BlockIdExt& min_masterchain_b
} }
td::actor::create_actor<Collator>(PSTRING() << "collate" << shard.to_str() << ":" << (seqno + 1), shard, true, td::actor::create_actor<Collator>(PSTRING() << "collate" << shard.to_str() << ":" << (seqno + 1), shard, true,
min_masterchain_block_id, std::move(prev), td::Ref<ValidatorSet>{}, min_masterchain_block_id, std::move(prev), td::Ref<ValidatorSet>{},
Ed25519_PublicKey{Bits256::zero()}, std::move(manager), timeout, std::move(promise)) Ed25519_PublicKey{Bits256::zero()}, std::move(manager), timeout, std::move(promise),
0)
.release(); .release();
} }