1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-02-12 11:12:16 +00:00

fixed download of an serialized state

This commit is contained in:
ton 2019-12-08 16:22:48 +04:00
parent ceaed40ac4
commit 6143b2051f
3 changed files with 18 additions and 6 deletions

View file

@ -82,6 +82,10 @@ void ArchiveImporter::start_up() {
}
auto seqno = masterchain_blocks_.begin()->first;
if (seqno > state_->get_seqno() + 1) {
abort_query(td::Status::Error(ErrorCode::notready, "too big first masterchain seqno"));
return;
}
check_masterchain_block(seqno);
}
@ -197,6 +201,9 @@ void ArchiveImporter::got_new_materchain_state(td::Ref<MasterchainState> state)
}
void ArchiveImporter::checked_all_masterchain_blocks(BlockSeqno seqno) {
if (shard_client_seqno_ > seqno) {
shard_client_seqno_ = seqno;
}
check_next_shard_client_seqno(shard_client_seqno_ + 1);
}

View file

@ -1484,8 +1484,9 @@ void ValidatorManagerImpl::download_next_archive() {
td::actor::send_closure(SelfId, &ValidatorManagerImpl::downloaded_archive_slice, R.move_as_ok());
}
});
callback_->download_archive(shard_client_handle_->id().seqno() + 1, db_root_ + "/tmp/", td::Timestamp::in(3600.0),
std::move(P));
auto seqno = std::min(last_masterchain_seqno_, shard_client_handle_->id().seqno());
callback_->download_archive(seqno + 1, db_root_ + "/tmp/", td::Timestamp::in(3600.0), std::move(P));
}
void ValidatorManagerImpl::downloaded_archive_slice(std::string name) {
@ -1500,8 +1501,10 @@ void ValidatorManagerImpl::downloaded_archive_slice(std::string name) {
}
});
td::actor::create_actor<ArchiveImporter>("archiveimport", name, last_masterchain_state_,
shard_client_handle_->id().seqno(), opts_, actor_id(this), std::move(P))
auto seqno = std::min(last_masterchain_seqno_, shard_client_handle_->id().seqno());
td::actor::create_actor<ArchiveImporter>("archiveimport", name, last_masterchain_state_, seqno, opts_, actor_id(this),
std::move(P))
.release();
}
@ -1509,7 +1512,7 @@ void ValidatorManagerImpl::checked_archive_slice(std::vector<BlockSeqno> seqno)
CHECK(seqno.size() == 2);
LOG(INFO) << "checked downloaded archive slice: mc_top_seqno=" << seqno[0] << " shard_top_seqno_=" << seqno[1];
CHECK(seqno[0] <= last_masterchain_seqno_);
CHECK(seqno[1] <= seqno[0]);
CHECK(seqno[1] <= last_masterchain_seqno_);
BlockIdExt b;
if (seqno[1] < last_masterchain_seqno_) {

View file

@ -94,7 +94,8 @@ void AsyncStateSerializer::next_iteration() {
td::actor::send_closure(manager_, &ValidatorManager::get_block_handle, last_block_id_, true, std::move(P));
return;
}
if (!masterchain_handle_->inited_unix_time() || !masterchain_handle_->inited_is_key_block()) {
if (!masterchain_handle_->inited_unix_time() || !masterchain_handle_->inited_is_key_block() ||
!masterchain_handle_->is_applied()) {
return;
}
CHECK(masterchain_handle_->id() == last_block_id_);
@ -213,6 +214,7 @@ void AsyncStateSerializer::got_shard_state(BlockHandle handle, td::Ref<ShardStat
});
td::actor::send_closure(manager_, &ValidatorManager::store_persistent_state_file, handle->id(),
masterchain_handle_->id(), std::move(B), std::move(P));
LOG(INFO) << "storing persistent state for " << masterchain_handle_->id().seqno() << ":" << handle->id().id.shard;
next_idx_++;
}