@@ -554,14 +554,14 @@ void ArchiveSlice::get_slice(td::uint64 archive_id, td::uint64 offset, td::uint3
554554 before_query ();
555555 auto value = static_cast <td::uint32>(archive_id >> 32 );
556556 PackageInfo *p;
557- if (shard_split_depth_ == 0 ) {
558- TRY_RESULT_PROMISE_ASSIGN (promise, p, choose_package (value, ShardIdFull{masterchainId}, false ));
559- } else {
557+ if (shard_separated_) {
560558 if (value >= packages_.size ()) {
561559 promise.set_error (td::Status::Error (ErrorCode::notready, " no such package" ));
562560 return ;
563561 }
564562 p = &packages_[value];
563+ } else {
564+ TRY_RESULT_PROMISE_ASSIGN (promise, p, choose_package (value, ShardIdFull{masterchainId}, false ));
565565 }
566566 promise = begin_async_query (std::move (promise));
567567 td::actor::create_actor<db::ReadFile>(" readfile" , p->path , offset, limit, 0 , std::move (promise)).release ();
@@ -574,10 +574,10 @@ void ArchiveSlice::get_archive_id(BlockSeqno masterchain_seqno, ShardIdFull shar
574574 promise.set_result (archive_id_);
575575 } else {
576576 TRY_RESULT_PROMISE (promise, p, choose_package (masterchain_seqno, shard_prefix, false ));
577- if (shard_split_depth_ == 0 ) {
578- promise.set_result (p->seqno * (1ull << 32 ) + archive_id_);
579- } else {
577+ if (shard_separated_) {
580578 promise.set_result (p->idx * (1ull << 32 ) + archive_id_);
579+ } else {
580+ promise.set_result (p->seqno * (1ull << 32 ) + archive_id_);
581581 }
582582 }
583583}
@@ -609,8 +609,10 @@ void ArchiveSlice::before_query() {
609609 if (R2.move_as_ok () == td::KeyValue::GetStatus::Ok) {
610610 shard_split_depth_ = td::to_integer<td::uint32>(value);
611611 CHECK (shard_split_depth_ <= 60 );
612+ shard_separated_ = true ;
612613 } else {
613614 shard_split_depth_ = 0 ;
615+ shard_separated_ = false ;
614616 }
615617 for (td::uint32 i = 0 ; i < tot; i++) {
616618 R2 = kv_->get (PSTRING () << " status." << i, value);
@@ -625,16 +627,16 @@ void ArchiveSlice::before_query() {
625627 }
626628 td::uint32 seqno;
627629 ShardIdFull shard_prefix;
628- if (shard_split_depth_ == 0 ) {
629- seqno = archive_id_ + slice_size_ * i;
630- shard_prefix = ShardIdFull{masterchainId};
631- } else {
630+ if (shard_separated_) {
632631 R2 = kv_->get (PSTRING () << " info." << i, value);
633632 R2.ensure ();
634633 CHECK (R2.move_as_ok () == td::KeyValue::GetStatus::Ok);
635634 unsigned long long shard;
636635 CHECK (sscanf (value.c_str (), " %u.%d:%016llx" , &seqno, &shard_prefix.workchain , &shard) == 3 );
637636 shard_prefix.shard = shard;
637+ } else {
638+ seqno = archive_id_ + slice_size_ * i;
639+ shard_prefix = ShardIdFull{masterchainId};
638640 }
639641 add_package (seqno, shard_prefix, len, ver);
640642 }
@@ -651,10 +653,9 @@ void ArchiveSlice::before_query() {
651653 kv_->set (" slice_size" , td::to_string (slice_size_)).ensure ();
652654 kv_->set (" status.0" , " 0" ).ensure ();
653655 kv_->set (" version.0" , td::to_string (default_package_version ())).ensure ();
654- if (shard_split_depth_ > 0 ) {
655- kv_->set (" info.0" , package_info_to_str (archive_id_, ShardIdFull{masterchainId})).ensure ();
656- kv_->set (" shard_split_depth" , td::to_string (shard_split_depth_)).ensure ();
657- }
656+ shard_separated_ = true ;
657+ kv_->set (" info.0" , package_info_to_str (archive_id_, ShardIdFull{masterchainId})).ensure ();
658+ kv_->set (" shard_split_depth" , td::to_string (shard_split_depth_)).ensure ();
658659 kv_->commit_transaction ().ensure ();
659660 add_package (archive_id_, ShardIdFull{masterchainId}, 0 , default_package_version ());
660661 } else {
@@ -779,7 +780,7 @@ td::Result<ArchiveSlice::PackageInfo *> ArchiveSlice::choose_package(BlockSeqno
779780 }
780781 masterchain_seqno -= (masterchain_seqno - archive_id_) % slice_size_;
781782 CHECK ((masterchain_seqno - archive_id_) % slice_size_ == 0 );
782- if (shard_split_depth_ == 0 ) {
783+ if (!shard_separated_ ) {
783784 shard_prefix = ShardIdFull{masterchainId};
784785 } else if (!shard_prefix.is_masterchain ()) {
785786 shard_prefix.shard |= 1 ; // In case length is < split depth
@@ -795,7 +796,7 @@ td::Result<ArchiveSlice::PackageInfo *> ArchiveSlice::choose_package(BlockSeqno
795796 kv_->set (" slices" , td::to_string (v + 1 )).ensure ();
796797 kv_->set (PSTRING () << " status." << v, " 0" ).ensure ();
797798 kv_->set (PSTRING () << " version." << v, td::to_string (default_package_version ())).ensure ();
798- if (shard_split_depth_ > 0 ) {
799+ if (shard_separated_ ) {
799800 kv_->set (PSTRING () << " info." << v, package_info_to_str (masterchain_seqno, shard_prefix)).ensure ();
800801 }
801802 commit_transaction ();
@@ -1079,7 +1080,7 @@ void ArchiveSlice::truncate(BlockSeqno masterchain_seqno, ConstBlockHandle, td::
10791080 package.idx = i;
10801081 kv_->set (PSTRING () << " status." << i, td::to_string (package.package ->size ())).ensure ();
10811082 kv_->set (PSTRING () << " version." << i, td::to_string (package.version )).ensure ();
1082- if (shard_split_depth_ > 0 ) {
1083+ if (shard_separated_ ) {
10831084 kv_->set (PSTRING () << " info." << i, package_info_to_str (package.seqno , package.shard_prefix )).ensure ();
10841085 }
10851086 id_to_package_[{package.seqno , package.shard_prefix }] = i;
0 commit comments