@@ -1186,17 +1186,18 @@ class TKqpTableWriteActor : public TActorBootstrapped<TKqpTableWriteActor> {
1186
1186
return ;
1187
1187
}
1188
1188
1189
+ const auto & reattachState = TxManager->GetReattachState (ev->Get ()->TabletId );
1190
+
1189
1191
const auto state = TxManager->GetState (ev->Get ()->TabletId );
1190
1192
if ((state == IKqpTransactionManager::PREPARED
1191
1193
|| state == IKqpTransactionManager::EXECUTING)
1192
1194
&& TxManager->ShouldReattach (ev->Get ()->TabletId , TlsActivationContext->Now ())) {
1193
1195
// Disconnected while waiting for other shards to prepare
1194
- auto & reattachState = TxManager->GetReattachState (ev->Get ()->TabletId );
1195
1196
CA_LOG_N (" Shard " << ev->Get ()->TabletId << " delivery problem (reattaching in "
1196
1197
<< reattachState.ReattachInfo .Delay << " )" );
1197
1198
1198
1199
Schedule (reattachState.ReattachInfo .Delay , new TEvPrivate::TEvReattachToShard (ev->Get ()->TabletId ));
1199
- } else if (state == IKqpTransactionManager::EXECUTING && !ev->Get ()->NotDelivered ) {
1200
+ } else if (state == IKqpTransactionManager::EXECUTING && ( !ev->Get ()->NotDelivered || reattachState. Cookie != 0 ) ) {
1200
1201
TxManager->SetError (ev->Get ()->TabletId );
1201
1202
RuntimeError (
1202
1203
NYql::NDqProto::StatusIds::UNDETERMINED,
@@ -1209,7 +1210,7 @@ class TKqpTableWriteActor : public TActorBootstrapped<TKqpTableWriteActor> {
1209
1210
} else if (state == IKqpTransactionManager::PROCESSING
1210
1211
|| state == IKqpTransactionManager::PREPARING
1211
1212
|| state == IKqpTransactionManager::PREPARED
1212
- || (state == IKqpTransactionManager::EXECUTING && ev->Get ()->NotDelivered )) {
1213
+ || (state == IKqpTransactionManager::EXECUTING && ( ev->Get ()->NotDelivered && reattachState. Cookie == 0 ) )) {
1213
1214
TxManager->SetError (ev->Get ()->TabletId );
1214
1215
RuntimeError (
1215
1216
NYql::NDqProto::StatusIds::UNAVAILABLE,
@@ -1228,7 +1229,7 @@ class TKqpTableWriteActor : public TActorBootstrapped<TKqpTableWriteActor> {
1228
1229
const auto & record = ev->Get ()->Record ;
1229
1230
const ui64 shardId = record.GetTabletId ();
1230
1231
1231
- auto & reattachState = TxManager->GetReattachState (shardId);
1232
+ const auto & reattachState = TxManager->GetReattachState (shardId);
1232
1233
if (reattachState.Cookie != ev->Cookie ) {
1233
1234
return ;
1234
1235
}
0 commit comments