mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Merge branch 'testnet' into accelerator
This commit is contained in:
commit
bf884b5611
55 changed files with 866 additions and 326 deletions
|
@ -437,6 +437,10 @@ void ValidatorManagerImpl::add_external_message(td::Ref<ExtMessage> msg, int pri
|
|||
ext_messages_hashes_[id.hash] = {priority, id};
|
||||
}
|
||||
void ValidatorManagerImpl::check_external_message(td::BufferSlice data, td::Promise<td::Ref<ExtMessage>> promise) {
|
||||
if (!started_) {
|
||||
promise.set_error(td::Status::Error(ErrorCode::notready, "node not synced"));
|
||||
return;
|
||||
}
|
||||
auto state = do_get_last_liteserver_state();
|
||||
if (state.is_null()) {
|
||||
promise.set_error(td::Status::Error(ErrorCode::notready, "not ready"));
|
||||
|
@ -458,11 +462,9 @@ void ValidatorManagerImpl::check_external_message(td::BufferSlice data, td::Prom
|
|||
|
||||
promise = [self = this, wc, addr, promise = std::move(promise),
|
||||
SelfId = actor_id(this)](td::Result<td::Ref<ExtMessage>> R) mutable {
|
||||
if (R.is_error()) {
|
||||
promise.set_error(R.move_as_error());
|
||||
return;
|
||||
}
|
||||
td::actor::send_lambda(SelfId, [=, promise = std::move(promise), message = R.move_as_ok()]() mutable {
|
||||
td::actor::send_lambda(SelfId, [=, promise = std::move(promise), R = std::move(R)]() mutable {
|
||||
++(R.is_ok() ? self->total_check_ext_messages_ok_ : self->total_check_ext_messages_error_);
|
||||
TRY_RESULT_PROMISE(promise, message, std::move(R));
|
||||
if (self->checked_ext_msg_counter_.inc_msg_count(wc, addr) > max_ext_msg_per_addr()) {
|
||||
promise.set_error(
|
||||
td::Status::Error(PSTRING() << "too many external messages to address " << wc << ":" << addr.to_hex()));
|
||||
|
@ -760,11 +762,10 @@ void ValidatorManagerImpl::wait_block_state(BlockHandle handle, td::uint32 prior
|
|||
auto P = td::PromiseCreator::lambda([SelfId = actor_id(this), handle](td::Result<td::Ref<ShardState>> R) {
|
||||
td::actor::send_closure(SelfId, &ValidatorManagerImpl::finished_wait_state, handle, std::move(R));
|
||||
});
|
||||
auto id =
|
||||
td::actor::create_actor<WaitBlockState>("waitstate", handle, priority, actor_id(this),
|
||||
td::Timestamp::at(timeout.at() + 10.0), std::move(P),
|
||||
get_block_persistent_state(handle->id()))
|
||||
.release();
|
||||
auto id = td::actor::create_actor<WaitBlockState>("waitstate", handle, priority, actor_id(this),
|
||||
td::Timestamp::at(timeout.at() + 10.0), std::move(P),
|
||||
get_block_persistent_state_to_download(handle->id()))
|
||||
.release();
|
||||
wait_state_[handle->id()].actor_ = id;
|
||||
it = wait_state_.find(handle->id());
|
||||
}
|
||||
|
@ -1283,9 +1284,10 @@ void ValidatorManagerImpl::finished_wait_state(BlockHandle handle, td::Result<td
|
|||
auto P = td::PromiseCreator::lambda([SelfId = actor_id(this), handle](td::Result<td::Ref<ShardState>> R) {
|
||||
td::actor::send_closure(SelfId, &ValidatorManagerImpl::finished_wait_state, handle, std::move(R));
|
||||
});
|
||||
auto id = td::actor::create_actor<WaitBlockState>("waitstate", handle, X.second, actor_id(this), X.first,
|
||||
std::move(P), get_block_persistent_state(handle->id()))
|
||||
.release();
|
||||
auto id =
|
||||
td::actor::create_actor<WaitBlockState>("waitstate", handle, X.second, actor_id(this), X.first,
|
||||
std::move(P), get_block_persistent_state_to_download(handle->id()))
|
||||
.release();
|
||||
it->second.actor_ = id;
|
||||
return;
|
||||
}
|
||||
|
@ -2290,7 +2292,7 @@ void ValidatorManagerImpl::update_shards() {
|
|||
}
|
||||
}
|
||||
|
||||
bool validating_masterchain = false;
|
||||
active_validator_groups_master_ = active_validator_groups_shard_ = 0;
|
||||
if (allow_validate_) {
|
||||
for (auto &desc : new_shards) {
|
||||
auto shard = desc.first;
|
||||
|
@ -2307,9 +2309,7 @@ void ValidatorManagerImpl::update_shards() {
|
|||
auto validator_id = get_validator(shard, val_set);
|
||||
|
||||
if (!validator_id.is_zero()) {
|
||||
if (shard.is_masterchain()) {
|
||||
validating_masterchain = true;
|
||||
}
|
||||
++(shard.is_masterchain() ? active_validator_groups_master_ : active_validator_groups_shard_);
|
||||
auto val_group_id = get_validator_set_id(shard, val_set, opts_hash, key_seqno, opts);
|
||||
|
||||
if (force_recover) {
|
||||
|
@ -3044,8 +3044,8 @@ void ValidatorManagerImpl::prepare_stats(td::Promise<std::vector<std::pair<std::
|
|||
vec.emplace_back("knownkeymasterchainblock", last_known_key_block_handle_->id().to_str());
|
||||
vec.emplace_back("rotatemasterchainblock", last_rotate_block_id_.to_str());
|
||||
//vec.emplace_back("shardclientmasterchainseqno", td::to_string(min_confirmed_masterchain_seqno_));
|
||||
vec.emplace_back("stateserializermasterchainseqno", td::to_string(state_serializer_masterchain_seqno_));
|
||||
}
|
||||
|
||||
td::NamedThreadSafeCounter::get_default().for_each([&](auto key, auto value) {
|
||||
vec.emplace_back("counter." + key, PSTRING() << value);
|
||||
});
|
||||
|
@ -3063,9 +3063,48 @@ void ValidatorManagerImpl::prepare_stats(td::Promise<std::vector<std::pair<std::
|
|||
td::actor::send_closure(shard_client_, &ShardClient::get_processed_masterchain_block, std::move(P));
|
||||
}
|
||||
|
||||
vec.emplace_back("start_time", td::to_string(started_at_));
|
||||
for (int iter = 0; iter < 2; ++iter) {
|
||||
td::StringBuilder sb;
|
||||
td::uint32 total = 0;
|
||||
for (const auto &p : (iter ? total_ls_queries_error_ : total_ls_queries_ok_)) {
|
||||
sb << lite_query_name_by_id(p.first) << ":" << p.second << " ";
|
||||
total += p.second;
|
||||
}
|
||||
sb << "TOTAL:" << total;
|
||||
vec.emplace_back(PSTRING() << "total.ls_queries_" << (iter ? "error" : "ok"), sb.as_cslice().str());
|
||||
}
|
||||
vec.emplace_back("total.ext_msg_check",
|
||||
PSTRING() << "ok:" << total_check_ext_messages_ok_ << " error:" << total_check_ext_messages_error_);
|
||||
vec.emplace_back("total.collated_blocks.master", PSTRING() << "ok:" << total_collated_blocks_master_ok_
|
||||
<< " error:" << total_collated_blocks_master_error_);
|
||||
vec.emplace_back("total.collated_blocks.shard", PSTRING() << "ok:" << total_collated_blocks_shard_ok_
|
||||
<< " error:" << total_collated_blocks_shard_error_);
|
||||
vec.emplace_back("total.validated_blocks.master", PSTRING() << "ok:" << total_validated_blocks_master_ok_
|
||||
<< " error:" << total_validated_blocks_master_error_);
|
||||
vec.emplace_back("total.validated_blocks.shard", PSTRING() << "ok:" << total_validated_blocks_shard_ok_
|
||||
<< " error:" << total_validated_blocks_shard_error_);
|
||||
if (is_validator()) {
|
||||
vec.emplace_back("active_validator_groups", PSTRING() << "master:" << active_validator_groups_master_
|
||||
<< " shard:" << active_validator_groups_shard_);
|
||||
}
|
||||
|
||||
bool serializer_enabled = opts_->get_state_serializer_enabled();
|
||||
if (is_validator() && last_masterchain_state_->get_global_id() == -239) {
|
||||
serializer_enabled = false;
|
||||
}
|
||||
vec.emplace_back("stateserializerenabled", serializer_enabled ? "true" : "false");
|
||||
|
||||
merger.make_promise("").set_value(std::move(vec));
|
||||
|
||||
if (!serializer_.empty()) {
|
||||
td::actor::send_closure(serializer_, &AsyncStateSerializer::prepare_stats, merger.make_promise(""));
|
||||
}
|
||||
|
||||
td::actor::send_closure(db_, &Db::prepare_stats, merger.make_promise("db."));
|
||||
for (auto &[_, p] : stats_providers_) {
|
||||
p.second(merger.make_promise(p.first));
|
||||
}
|
||||
}
|
||||
|
||||
void ValidatorManagerImpl::prepare_perf_timer_stats(td::Promise<std::vector<PerfTimerStats>> promise) {
|
||||
|
@ -3551,11 +3590,18 @@ void ValidatorManagerImpl::got_persistent_state_descriptions(std::vector<td::Ref
|
|||
}
|
||||
}
|
||||
|
||||
td::Ref<PersistentStateDescription> ValidatorManagerImpl::get_block_persistent_state(BlockIdExt block_id) {
|
||||
td::Ref<PersistentStateDescription> ValidatorManagerImpl::get_block_persistent_state_to_download(BlockIdExt block_id) {
|
||||
if (block_id.is_masterchain()) {
|
||||
return {};
|
||||
}
|
||||
auto it = persistent_state_blocks_.find(block_id);
|
||||
if (it == persistent_state_blocks_.end()) {
|
||||
return {};
|
||||
}
|
||||
if (it->second->masterchain_id.seqno() + 16 >= min_confirmed_masterchain_seqno_) {
|
||||
// Do not download persistent states during ordinary shard client sync
|
||||
return {};
|
||||
}
|
||||
return it->second;
|
||||
}
|
||||
|
||||
|
@ -3568,10 +3614,20 @@ td::actor::ActorOwn<ValidatorManagerInterface> ValidatorManagerFactory::create(
|
|||
}
|
||||
|
||||
void ValidatorManagerImpl::log_collate_query_stats(CollationStats stats) {
|
||||
write_session_stats(stats);
|
||||
if (stats.status.is_ok()) {
|
||||
++(stats.block_id.is_masterchain() ? total_collated_blocks_master_ok_ : total_collated_blocks_shard_ok_);
|
||||
write_session_stats(stats);
|
||||
} else {
|
||||
++(stats.block_id.is_masterchain() ? total_collated_blocks_master_error_ : total_collated_blocks_shard_error_);
|
||||
}
|
||||
}
|
||||
|
||||
void ValidatorManagerImpl::log_validate_query_stats(ValidationStats stats) {
|
||||
if (stats.valid) {
|
||||
++(stats.block_id.is_masterchain() ? total_validated_blocks_master_ok_ : total_validated_blocks_shard_ok_);
|
||||
} else {
|
||||
++(stats.block_id.is_masterchain() ? total_validated_blocks_master_error_ : total_validated_blocks_shard_error_);
|
||||
}
|
||||
write_session_stats(stats);
|
||||
}
|
||||
|
||||
|
@ -3579,6 +3635,16 @@ void ValidatorManagerImpl::log_collator_node_response_stats(CollatorNodeResponse
|
|||
write_session_stats(stats);
|
||||
}
|
||||
|
||||
void ValidatorManagerImpl::register_stats_provider(
|
||||
td::uint64 idx, std::string prefix,
|
||||
std::function<void(td::Promise<std::vector<std::pair<std::string, std::string>>>)> callback) {
|
||||
stats_providers_[idx] = {std::move(prefix), std::move(callback)};
|
||||
}
|
||||
|
||||
void ValidatorManagerImpl::unregister_stats_provider(td::uint64 idx) {
|
||||
stats_providers_.erase(idx);
|
||||
}
|
||||
|
||||
size_t ValidatorManagerImpl::CheckedExtMsgCounter::get_msg_count(WorkchainId wc, StdSmcAddress addr) {
|
||||
before_query();
|
||||
auto it1 = counter_cur_.find({wc, addr});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue