Skip to content

Commit f3c4356

Browse files
committed
Expose PersistentStateType and pass it through a million actors
What are we, an enterprise? More seriously, the commit makes it a responsibility of (indirect) users of ArchiveManager to pass PersistentStateType. For now, we still hardcode UnsplitStateType everywhere.
1 parent 7fefaa9 commit f3c4356

17 files changed

+127
-109
lines changed

validator/db/archive-manager.cpp

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -361,29 +361,29 @@ FileReferenceShort create_persistent_state_id(BlockIdExt block_id, BlockIdExt mc
361361

362362
} // namespace
363363

364-
void ArchiveManager::add_persistent_state(BlockIdExt block_id, BlockIdExt masterchain_block_id, td::BufferSlice data,
364+
void ArchiveManager::add_persistent_state(BlockIdExt block_id, BlockIdExt masterchain_block_id,
365+
PersistentStateType type, td::BufferSlice data,
365366
td::Promise<td::Unit> promise) {
366367
auto create_writer = [&](std::string path, td::Promise<std::string> P) {
367368
td::actor::create_actor<db::WriteFile>("writefile", db_root_ + "/archive/tmp/", std::move(path), std::move(data),
368369
std::move(P))
369370
.release();
370371
};
371-
// TODO: Allow specifying state type.
372-
add_persistent_state_impl(create_persistent_state_id(block_id, masterchain_block_id, UnsplitStateType{}),
373-
std::move(promise), std::move(create_writer));
372+
add_persistent_state_impl(create_persistent_state_id(block_id, masterchain_block_id, type), std::move(promise),
373+
std::move(create_writer));
374374
}
375375

376376
void ArchiveManager::add_persistent_state_gen(BlockIdExt block_id, BlockIdExt masterchain_block_id,
377+
PersistentStateType type,
377378
std::function<td::Status(td::FileFd &)> write_state,
378379
td::Promise<td::Unit> promise) {
379380
auto create_writer = [&](std::string path, td::Promise<std::string> P) {
380381
td::actor::create_actor<db::WriteFile>("writefile", db_root_ + "/archive/tmp/", std::move(path),
381382
std::move(write_state), std::move(P))
382383
.release();
383384
};
384-
// TODO: Allow specifying state type.
385-
add_persistent_state_impl(create_persistent_state_id(block_id, masterchain_block_id, UnsplitStateType{}),
386-
std::move(promise), std::move(create_writer));
385+
add_persistent_state_impl(create_persistent_state_id(block_id, masterchain_block_id, type), std::move(promise),
386+
std::move(create_writer));
387387
}
388388

389389
void ArchiveManager::add_persistent_state_impl(
@@ -450,9 +450,8 @@ void ArchiveManager::get_previous_persistent_state_files(
450450
}
451451

452452
void ArchiveManager::get_persistent_state(BlockIdExt block_id, BlockIdExt masterchain_block_id,
453-
td::Promise<td::BufferSlice> promise) {
454-
// TODO: Allow specifying state type.
455-
auto id = create_persistent_state_id(block_id, masterchain_block_id, UnsplitStateType{});
453+
PersistentStateType type, td::Promise<td::BufferSlice> promise) {
454+
auto id = create_persistent_state_id(block_id, masterchain_block_id, type);
456455
auto hash = id.hash();
457456
if (perm_states_.find({masterchain_block_id.seqno(), hash}) == perm_states_.end()) {
458457
promise.set_error(td::Status::Error(ErrorCode::notready, "state file not in db"));
@@ -463,10 +462,10 @@ void ArchiveManager::get_persistent_state(BlockIdExt block_id, BlockIdExt master
463462
td::actor::create_actor<db::ReadFile>("readfile", path, 0, -1, 0, std::move(promise)).release();
464463
}
465464

466-
void ArchiveManager::get_persistent_state_slice(BlockIdExt block_id, BlockIdExt masterchain_block_id, td::int64 offset,
467-
td::int64 max_size, td::Promise<td::BufferSlice> promise) {
468-
// TODO: Allow specifying state type.
469-
auto id = create_persistent_state_id(block_id, masterchain_block_id, UnsplitStateType{});
465+
void ArchiveManager::get_persistent_state_slice(BlockIdExt block_id, BlockIdExt masterchain_block_id,
466+
PersistentStateType type, td::int64 offset, td::int64 max_size,
467+
td::Promise<td::BufferSlice> promise) {
468+
auto id = create_persistent_state_id(block_id, masterchain_block_id, type);
470469
auto hash = id.hash();
471470
if (perm_states_.find({masterchain_block_id.seqno(), hash}) == perm_states_.end()) {
472471
promise.set_error(td::Status::Error(ErrorCode::notready, "state file not in db"));
@@ -478,9 +477,8 @@ void ArchiveManager::get_persistent_state_slice(BlockIdExt block_id, BlockIdExt
478477
}
479478

480479
void ArchiveManager::get_persistent_state_file_size(BlockIdExt block_id, BlockIdExt masterchain_block_id,
481-
td::Promise<td::uint64> promise) {
482-
// TODO: Allow specifying state type.
483-
auto id = create_persistent_state_id(block_id, masterchain_block_id, UnsplitStateType{});
480+
PersistentStateType type, td::Promise<td::uint64> promise) {
481+
auto id = create_persistent_state_id(block_id, masterchain_block_id, type);
484482
auto hash = id.hash();
485483
auto it = perm_states_.find({masterchain_block_id.seqno(), hash});
486484
if (it == perm_states_.end()) {

validator/db/archive-manager.hpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,16 @@ class ArchiveManager : public td::actor::Actor {
4444
void get_file(ConstBlockHandle handle, FileReference ref_id, td::Promise<td::BufferSlice> promise);
4545

4646
void add_zero_state(BlockIdExt block_id, td::BufferSlice data, td::Promise<td::Unit> promise);
47-
void add_persistent_state(BlockIdExt block_id, BlockIdExt masterchain_block_id, td::BufferSlice data,
48-
td::Promise<td::Unit> promise);
49-
void add_persistent_state_gen(BlockIdExt block_id, BlockIdExt masterchain_block_id,
50-
std::function<td::Status(td::FileFd&)> write_state,
51-
td::Promise<td::Unit> promise);
47+
void add_persistent_state(BlockIdExt block_id, BlockIdExt masterchain_block_id, PersistentStateType type,
48+
td::BufferSlice data, td::Promise<td::Unit> promise);
49+
void add_persistent_state_gen(BlockIdExt block_id, BlockIdExt masterchain_block_id, PersistentStateType type,
50+
std::function<td::Status(td::FileFd &)> write_state, td::Promise<td::Unit> promise);
5251
void get_zero_state(BlockIdExt block_id, td::Promise<td::BufferSlice> promise);
53-
void get_persistent_state(BlockIdExt block_id, BlockIdExt masterchain_block_id, td::Promise<td::BufferSlice> promise);
54-
void get_persistent_state_slice(BlockIdExt block_id, BlockIdExt masterchain_block_id, td::int64 offset,
55-
td::int64 max_size, td::Promise<td::BufferSlice> promise);
56-
void get_persistent_state_file_size(BlockIdExt block_id, BlockIdExt masterchain_block_id,
52+
void get_persistent_state(BlockIdExt block_id, BlockIdExt masterchain_block_id, PersistentStateType type,
53+
td::Promise<td::BufferSlice> promise);
54+
void get_persistent_state_slice(BlockIdExt block_id, BlockIdExt masterchain_block_id, PersistentStateType type,
55+
td::int64 offset, td::int64 max_size, td::Promise<td::BufferSlice> promise);
56+
void get_persistent_state_file_size(BlockIdExt block_id, BlockIdExt masterchain_block_id, PersistentStateType type,
5757
td::Promise<td::uint64> promise);
5858
void check_zero_state(BlockIdExt block_id, td::Promise<bool> promise);
5959
void get_previous_persistent_state_files(BlockSeqno cur_mc_seqno,

validator/db/rootdb.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -285,35 +285,37 @@ void RootDb::get_cell_db_reader(td::Promise<std::shared_ptr<vm::CellDbReader>> p
285285
td::actor::send_closure(cell_db_, &CellDb::get_cell_db_reader, std::move(promise));
286286
}
287287

288-
void RootDb::store_persistent_state_file(BlockIdExt block_id, BlockIdExt masterchain_block_id, td::BufferSlice state,
289-
td::Promise<td::Unit> promise) {
290-
td::actor::send_closure(archive_db_, &ArchiveManager::add_persistent_state, block_id, masterchain_block_id,
288+
void RootDb::store_persistent_state_file(BlockIdExt block_id, BlockIdExt masterchain_block_id, PersistentStateType type,
289+
td::BufferSlice state, td::Promise<td::Unit> promise) {
290+
td::actor::send_closure(archive_db_, &ArchiveManager::add_persistent_state, block_id, masterchain_block_id, type,
291291
std::move(state), std::move(promise));
292292
}
293293

294294
void RootDb::store_persistent_state_file_gen(BlockIdExt block_id, BlockIdExt masterchain_block_id,
295+
PersistentStateType type,
295296
std::function<td::Status(td::FileFd&)> write_data,
296297
td::Promise<td::Unit> promise) {
297-
td::actor::send_closure(archive_db_, &ArchiveManager::add_persistent_state_gen, block_id, masterchain_block_id,
298+
td::actor::send_closure(archive_db_, &ArchiveManager::add_persistent_state_gen, block_id, masterchain_block_id, type,
298299
std::move(write_data), std::move(promise));
299300
}
300301

301-
void RootDb::get_persistent_state_file(BlockIdExt block_id, BlockIdExt masterchain_block_id,
302+
void RootDb::get_persistent_state_file(BlockIdExt block_id, BlockIdExt masterchain_block_id, PersistentStateType type,
302303
td::Promise<td::BufferSlice> promise) {
303-
td::actor::send_closure(archive_db_, &ArchiveManager::get_persistent_state, block_id, masterchain_block_id,
304+
td::actor::send_closure(archive_db_, &ArchiveManager::get_persistent_state, block_id, masterchain_block_id, type,
304305
std::move(promise));
305306
}
306307

307-
void RootDb::get_persistent_state_file_slice(BlockIdExt block_id, BlockIdExt masterchain_block_id, td::int64 offset,
308-
td::int64 max_size, td::Promise<td::BufferSlice> promise) {
308+
void RootDb::get_persistent_state_file_slice(BlockIdExt block_id, BlockIdExt masterchain_block_id,
309+
PersistentStateType type, td::int64 offset, td::int64 max_size,
310+
td::Promise<td::BufferSlice> promise) {
309311
td::actor::send_closure(archive_db_, &ArchiveManager::get_persistent_state_slice, block_id, masterchain_block_id,
310-
offset, max_size, std::move(promise));
312+
type, offset, max_size, std::move(promise));
311313
}
312314

313315
void RootDb::get_persistent_state_file_size(BlockIdExt block_id, BlockIdExt masterchain_block_id,
314-
td::Promise<td::uint64> promise) {
316+
PersistentStateType type, td::Promise<td::uint64> promise) {
315317
td::actor::send_closure(archive_db_, &ArchiveManager::get_persistent_state_file_size, block_id, masterchain_block_id,
316-
std::move(promise));
318+
type, std::move(promise));
317319
}
318320

319321
void RootDb::store_zero_state_file(BlockIdExt block_id, td::BufferSlice state, td::Promise<td::Unit> promise) {

validator/db/rootdb.hpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,16 +71,17 @@ class RootDb : public Db {
7171
td::actor::send_closure(validator_manager_, &ValidatorManager::get_block_handle, id, force, std::move(promise));
7272
}
7373

74-
void store_persistent_state_file(BlockIdExt block_id, BlockIdExt masterchain_block_id, td::BufferSlice state,
75-
td::Promise<td::Unit> promise) override;
76-
void store_persistent_state_file_gen(BlockIdExt block_id, BlockIdExt masterchain_block_id,
74+
void store_persistent_state_file(BlockIdExt block_id, BlockIdExt masterchain_block_id, PersistentStateType type,
75+
td::BufferSlice state, td::Promise<td::Unit> promise) override;
76+
void store_persistent_state_file_gen(BlockIdExt block_id, BlockIdExt masterchain_block_id, PersistentStateType type,
7777
std::function<td::Status(td::FileFd&)> write_data,
7878
td::Promise<td::Unit> promise) override;
79-
void get_persistent_state_file(BlockIdExt block_id, BlockIdExt masterchain_block_id,
79+
void get_persistent_state_file(BlockIdExt block_id, BlockIdExt masterchain_block_id, PersistentStateType type,
8080
td::Promise<td::BufferSlice> promise) override;
81-
void get_persistent_state_file_slice(BlockIdExt block_id, BlockIdExt masterchain_block_id, td::int64 offset,
82-
td::int64 max_length, td::Promise<td::BufferSlice> promise) override;
83-
void get_persistent_state_file_size(BlockIdExt block_id, BlockIdExt masterchain_block_id,
81+
void get_persistent_state_file_slice(BlockIdExt block_id, BlockIdExt masterchain_block_id, PersistentStateType type,
82+
td::int64 offset, td::int64 max_length,
83+
td::Promise<td::BufferSlice> promise) override;
84+
void get_persistent_state_file_size(BlockIdExt block_id, BlockIdExt masterchain_block_id, PersistentStateType type,
8485
td::Promise<td::uint64> promise) override;
8586
void store_zero_state_file(BlockIdExt block_id, td::BufferSlice state, td::Promise<td::Unit> promise) override;
8687
void get_zero_state_file(BlockIdExt block_id, td::Promise<td::BufferSlice> promise) override;

validator/downloaders/download-state.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ void DownloadShardState::checked_shard_state() {
189189
std::move(P));
190190
} else {
191191
td::actor::send_closure(manager_, &ValidatorManager::store_persistent_state_file, block_id_, masterchain_block_id_,
192-
std::move(data_), std::move(P));
192+
UnsplitStateType{}, std::move(data_), std::move(P));
193193
}
194194
}
195195

validator/full-node-master.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ void FullNodeMasterImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::tonNo
288288
auto block_id = create_block_id(query.block_);
289289
auto masterchain_block_id = create_block_id(query.masterchain_block_);
290290
td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::get_persistent_state_size, block_id,
291-
masterchain_block_id, std::move(P));
291+
masterchain_block_id, UnsplitStateType{}, std::move(P));
292292
}
293293

294294
void FullNodeMasterImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::tonNode_getPersistentStateSize &query,
@@ -301,7 +301,7 @@ void FullNodeMasterImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::tonNo
301301
auto block_id = create_block_id(query.block_);
302302
auto masterchain_block_id = create_block_id(query.masterchain_block_);
303303
td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::get_persistent_state_size, block_id,
304-
masterchain_block_id, std::move(P));
304+
masterchain_block_id, UnsplitStateType{}, std::move(P));
305305
}
306306

307307
void FullNodeMasterImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::tonNode_getNextKeyBlockIds &query,
@@ -361,7 +361,7 @@ void FullNodeMasterImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::tonNo
361361
auto block_id = create_block_id(query.block_);
362362
auto masterchain_block_id = create_block_id(query.masterchain_block_);
363363
td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::get_persistent_state, block_id,
364-
masterchain_block_id, std::move(P));
364+
masterchain_block_id, UnsplitStateType{}, std::move(P));
365365
}
366366

367367
void FullNodeMasterImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::tonNode_downloadPersistentStateSlice &query,
@@ -378,7 +378,7 @@ void FullNodeMasterImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::tonNo
378378
auto block_id = create_block_id(query.block_);
379379
auto masterchain_block_id = create_block_id(query.masterchain_block_);
380380
td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::get_persistent_state_slice, block_id,
381-
masterchain_block_id, query.offset_, query.max_size_, std::move(P));
381+
masterchain_block_id, UnsplitStateType{}, query.offset_, query.max_size_, std::move(P));
382382
}
383383

384384
void FullNodeMasterImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::tonNode_getCapabilities &query,

validator/full-node-shard.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ void FullNodeShardImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::tonNod
523523
VLOG(FULL_NODE_DEBUG) << "Got query preparePersistentState " << block_id.to_str() << " "
524524
<< masterchain_block_id.to_str() << " from " << src;
525525
td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::get_persistent_state_size, block_id,
526-
masterchain_block_id, std::move(P));
526+
masterchain_block_id, UnsplitStateType{}, std::move(P));
527527
}
528528

529529
void FullNodeShardImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::tonNode_getPersistentStateSize &query,
@@ -538,7 +538,7 @@ void FullNodeShardImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::tonNod
538538
VLOG(FULL_NODE_DEBUG) << "Got query getPersistentStateSize " << block_id.to_str() << " "
539539
<< masterchain_block_id.to_str() << " from " << src;
540540
td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::get_persistent_state_size, block_id,
541-
masterchain_block_id, std::move(P));
541+
masterchain_block_id, UnsplitStateType{}, std::move(P));
542542
}
543543

