aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Borzenkov <snaury@yandex-team.ru>2022-03-16 15:49:18 +0300
committerAlexey Borzenkov <snaury@yandex-team.ru>2022-03-16 15:49:18 +0300
commit27a5cd41211b4830645af09a405fec8d1d0c020e (patch)
treeee2be0a53b46ca775a93f86d429d4bf04e1dd03e
parent2d7c45699407a880f3c729547b042914dbd65caf (diff)
downloadydb-27a5cd41211b4830645af09a405fec8d1d0c020e.tar.gz
Handle schema change in immediate kqp data transactions, KIKIMR-14518
ref:75592b3c8c6864c09a1cf84c0973aaafbb370f27
-rw-r--r--ydb/core/tx/datashard/execute_kqp_data_tx_unit.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/ydb/core/tx/datashard/execute_kqp_data_tx_unit.cpp b/ydb/core/tx/datashard/execute_kqp_data_tx_unit.cpp
index 78bfb34c32b..c49ee35beec 100644
--- a/ydb/core/tx/datashard/execute_kqp_data_tx_unit.cpp
+++ b/ydb/core/tx/datashard/execute_kqp_data_tx_unit.cpp
@@ -77,9 +77,22 @@ EExecutionStatus TExecuteKqpDataTxUnit::Execute(TOperation::TPtr op, TTransactio
switch (Pipeline.RestoreDataTx(tx, txc, ctx)) {
case ERestoreDataStatus::Ok:
break;
+
case ERestoreDataStatus::Restart:
return EExecutionStatus::Restart;
+
case ERestoreDataStatus::Error:
+ // For immediate transactions we want to translate this into a propose failure
+ if (op->IsImmediate()) {
+ const auto& dataTx = tx->GetDataTx();
+ Y_VERIFY(!dataTx->Ready());
+ op->SetAbortedFlag();
+ BuildResult(op, NKikimrTxDataShard::TEvProposeTransactionResult::ERROR);
+ op->Result()->SetProcessError(dataTx->Code(), dataTx->GetErrors());
+ return EExecutionStatus::Executed;
+ }
+
+ // For planned transactions errors are not expected
Y_FAIL("Failed to restore tx data: %s", tx->GetDataTx()->GetErrors().c_str());
}
}