summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorivanmorozov <[email protected]>2023-08-20 20:38:16 +0300
committerivanmorozov <[email protected]>2023-08-20 21:15:42 +0300
commita75bcf87beca5d3303c7dfbd97e28e73c48e62cd (patch)
tree444febd20bee052196458a8176238c3b3fdddd6c
parent130ce4fa111923c9ed361811f605053d37b42ceb (diff)
KIKIMR-19093: fields may be not initialized through old store method
-rw-r--r--ydb/core/tx/columnshard/engines/column_engine_logs.cpp2
-rw-r--r--ydb/core/tx/columnshard/engines/portions/column_record.cpp8
-rw-r--r--ydb/core/tx/columnshard/engines/portions/column_record.h34
-rw-r--r--ydb/core/tx/columnshard/engines/portions/portion_info.cpp3
-rw-r--r--ydb/core/tx/columnshard/engines/portions/portion_info.h10
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