diff options
| author | neyrox <[email protected]> | 2025-09-25 16:37:00 +0300 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-09-25 16:37:00 +0300 |
| commit | b7860cae96a6fc07779f8becd3dfc69dfee8cecf (patch) | |
| tree | d0422a8f0673b35596dd5f53b42d247ee0827763 | |
| parent | 87c9805b273dc5b964012dd8951dd797bc7dd0ec (diff) | |
Added a muted test that causes a crash in ColumnShard (#25679)
| -rw-r--r-- | ydb/core/formats/arrow/rows/view.cpp | 2 | ||||
| -rw-r--r-- | ydb/core/kqp/ut/tx/kqp_rollback.cpp | 79 | ||||
| -rw-r--r-- | ydb/core/kqp/ut/tx/ya.make | 1 |
3 files changed, 81 insertions, 1 deletions
diff --git a/ydb/core/formats/arrow/rows/view.cpp b/ydb/core/formats/arrow/rows/view.cpp index 49e30c94c56..8ee2d624342 100644 --- a/ydb/core/formats/arrow/rows/view.cpp +++ b/ydb/core/formats/arrow/rows/view.cpp @@ -38,7 +38,7 @@ std::partial_ordering TSimpleRow::ComparePartNotNull(const TSimpleRow& item, con } std::partial_ordering TSimpleRow::CompareNotNull(const TSimpleRow& item) const { - AFL_VERIFY_DEBUG(Schema->Equals(*item.Schema)); + AFL_VERIFY_DEBUG(Schema->Equals(*item.Schema))("rowSchema", Schema->ToString(true))("itemSchema", item.Schema->ToString(true)); AFL_VERIFY(GetColumnsCount() <= item.GetColumnsCount()); return TSimpleRowViewV0(Data).Compare(TSimpleRowViewV0(item.Data), Schema).GetResult(); } diff --git a/ydb/core/kqp/ut/tx/kqp_rollback.cpp b/ydb/core/kqp/ut/tx/kqp_rollback.cpp new file mode 100644 index 00000000000..56743c44a87 --- /dev/null +++ b/ydb/core/kqp/ut/tx/kqp_rollback.cpp @@ -0,0 +1,79 @@ +#include <ydb/core/kqp/ut/common/kqp_ut_common.h> + +namespace NKikimr { +namespace NKqp { + +using namespace NYdb; +using namespace NYdb::NTable; + +Y_UNIT_TEST_SUITE(KqpRollback) { + Y_UNIT_TEST(DoubleUpdate) { + + // TODO fix crash + // https://github.com/ydb-platform/ydb/issues/25336 + return; + + // Given + TKikimrSettings sts; + sts.SetWithSampleTables(false); + sts.SetColumnShardReaderClassName("SIMPLE"); + sts.AppConfig.MutableTableServiceConfig()->SetAllowOlapDataQuery(true); + TKikimrRunner kikimr(sts); + auto db = kikimr.GetTableClient(); + auto session = db.CreateSession().GetValueSync().GetSession(); + + AssertSuccessResult(session.ExecuteSchemeQuery(R"( + CREATE TABLE `/Root/KVR` ( + id Uint64 NOT NULL, + vn Int32, + vs String, + PRIMARY KEY (id) + ) + WITH ( + STORE = COLUMN + ); + )").GetValueSync()); + + + auto rowsBuilder = NYdb::TValueBuilder(); + rowsBuilder.BeginList(); + for (ui32 i = 0; i < 100; ++i) { + rowsBuilder.AddListItem() + .BeginStruct() + .AddMember("id") + .Uint64(i) + .AddMember("vn") + .Int32(i) + .AddMember("vs") + .String(TString(3, '0' + i % 10)) + .EndStruct(); + } + rowsBuilder.EndList(); + + auto buRes = db.BulkUpsert("/Root/KVR", rowsBuilder.Build()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(buRes.GetStatus(), NYdb::EStatus::SUCCESS, buRes.GetIssues().ToString()); + + // When 0 + auto result = session.ExecuteDataQuery(Q_(R"( + UPDATE `/Root/KVR` SET vs = 'whatever' WHERE id = 2u; + )"), TTxControl::BeginTx()).ExtractValueSync(); + UNIT_ASSERT(result.IsSuccess()); + auto tx1 = result.GetTransaction(); + auto rollbackResult = tx1->Rollback().GetValueSync(); + // Then 0 + UNIT_ASSERT_VALUES_EQUAL_C(rollbackResult.GetStatus(), EStatus::SUCCESS, rollbackResult.GetIssues().ToString()); + + // When 1 + result = session.ExecuteDataQuery(Q_(R"( + UPDATE `/Root/KVR` SET vs = 'xyz'; + )"), TTxControl::BeginTx()).ExtractValueSync(); + UNIT_ASSERT(result.IsSuccess()); + auto tx2 = result.GetTransaction(); + rollbackResult = tx2->Rollback().GetValueSync(); + // Then 1 + UNIT_ASSERT_VALUES_EQUAL_C(rollbackResult.GetStatus(), EStatus::SUCCESS, rollbackResult.GetIssues().ToString()); + } +} + +} // namespace NKqp +} // namespace NKikimr diff --git a/ydb/core/kqp/ut/tx/ya.make b/ydb/core/kqp/ut/tx/ya.make index 0a6133025b6..5fdba24e9eb 100644 --- a/ydb/core/kqp/ut/tx/ya.make +++ b/ydb/core/kqp/ut/tx/ya.make @@ -19,6 +19,7 @@ SRCS( kqp_sink_tx_ut.cpp kqp_snapshot_isolation_ut.cpp kqp_tx_ut.cpp + kqp_rollback.cpp ) PEERDIR( |
