From ee419dbcdec5f5bac819a17618598ca2cf13e4c2 Mon Sep 17 00:00:00 2001 From: ivanmorozov333 Date: Tue, 30 Jul 2024 17:03:46 +0300 Subject: fix segfault in case normalization different versions (#7239) --- ydb/core/formats/arrow/common/container.cpp | 5 +++++ ydb/core/formats/arrow/common/container.h | 8 +++++++- .../tx/columnshard/engines/scheme/versions/abstract_scheme.cpp | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/ydb/core/formats/arrow/common/container.cpp b/ydb/core/formats/arrow/common/container.cpp index 7e8209dfad5..e910a6837a1 100644 --- a/ydb/core/formats/arrow/common/container.cpp +++ b/ydb/core/formats/arrow/common/container.cpp @@ -123,6 +123,11 @@ TGeneralContainer::TGeneralContainer(const std::shared_ptr& Initialize(); } +TGeneralContainer::TGeneralContainer(const ui32 recordsCount) + : RecordsCount(recordsCount) + , Schema(std::make_shared()) { +} + std::shared_ptr TGeneralContainer::GetAccessorByNameVerified(const std::string& fieldId) const { auto result = GetAccessorByNameOptional(fieldId); AFL_VERIFY(result)("event", "cannot_find_accessor_in_general_container")("field_id", fieldId)("schema", Schema->ToString()); diff --git a/ydb/core/formats/arrow/common/container.h b/ydb/core/formats/arrow/common/container.h index 90d686ce4e4..823f04821d5 100644 --- a/ydb/core/formats/arrow/common/container.h +++ b/ydb/core/formats/arrow/common/container.h @@ -29,6 +29,13 @@ private: std::vector> Columns; void Initialize(); public: + TGeneralContainer(const ui32 recordsCount); + + ui32 GetRecordsCountVerified() const { + AFL_VERIFY(RecordsCount); + return *RecordsCount; + } + TString DebugString() const; [[nodiscard]] TConclusionStatus SyncSchemaTo(const std::shared_ptr& schema, @@ -67,7 +74,6 @@ public: [[nodiscard]] TConclusionStatus AddField(const std::shared_ptr& f, const std::shared_ptr& data); - TGeneralContainer() = default; TGeneralContainer(const std::shared_ptr& table); TGeneralContainer(const std::shared_ptr& table); TGeneralContainer(const std::shared_ptr& schema, std::vector>&& columns); diff --git a/ydb/core/tx/columnshard/engines/scheme/versions/abstract_scheme.cpp b/ydb/core/tx/columnshard/engines/scheme/versions/abstract_scheme.cpp index c6efc7a5567..3eeca97bde2 100644 --- a/ydb/core/tx/columnshard/engines/scheme/versions/abstract_scheme.cpp +++ b/ydb/core/tx/columnshard/engines/scheme/versions/abstract_scheme.cpp @@ -35,7 +35,7 @@ TConclusion> ISnapshotSchema::Normali AFL_VERIFY(dataSchema.GetSnapshot() < GetSnapshot()); const std::shared_ptr& resultArrowSchema = GetSchema(); - std::shared_ptr result = std::make_shared(); + std::shared_ptr result = std::make_shared(batch->GetRecordsCountVerified()); for (size_t i = 0; i < resultArrowSchema->fields().size(); ++i) { auto& resultField = resultArrowSchema->fields()[i]; auto columnId = GetIndexInfo().GetColumnId(resultField->name()); -- cgit v1.3