summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorneyrox <[email protected]>2025-09-25 16:37:00 +0300
committerGitHub <[email protected]>2025-09-25 16:37:00 +0300
commitb7860cae96a6fc07779f8becd3dfc69dfee8cecf (patch)
treed0422a8f0673b35596dd5f53b42d247ee0827763
parent87c9805b273dc5b964012dd8951dd797bc7dd0ec (diff)
Added a muted test that causes a crash in ColumnShard (#25679)
-rw-r--r--ydb/core/formats/arrow/rows/view.cpp2
-rw-r--r--ydb/core/kqp/ut/tx/kqp_rollback.cpp79
-rw-r--r--ydb/core/kqp/ut/tx/ya.make1
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(