544544
void FullNodeShardImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::tonNode_getNextKeyBlockIds &query,
@@ -607,7 +607,7 @@ void FullNodeShardImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::tonNod
607607
VLOG(FULL_NODE_DEBUG) << "Got query downloadPersistentState " << block_id.to_str() << " "
608608
<< masterchain_block_id.to_str() << " from " << src;
609609
td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::get_persistent_state_slice, block_id,
610-
masterchain_block_id, 0, max_size + 1, std::move(P));
610+
masterchain_block_id, UnsplitStateType{}, 0, max_size + 1, std::move(P));
611611
}
612612

613613
void FullNodeShardImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::tonNode_downloadPersistentStateSlice &query,
@@ -631,7 +631,7 @@ void FullNodeShardImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::tonNod
631631
promise.set_value(R.move_as_ok());
632632
});
633633
td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::get_persistent_state_slice, block_id,
634-
masterchain_block_id, query.offset_, query.max_size_, std::move(P));
634+
masterchain_block_id, UnsplitStateType{}, query.offset_, query.max_size_, std::move(P));
635635
}
636636

637637
void FullNodeShardImpl::process_query(adnl::AdnlNodeIdShort src, ton_api::tonNode_getCapabilities &query,

0 commit comments

Comments
 (0)