From 7f4013dbfc4088b5880cf044f3e0ef1028a4e116 Mon Sep 17 00:00:00 2001 From: ivanmorozov333 Date: Fri, 17 May 2024 11:35:56 +0300 Subject: [PATCH] fix tx usage after restart - restore prepare result (#4632) --- .../tx/columnshard/transactions/operators/backup.h | 4 ---- .../tx/columnshard/transactions/operators/schema.h | 4 ---- .../columnshard/transactions/operators/sharing.h | 5 ----- .../tx/columnshard/transactions/tx_controller.cpp | 2 +- .../tx/columnshard/transactions/tx_controller.h | 14 ++++++-------- 5 files changed, 7 insertions(+), 22 deletions(-) diff --git a/ydb/core/tx/columnshard/transactions/operators/backup.h b/ydb/core/tx/columnshard/transactions/operators/backup.h index c30177e35f61..a3beeff24a7c 100644 --- a/ydb/core/tx/columnshard/transactions/operators/backup.h +++ b/ydb/core/tx/columnshard/transactions/operators/backup.h @@ -30,10 +30,6 @@ class TBackupTransactionOperator: public IProposeTxOperator { public: using TBase::TBase; - virtual bool AllowTxDups() const override { - return true; - } - virtual bool ExecuteOnProgress(TColumnShard& owner, const NOlap::TSnapshot& version, NTabletFlatExecutor::TTransactionContext& txc) override; virtual bool CompleteOnProgress(TColumnShard& owner, const TActorContext& ctx) override; diff --git a/ydb/core/tx/columnshard/transactions/operators/schema.h b/ydb/core/tx/columnshard/transactions/operators/schema.h index 20f63e94114c..2cc36018fff1 100644 --- a/ydb/core/tx/columnshard/transactions/operators/schema.h +++ b/ydb/core/tx/columnshard/transactions/operators/schema.h @@ -30,10 +30,6 @@ namespace NKikimr::NColumnShard { public: using TBase::TBase; - virtual bool AllowTxDups() const override { - return true; - } - bool TxWithDeadline() const override { return false; } diff --git a/ydb/core/tx/columnshard/transactions/operators/sharing.h b/ydb/core/tx/columnshard/transactions/operators/sharing.h index b571359c9881..89ebd5c9acda 100644 --- a/ydb/core/tx/columnshard/transactions/operators/sharing.h +++ b/ydb/core/tx/columnshard/transactions/operators/sharing.h @@ -34,11 +34,6 @@ class TSharingTransactionOperator: public IProposeTxOperator { NotifySubscribers.insert(actorId); } - virtual bool AllowTxDups() const override { - return true; - } - - virtual bool ExecuteOnProgress(TColumnShard& owner, const NOlap::TSnapshot& version, NTabletFlatExecutor::TTransactionContext& txc) override; virtual bool CompleteOnProgress(TColumnShard& owner, const TActorContext& ctx) override; diff --git a/ydb/core/tx/columnshard/transactions/tx_controller.cpp b/ydb/core/tx/columnshard/transactions/tx_controller.cpp index 98b3eca6742a..35b214e8136c 100644 --- a/ydb/core/tx/columnshard/transactions/tx_controller.cpp +++ b/ydb/core/tx/columnshard/transactions/tx_controller.cpp @@ -92,7 +92,7 @@ TTxController::ITransactionOperator::TPtr TTxController::GetVerifiedTxOperator(c std::shared_ptr TTxController::UpdateTxSourceInfo(const TFullTxInfo& tx, NTabletFlatExecutor::TTransactionContext& txc) { auto op = GetVerifiedTxOperator(tx.GetTxId()); - op->ResetStatus(); + op->ResetStatusOnUpdate(); auto& txInfo = op->MutableTxInfo(); txInfo.Source = tx.Source; txInfo.Cookie = tx.Cookie; diff --git a/ydb/core/tx/columnshard/transactions/tx_controller.h b/ydb/core/tx/columnshard/transactions/tx_controller.h index 1a883a3db304..429d699faf6b 100644 --- a/ydb/core/tx/columnshard/transactions/tx_controller.h +++ b/ydb/core/tx/columnshard/transactions/tx_controller.h @@ -183,6 +183,10 @@ class TTxController { return TxInfo; } + void ResetStatusOnUpdate() { + Status = {}; + } + public: using TPtr = std::shared_ptr; using TFactory = NObjectFactory::TParametrizedObjectFactory; @@ -191,10 +195,6 @@ class TTxController { return DoCheckAllowUpdate(currentTxInfo); } - void ResetStatus() { - Status = {}; - } - bool IsFail() const { return ProposeStartInfo && ProposeStartInfo->IsFail(); } @@ -221,10 +221,6 @@ class TTxController { return TxInfo.TxId; } - virtual bool AllowTxDups() const { - return false; - } - bool IsAsync() const { return DoIsAsync() && Status != EStatus::Failed && Status != EStatus::ReplySent; } @@ -238,6 +234,7 @@ class TTxController { bool Parse(TColumnShard& owner, const TString& data, const bool onLoad = false) { const bool result = DoParse(owner, data); if (!result) { + AFL_VERIFY(!onLoad); ProposeStartInfo = TTxController::TProposeResult(NKikimrTxColumnShard::EResultStatus::ERROR, TStringBuilder() << "Error processing commit TxId# " << TxInfo.TxId << ". Parsing error"); AFL_VERIFY(SwitchState(EStatus::Created, EStatus::Failed)); @@ -245,6 +242,7 @@ class TTxController { AFL_VERIFY(SwitchState(EStatus::Created, EStatus::Parsed)); } if (onLoad) { + ProposeStartInfo = TTxController::TProposeResult(NKikimrTxColumnShard::EResultStatus::PREPARED, "success on iteration before restart"); Status = {}; } return result;