diff options
author | ivanmorozov333 <ivanmorozov@ydb.tech> | 2025-01-24 12:41:00 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-24 12:41:00 +0300 |
commit | e47c645311e7ddf0a277cfd3a1c07a0e24130c3f (patch) | |
tree | 954ce2ebd9c62c6c01a34bc917cdfe4cb98e9f4e | |
parent | f1461921e53f5e780bdd7f4f8dc3585cebfde37e (diff) | |
download | ydb-e47c645311e7ddf0a277cfd3a1c07a0e24130c3f.tar.gz |
correct validation for second init tx received (#13773)
-rw-r--r-- | ydb/core/tx/columnshard/columnshard_impl.h | 2 | ||||
-rw-r--r-- | ydb/core/tx/columnshard/transactions/operators/schema.cpp | 4 | ||||
-rw-r--r-- | ydb/core/tx/columnshard/transactions/operators/schema.h | 1 |
3 files changed, 6 insertions, 1 deletions
diff --git a/ydb/core/tx/columnshard/columnshard_impl.h b/ydb/core/tx/columnshard/columnshard_impl.h index b86b895eb2a..ee9cf3715fc 100644 --- a/ydb/core/tx/columnshard/columnshard_impl.h +++ b/ydb/core/tx/columnshard/columnshard_impl.h @@ -338,6 +338,8 @@ class TColumnShard: public TActor<TColumnShard>, public NTabletFlatExecutor::TTa std::shared_ptr<TAtomicCounter> TabletActivityImpl = std::make_shared<TAtomicCounter>(0); public: + TAtomicCounter InitShardCounter; + ui64 BuildEphemeralTxId() { static TAtomicCounter Counter = 0; static constexpr ui64 shift = (ui64)1 << 47; diff --git a/ydb/core/tx/columnshard/transactions/operators/schema.cpp b/ydb/core/tx/columnshard/transactions/operators/schema.cpp index debb1a6b298..03f310ad711 100644 --- a/ydb/core/tx/columnshard/transactions/operators/schema.cpp +++ b/ydb/core/tx/columnshard/transactions/operators/schema.cpp @@ -54,6 +54,10 @@ TTxController::TProposeResult TSchemaTransactionOperator::DoStartProposeOnExecut switch (SchemaTxBody.TxBody_case()) { case NKikimrTxColumnShard::TSchemaTxBody::kInitShard: { + if (owner.InitShardCounter.Add(1) != 1) { + AFL_WARN(NKikimrServices::TX_COLUMNSHARD)("event", "repeated_initialization")("tx_id", GetTxId())( + "counter", owner.InitShardCounter.Val()); + } auto validationStatus = ValidateTables(SchemaTxBody.GetInitShard().GetTables()); if (validationStatus.IsFail()) { return TProposeResult(NKikimrTxColumnShard::EResultStatus::SCHEMA_ERROR, "Invalid schema: " + validationStatus.GetErrorMessage()); diff --git a/ydb/core/tx/columnshard/transactions/operators/schema.h b/ydb/core/tx/columnshard/transactions/operators/schema.h index 8b7575cc3cc..df0b8aedb07 100644 --- a/ydb/core/tx/columnshard/transactions/operators/schema.h +++ b/ydb/core/tx/columnshard/transactions/operators/schema.h @@ -24,7 +24,6 @@ private: THashSet<ui64> GetNotErasedTableIds(const TColumnShard& owner, const TInfoProto& tables) const { THashSet<ui64> result; for (auto&& i : tables) { - AFL_VERIFY(!owner.TablesManager.HasTable(i.GetPathId())); if (owner.TablesManager.HasTable(i.GetPathId(), true)) { result.emplace(i.GetPathId()); } |