Skip to content

Commit

Permalink
Don't store candidates on collator nodes
Browse files Browse the repository at this point in the history
  • Loading branch information
SpyCheese committed Jul 30, 2023
1 parent 503e10c commit 44ba040
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 19 deletions.
3 changes: 2 additions & 1 deletion create-hardfork/create-hardfork.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,8 @@ class HardforkCreator : public td::actor::Actor {

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 {
}

Expand Down
3 changes: 2 additions & 1 deletion test/test-ton-collator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,8 @@ class TestNode : public td::actor::Actor {

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 {
}

Expand Down
3 changes: 2 additions & 1 deletion validator/collator-node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,8 @@ void CollatorNode::receive_query_cont(ShardIdFull shard, td::Ref<MasterchainStat
std::vector<BlockIdExt> prev_blocks, Ed25519_PublicKey creator,
td::Promise<BlockCandidate> promise) {
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) {
Expand Down
5 changes: 3 additions & 2 deletions validator/fabric.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ namespace ton {
namespace validator {

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<LiteServerCache> create_liteserver_cache_actor(td::actor::ActorId<ValidatorManager> manager,
Expand Down Expand Up @@ -83,9 +84,9 @@ void run_validate_query(ShardIdFull shard, BlockIdExt min_masterchain_block_id,
td::actor::ActorId<ValidatorManager> manager, td::Timestamp timeout,
td::Promise<ValidateCandidateResult> promise, unsigned mode = 0);
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::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,
td::actor::ActorId<ValidatorManager> manager, td::Timestamp timeout,
td::Promise<BlockCandidate> promise);
Expand Down
4 changes: 3 additions & 1 deletion validator/impl/collator-impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ class Collator final : public td::actor::Actor {
td::Timestamp timeout;
td::Timestamp queue_cleanup_timeout_, soft_timeout_, medium_timeout_;
td::Promise<BlockCandidate> main_promise;
unsigned mode_ = 0;
ton::BlockSeqno last_block_seqno{0};
ton::BlockSeqno prev_mc_block_seqno{0};
ton::BlockSeqno new_block_seqno{0};
Expand All @@ -89,7 +90,8 @@ class Collator final : public td::actor::Actor {
public:
Collator(ShardIdFull shard, bool is_hardfork, BlockIdExt min_masterchain_block_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;
bool is_busy() const {
return busy_;
Expand Down
21 changes: 13 additions & 8 deletions validator/impl/collator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ static inline bool dbg(int c) {
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,
td::actor::ActorId<ValidatorManager> manager, td::Timestamp timeout,
td::Promise<BlockCandidate> promise)
td::Promise<BlockCandidate> promise, unsigned mode)
: shard_(shard)
, is_hardfork_(is_hardfork)
, min_mc_block_id{min_masterchain_block_id}
Expand All @@ -71,6 +71,7 @@ Collator::Collator(ShardIdFull shard, bool is_hardfork, BlockIdExt min_mastercha
, soft_timeout_(td::Timestamp::at(timeout.at() - 3.0))
, medium_timeout_(td::Timestamp::at(timeout.at() - 1.5))
, main_promise(std::move(promise))
, mode_(mode)
, perf_timer_("collate", 0.1, [manager](double duration) {
send_closure(manager, &ValidatorManager::add_perf_timer_stat, "collate", duration);
}) {
Expand Down Expand Up @@ -4200,13 +4201,17 @@ bool Collator::create_block_candidate() {
<< consensus_config.max_collated_data_size << ")");
}
// 4. save block candidate
LOG(INFO) << "saving new BlockCandidate";
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 {
LOG(DEBUG) << "got answer to set_block_candidate";
td::actor::send_closure_later(std::move(self), &Collator::return_block_candidate,
std::move(saved));
});
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";
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 {
LOG(DEBUG) << "got answer to set_block_candidate";
td::actor::send_closure_later(std::move(self), &Collator::return_block_candidate,
std::move(saved));
});
}
// 5. communicate about bad and delayed external messages
if (!bad_ext_msgs_.empty() || !delay_ext_msgs_.empty()) {
LOG(INFO) << "sending complete_external_messages() to Manager";
Expand Down
11 changes: 6 additions & 5 deletions validator/impl/fabric.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -210,18 +210,18 @@ 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,
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::Promise<BlockCandidate> promise) {
td::Promise<BlockCandidate> promise, unsigned mode) {
BlockSeqno seqno = 0;
for (auto& p : prev) {
if (p.seqno() > seqno) {
seqno = p.seqno();
}
}
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,
std::move(manager), timeout, std::move(promise))
min_masterchain_block_id, std::move(prev), std::move(validator_set), creator,
std::move(manager), timeout, std::move(promise), mode)
.release();
}

Expand All @@ -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,
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();
}

Expand Down

0 comments on commit 44ba040

Please sign in to comment.