diff options
| author | ivanmorozov <[email protected]> | 2023-08-20 20:38:16 +0300 |
|---|---|---|
| committer | ivanmorozov <[email protected]> | 2023-08-20 21:15:42 +0300 |
| commit | a75bcf87beca5d3303c7dfbd97e28e73c48e62cd (patch) | |
| tree | 444febd20bee052196458a8176238c3b3fdddd6c | |
| parent | 130ce4fa111923c9ed361811f605053d37b42ceb (diff) | |
KIKIMR-19093: fields may be not initialized through old store method
5 files changed, 44 insertions, 13 deletions
diff --git a/ydb/core/tx/columnshard/engines/column_engine_logs.cpp b/ydb/core/tx/columnshard/engines/column_engine_logs.cpp index aad865264e3..5f3efa477bb 100644 --- a/ydb/core/tx/columnshard/engines/column_engine_logs.cpp +++ b/ydb/core/tx/columnshard/engines/column_engine_logs.cpp @@ -102,7 +102,7 @@ TColumnEngineStats::TPortionsStats DeltaStats(const TPortionInfo& portionInfo, u metadataBytes += rec.GetMeta().GetMetadataSize(); blobs.insert(rec.BlobRange.BlobId); deltaStats.BytesByColumn[rec.ColumnId] += rec.BlobRange.Size; - deltaStats.RawBytesByColumn[rec.ColumnId] += rec.GetMeta().GetRawBytes(); + deltaStats.RawBytesByColumn[rec.ColumnId] += rec.GetMeta().GetRawBytes().value_or(0); } deltaStats.Rows = portionInfo.NumRows(); deltaStats.RawBytes = portionInfo.RawBytesSum(); diff --git a/ydb/core/tx/columnshard/engines/portions/column_record.cpp b/ydb/core/tx/columnshard/engines/portions/column_record.cpp index 8b69b6447d7..b9d31ae8c84 100644 --- a/ydb/core/tx/columnshard/engines/portions/column_record.cpp +++ b/ydb/core/tx/columnshard/engines/portions/column_record.cpp @@ -46,8 +46,12 @@ TChunkMeta::TChunkMeta(const std::shared_ptr<arrow::Array>& column, const ui32 c NKikimrTxColumnShard::TIndexColumnMeta TChunkMeta::SerializeToProto() const { NKikimrTxColumnShard::TIndexColumnMeta meta; - meta.SetNumRows(NumRows); - meta.SetRawBytes(RawBytes); + if (NumRows) { + meta.SetNumRows(*NumRows); + } + if (RawBytes) { + meta.SetRawBytes(*RawBytes); + } if (HasMinMax()) { ScalarToConstant(*Min, *meta.MutableMinValue()); ScalarToConstant(*Max, *meta.MutableMaxValue()); diff --git a/ydb/core/tx/columnshard/engines/portions/column_record.h b/ydb/core/tx/columnshard/engines/portions/column_record.h index 13ca916783c..399f80ef9e1 100644 --- a/ydb/core/tx/columnshard/engines/portions/column_record.h +++ b/ydb/core/tx/columnshard/engines/portions/column_record.h @@ -18,11 +18,12 @@ struct TChunkMeta { private: YDB_READONLY_DEF(std::shared_ptr<arrow::Scalar>, Min); YDB_READONLY_DEF(std::shared_ptr<arrow::Scalar>, Max); - YDB_READONLY(ui32, NumRows, 0); - YDB_READONLY(ui32, RawBytes, 0); + YDB_READONLY_DEF(std::optional<ui32>, NumRows); + YDB_READONLY_DEF(std::optional<ui32>, RawBytes); + TChunkMeta() = default; public: ui64 GetMetadataSize() const { - return sizeof(NumRows) + sizeof(RawBytes) + 8 * 3 * 2; + return sizeof(ui32) + sizeof(ui32) + 8 * 3 * 2; } bool HasMinMax() const noexcept { @@ -31,6 +32,16 @@ public: NKikimrTxColumnShard::TIndexColumnMeta SerializeToProto() const; + class TTestInstanceBuilder { + public: + static TChunkMeta Build(const ui64 numRows, const ui64 rawBytes) { + TChunkMeta result; + result.NumRows = numRows; + result.RawBytes = rawBytes; + return result; + } + }; + TChunkMeta(const TColumnChunkLoadContext& context, const TIndexInfo& indexInfo); TChunkMeta(const std::shared_ptr<arrow::Array>& column, const ui32 columnId, const TIndexInfo& indexInfo); @@ -39,11 +50,28 @@ public: struct TColumnRecord { private: TChunkMeta Meta; + TColumnRecord(TChunkMeta&& meta) + : Meta(std::move(meta)) + { + + } public: ui32 ColumnId = 0; ui16 Chunk = 0; TBlobRange BlobRange; + class TTestInstanceBuilder { + public: + static TColumnRecord Build(const ui32 columnId, const ui16 chunkId, const ui64 offset, const ui64 size, const ui64 numRows, const ui64 rawBytes) { + TColumnRecord result(TChunkMeta::TTestInstanceBuilder::Build(numRows, rawBytes)); + result.ColumnId = columnId; + result.Chunk = chunkId; + result.BlobRange.Offset = offset; + result.BlobRange.Size = size; + return result; + } + }; + const TChunkMeta& GetMeta() const { return Meta; } diff --git a/ydb/core/tx/columnshard/engines/portions/portion_info.cpp b/ydb/core/tx/columnshard/engines/portions/portion_info.cpp index df3abc327ec..759ee9fae28 100644 --- a/ydb/core/tx/columnshard/engines/portions/portion_info.cpp +++ b/ydb/core/tx/columnshard/engines/portions/portion_info.cpp @@ -89,7 +89,7 @@ ui64 TPortionInfo::GetRawBytes(const std::vector<ui32>& columnIds) const { } else { for (auto&& r : Records) { if (r.ColumnId == i) { - sum += r.GetMeta().GetRawBytes(); + sum += r.GetMeta().GetRawBytes().value_or(0); } } } @@ -115,7 +115,6 @@ TString TPortionInfo::DebugString() const { if (RemoveSnapshot.Valid()) { sb << "remove_snapshot:(" << RemoveSnapshot.DebugString() << ");"; } - sb << "meta:(" << Meta.DebugString() << ");"; sb << "chunks:(" << Records.size() << ");"; return sb << ")"; } diff --git a/ydb/core/tx/columnshard/engines/portions/portion_info.h b/ydb/core/tx/columnshard/engines/portions/portion_info.h index 267e0d45704..88d90b2f3a2 100644 --- a/ydb/core/tx/columnshard/engines/portions/portion_info.h +++ b/ydb/core/tx/columnshard/engines/portions/portion_info.h @@ -199,7 +199,7 @@ public: std::optional<ui32> columnIdFirst; for (auto&& i : Records) { if (!columnIdFirst || *columnIdFirst == i.ColumnId) { - result += i.GetMeta().GetNumRows(); + result += i.GetMeta().GetNumRows().value_or(0); columnIdFirst = i.ColumnId; } } @@ -210,7 +210,7 @@ public: ui32 result = 0; for (auto&& i : Records) { if (columnId == i.ColumnId) { - result += i.GetMeta().GetNumRows(); + result += i.GetMeta().GetNumRows().value_or(0); } } return result; @@ -221,7 +221,7 @@ public: ui64 RawBytesSum() const { ui64 result = 0; for (auto&& i : Records) { - result += i.GetMeta().GetRawBytes(); + result += i.GetMeta().GetRawBytes().value_or(0); } return result; } @@ -400,8 +400,8 @@ public: auto pos = dataSchema.GetFieldIndex(rec.ColumnId); Y_ASSERT(pos >= 0); positionsMap[resulPos] = pos; - Y_VERIFY(columnChunks[resulPos].emplace(rec.Chunk, rec.BlobRange).second); - Y_VERIFY_S(rowsCount == NumRows(rec.ColumnId), TStringBuilder() << "Inconsistent rows " << rowsCount << "/" << NumRows(rec.ColumnId)); + AFL_VERIFY(columnChunks[resulPos].emplace(rec.Chunk, rec.BlobRange).second)("record", rec.DebugString()); +// AFL_VERIFY(rowsCount == NumRows(rec.ColumnId))("error", "Inconsistent rows")("portion", DebugString())("record", rec.DebugString())("column_records", NumRows(rec.ColumnId)); } // Make chunked arrays for columns |
