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

Request persistent state size, add missing queries to full-node-master

This commit is contained in:
SpyCheese 2025-03-06 17:15:27 +03:00
parent cf50b4b5da
commit 61ef357941
19 changed files with 163 additions and 60 deletions

View file

@ -168,6 +168,7 @@ void DownloadState::got_block_state_description(td::BufferSlice data) {
},
[&, self = this](ton_api::tonNode_preparedState &f) {
if (masterchain_block_id_.is_valid()) {
request_total_size();
got_block_state_part(td::BufferSlice{}, 0);
return;
}
@ -190,8 +191,37 @@ void DownloadState::got_block_state_description(td::BufferSlice data) {
create_serialize_tl_object_suffix<ton_api::tonNode_query>(std::move(query)),
td::Timestamp::in(3.0), std::move(P));
}
status_.set_status(PSTRING() << block_id_.id.to_str() << " : download started");
}));
status_.set_status(PSTRING() << block_id_.id.to_str() << " : 0 bytes, 0B/s");
}
void DownloadState::request_total_size() {
auto P = td::PromiseCreator::lambda([SelfId = actor_id(this)](td::Result<td::BufferSlice> R) {
if (R.is_error()) {
return;
}
auto res = fetch_tl_object<ton_api::tonNode_persistentStateSize>(R.move_as_ok(), true);
if (res.is_error()) {
return;
}
td::actor::send_closure(SelfId, &DownloadState::got_total_size, res.ok()->size_);
});
td::BufferSlice query = create_serialize_tl_object<ton_api::tonNode_getPersistentStateSize>(
create_tl_block_id(block_id_), create_tl_block_id(masterchain_block_id_));
if (client_.empty()) {
td::actor::send_closure(overlays_, &overlay::Overlays::send_query_via, download_from_, local_id_, overlay_id_,
"get size", std::move(P), td::Timestamp::in(3.0), std::move(query),
FullNode::max_state_size(), rldp_);
} else {
td::actor::send_closure(client_, &adnl::AdnlExtClient::send_query, "get size",
create_serialize_tl_object_suffix<ton_api::tonNode_query>(std::move(query)),
td::Timestamp::in(3.0), std::move(P));
}
}
void DownloadState::got_total_size(td::uint64 size) {
total_size_ = size;
}
void DownloadState::got_block_state_part(td::BufferSlice data, td::uint32 requested_size) {
@ -203,10 +233,22 @@ void DownloadState::got_block_state_part(td::BufferSlice data, td::uint32 reques
if (elapsed > 5.0) {
prev_logged_timer_ = td::Timer();
auto speed = (td::uint64)((double)(sum_ - prev_logged_sum_) / elapsed);
LOG(WARNING) << "downloading state " << block_id_.to_str() << ": " << td::format::as_size(sum_) << " ("
<< td::format::as_size(speed) << "/s)";
status_.set_status(PSTRING() << block_id_.id.to_str() << " : " << sum_ << " bytes, " << td::format::as_size(speed)
<< "/s");
td::StringBuilder sb;
sb << td::format::as_size(sum_);
if (total_size_) {
sb << "/" << td::format::as_size(total_size_);
}
sb << " (" << td::format::as_size(speed) << "/s";
if (total_size_) {
sb << ", " << td::StringBuilder::FixedDouble((double)sum_ / (double)total_size_ * 100.0, 2) << "%";
if (speed > 0 && total_size_ >= sum_) {
td::uint64 rem = (total_size_ - sum_) / speed;
sb << ", " << rem << "s remaining";
}
}
sb << ")";
LOG(WARNING) << "downloading state " << block_id_.to_str() << " : " << sb.as_cslice();
status_.set_status(PSTRING() << block_id_.id.to_str() << " : " << sb.as_cslice());
prev_logged_sum_ = sum_;
}

View file

@ -49,6 +49,8 @@ class DownloadState : public td::actor::Actor {
void got_block_handle(BlockHandle handle);
void got_node_to_download(adnl::AdnlNodeIdShort node);
void got_block_state_description(td::BufferSlice data_description);
void request_total_size();
void got_total_size(td::uint64 size);
void got_block_state_part(td::BufferSlice data, td::uint32 requested_size);
void got_block_state(td::BufferSlice data);
@ -77,6 +79,7 @@ class DownloadState : public td::actor::Actor {
td::uint64 prev_logged_sum_ = 0;
td::Timer prev_logged_timer_;
td::uint64 total_size_ = 0;
ProcessStatus status_;
};