mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Add collator options (#1052)
* Set collator options from validator console * Fix compilation error in manager-disk * Defer all messages if out msg queue is too big * Fix checking queue size in collator --------- Co-authored-by: SpyCheese <mikle98@yandex.ru>
This commit is contained in:
parent
c54f095c1b
commit
57f95cc282
22 changed files with 294 additions and 27 deletions
|
@ -3405,7 +3405,7 @@ bool ValidateQuery::check_account_dispatch_queue_update(td::Bits256 addr, Ref<vm
|
|||
}
|
||||
}
|
||||
if (old_dict_size > 0 && max_removed_lt == 0) {
|
||||
have_unprocessed_account_dispatch_queue_ = true;
|
||||
++processed_account_dispatch_queues_;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -3432,6 +3432,27 @@ bool ValidateQuery::unpack_dispatch_queue_update() {
|
|||
if (!res) {
|
||||
return reject_query("invalid DispatchQueue dictionary in the new state");
|
||||
}
|
||||
|
||||
if (old_out_msg_queue_size_ <= compute_phase_cfg_.size_limits.defer_out_queue_size_limit) {
|
||||
// Check that at least one message was taken from each AccountDispatchQueue
|
||||
try {
|
||||
have_unprocessed_account_dispatch_queue_ = false;
|
||||
td::uint64 total_account_dispatch_queues = 0;
|
||||
ps_.dispatch_queue_->check_for_each([&](Ref<vm::CellSlice>, td::ConstBitPtr, int n) -> bool {
|
||||
assert(n == 352);
|
||||
++total_account_dispatch_queues;
|
||||
if (total_account_dispatch_queues > processed_account_dispatch_queues_) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
have_unprocessed_account_dispatch_queue_ =
|
||||
(total_account_dispatch_queues != processed_account_dispatch_queues_);
|
||||
} catch (vm::VmVirtError&) {
|
||||
// VmVirtError can happen if we have only a proof of ShardState
|
||||
have_unprocessed_account_dispatch_queue_ = true;
|
||||
}
|
||||
}
|
||||
} catch (vm::VmError& err) {
|
||||
return reject_query("invalid DispatchQueue dictionary difference between the old and the new state: "s +
|
||||
err.get_msg());
|
||||
|
@ -3694,7 +3715,8 @@ bool ValidateQuery::check_in_msg(td::ConstBitPtr key, Ref<vm::CellSlice> in_msg)
|
|||
}
|
||||
if (have_unprocessed_account_dispatch_queue_ && tag != block::gen::InMsg::msg_import_ext &&
|
||||
tag != block::gen::InMsg::msg_import_deferred_tr && tag != block::gen::InMsg::msg_import_deferred_fin) {
|
||||
// Collator is requeired to take at least one message from each AccountDispatchQueue (unless the block is full)
|
||||
// Collator is requeired to take at least one message from each AccountDispatchQueue
|
||||
// (unless the block is full or unless out_msg_queue_size is big)
|
||||
// If some AccountDispatchQueue is unporcessed then it's not allowed to import other messages except for externals
|
||||
return reject_query("required DispatchQueue processing is not done, but some other internal messages are imported");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue