aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorivanmorozov333 <ivanmorozov@ydb.tech>2025-01-24 12:41:00 +0300
committerGitHub <noreply@github.com>2025-01-24 12:41:00 +0300
commite47c645311e7ddf0a277cfd3a1c07a0e24130c3f (patch)
tree954ce2ebd9c62c6c01a34bc917cdfe4cb98e9f4e
parentf1461921e53f5e780bdd7f4f8dc3585cebfde37e (diff)
downloadydb-e47c645311e7ddf0a277cfd3a1c07a0e24130c3f.tar.gz
correct validation for second init tx received (#13773)
-rw-r--r--ydb/core/tx/columnshard/columnshard_impl.h2
-rw-r--r--ydb/core/tx/columnshard/transactions/operators/schema.cpp4
-rw-r--r--ydb/core/tx/columnshard/transactions/operators/schema.h1
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());
}