@@ -901,57 +901,92 @@ struct Schema : NIceDb::Schema {
901901}
902902
903903namespace NKikimr ::NOlap {
904+ class TPortionLoadContext {
905+ private:
906+ YDB_READONLY (ui64, PathId, 0 );
907+ YDB_READONLY (ui64, PortionId, 0 );
908+ YDB_READONLY_DEF (NKikimrTxColumnShard::TIndexPortionMeta, MetaProto);
909+
910+ public:
911+ template <class TSource >
912+ TPortionLoadContext (const TSource& rowset) {
913+ PathId = rowset.template GetValue <NColumnShard::Schema::IndexPortions::PathId>();
914+ PortionId = rowset.template GetValue <NColumnShard::Schema::IndexPortions::PortionId>();
915+ const TString metadata = rowset.template GetValue <NColumnShard::Schema::IndexPortions::Metadata>();
916+ AFL_VERIFY (MetaProto.ParseFromArray (metadata.data (), metadata.size ()))(" event" , " cannot parse metadata as protobuf" );
917+ }
918+ };
919+
904920class TColumnChunkLoadContext {
905921private:
906922 YDB_READONLY_DEF (TBlobRange, BlobRange);
907923 TChunkAddress Address;
924+ YDB_READONLY (ui64, PathId, 0 );
925+ YDB_READONLY (ui64, PortionId, 0 );
908926 YDB_READONLY_DEF (NKikimrTxColumnShard::TIndexColumnMeta, MetaProto);
927+ YDB_READONLY (TSnapshot, RemoveSnapshot, TSnapshot::Zero());
928+ YDB_READONLY (TSnapshot, MinDeprecatedSnapshot, TSnapshot::Zero());
929+
909930public:
910931 const TChunkAddress& GetAddress () const {
911932 return Address;
912933 }
913934
914- TColumnChunkLoadContext (const TChunkAddress& address, const TBlobRange& bRange, const NKikimrTxColumnShard::TIndexColumnMeta& metaProto)
935+ TColumnChunkLoadContext (const ui64 pathId, const ui64 portionId, const TChunkAddress& address, const TBlobRange& bRange,
936+ const NKikimrTxColumnShard::TIndexColumnMeta& metaProto)
915937 : BlobRange(bRange)
916938 , Address(address)
917- , MetaProto(metaProto )
918- {
919-
939+ , PathId(pathId )
940+ , PortionId(portionId)
941+ , MetaProto(metaProto) {
920942 }
921943
922944 template <class TSource >
923945 TColumnChunkLoadContext (const TSource& rowset, const IBlobGroupSelector* dsGroupSelector)
924- : Address(rowset.template GetValue<NColumnShard::Schema::IndexColumns::ColumnIdx>(), rowset.template GetValue<NColumnShard::Schema::IndexColumns::Chunk>()) {
946+ : Address(rowset.template GetValue<NColumnShard::Schema::IndexColumns::ColumnIdx>(),
947+ rowset.template GetValue<NColumnShard::Schema::IndexColumns::Chunk>())
948+ , RemoveSnapshot(rowset.GetValue<IndexColumns::XPlanStep>(), rowset.GetValue<IndexColumns::XTxId>())
949+ , MinDeprecatedSnapshot(rowset.GetValue<IndexColumns::PlanStep>(), rowset.GetValue<IndexColumns::TxId>())
950+ {
925951 AFL_VERIFY (Address.GetColumnId ())(" event" , " incorrect address" )(" address" , Address.DebugString ());
926952 TString strBlobId = rowset.template GetValue <NColumnShard::Schema::IndexColumns::Blob>();
927953 Y_ABORT_UNLESS (strBlobId.size () == sizeof (TLogoBlobID), " Size %" PRISZT " doesn't match TLogoBlobID" , strBlobId.size ());
928954 TLogoBlobID logoBlobId ((const ui64*)strBlobId.data ());
929955 BlobRange.BlobId = NOlap::TUnifiedBlobId (dsGroupSelector->GetGroup (logoBlobId), logoBlobId);
930956 BlobRange.Offset = rowset.template GetValue <NColumnShard::Schema::IndexColumns::Offset>();
931957 BlobRange.Size = rowset.template GetValue <NColumnShard::Schema::IndexColumns::Size>();
958+ PathId = rowset.template GetValue <NColumnShard::Schema::IndexColumns::PathId>();
959+ PortionId = rowset.template GetValue <NColumnShard::Schema::IndexColumns::Portion>();
932960 AFL_VERIFY (BlobRange.BlobId .IsValid () && BlobRange.Size )(" event" , " incorrect blob" )(" blob" , BlobRange.ToString ());
933961
934962 const TString metadata = rowset.template GetValue <NColumnShard::Schema::IndexColumns::Metadata>();
935963 AFL_VERIFY (MetaProto.ParseFromArray (metadata.data (), metadata.size ()))(" event" , " cannot parse metadata as protobuf" );
936964 }
937-
938- const NKikimrTxColumnShard::TIndexPortionMeta* GetPortionMeta () const {
939- if (MetaProto.HasPortionMeta ()) {
940- return &MetaProto.GetPortionMeta ();
941- } else {
942- return nullptr ;
943- }
944- }
945965};
946966
947967class TIndexChunkLoadContext {
948968private:
949969 YDB_READONLY_DEF (std::optional<TBlobRange>, BlobRange);
950970 YDB_READONLY_DEF (std::optional<TString>, BlobData);
971+ YDB_READONLY (ui64, PathId, 0 );
972+ YDB_READONLY (ui64, PortionId, 0 );
951973 TChunkAddress Address;
952974 const ui32 RecordsCount;
953975 const ui32 RawBytes;
954976public:
977+ ui32 GetRawBytes () const {
978+ return RawBytes;
979+ }
980+
981+ ui32 GetDataSize () const {
982+ if (BlobRange) {
983+ return BlobRange->GetSize ();
984+ } else {
985+ AFL_VERIFY (!!BlobData);
986+ return BlobData->size ();
987+ }
988+ }
989+
955990 TIndexChunk BuildIndexChunk (const TBlobRangeLink16::TLinkId blobLinkId) const {
956991 AFL_VERIFY (BlobRange);
957992 return TIndexChunk (Address.GetColumnId (), Address.GetChunkIdx (), RecordsCount, RawBytes, BlobRange->BuildLink (blobLinkId));
@@ -964,7 +999,9 @@ class TIndexChunkLoadContext {
964999
9651000 template <class TSource >
9661001 TIndexChunkLoadContext (const TSource& rowset, const IBlobGroupSelector* dsGroupSelector)
967- : Address(rowset.template GetValue<NColumnShard::Schema::IndexIndexes::IndexId>(), rowset.template GetValue<NColumnShard::Schema::IndexIndexes::ChunkIdx>())
1002+ : PathId(rowset.template GetValue<NColumnShard::Schema::IndexIndexes::PathId>())
1003+ , PortionId(rowset.template GetValue<NColumnShard::Schema::IndexIndexes::PortionId>())
1004+ , Address(rowset.template GetValue<NColumnShard::Schema::IndexIndexes::IndexId>(), rowset.template GetValue<NColumnShard::Schema::IndexIndexes::ChunkIdx>())
9681005 , RecordsCount(rowset.template GetValue<NColumnShard::Schema::IndexIndexes::RecordsCount>())
9691006 , RawBytes(rowset.template GetValue<NColumnShard::Schema::IndexIndexes::RawBytes>())
9701007 {
0 commit comments