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:
parent
cf50b4b5da
commit
61ef357941
19 changed files with 163 additions and 60 deletions
|
@ -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_;
|
||||
}
|
||||
|
||||
|
|
|
@ -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_;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue