@@ -241,12 +241,7 @@ class TKqpDataExecuter : public TKqpExecuterBase<TKqpDataExecuter, EExecType::Da
241
241
}
242
242
243
243
void Finalize () {
244
- if (LocksBroken) {
245
- TString message = " Transaction locks invalidated." ;
246
-
247
- return ReplyErrorAndDie (Ydb::StatusIds::ABORTED,
248
- YqlIssue ({}, TIssuesIds::KIKIMR_LOCKS_INVALIDATED, message));
249
- }
244
+ YQL_ENSURE (!LocksBroken);
250
245
251
246
auto & response = *ResponseEv->Record .MutableResponse ();
252
247
@@ -1183,6 +1178,23 @@ class TKqpDataExecuter : public TKqpExecuterBase<TKqpDataExecuter, EExecType::Da
1183
1178
CheckExecutionComplete ();
1184
1179
return ;
1185
1180
}
1181
+ case NKikimrDataEvents::TEvWriteResult::STATUS_LOCKS_BROKEN: {
1182
+ LOG_D (" Broken locks: " << res->Record .DebugString ());
1183
+ YQL_ENSURE (shardState->State == TShardState::EState::Executing);
1184
+ shardState->State = TShardState::EState::Finished;
1185
+ Counters->TxProxyMon ->TxResultAborted ->Inc ();
1186
+ LocksBroken = true ;
1187
+
1188
+ if (!res->Record .GetTxLocks ().empty ()) {
1189
+ ResponseEv->BrokenLockPathId = NYql::TKikimrPathId (
1190
+ res->Record .GetTxLocks (0 ).GetSchemeShard (),
1191
+ res->Record .GetTxLocks (0 ).GetPathId ());
1192
+ return ReplyErrorAndDie (Ydb::StatusIds::ABORTED, {});
1193
+ }
1194
+
1195
+ CheckExecutionComplete ();
1196
+ return ;
1197
+ }
1186
1198
default :
1187
1199
{
1188
1200
return ShardError (res->Record );
@@ -1235,31 +1247,15 @@ class TKqpDataExecuter : public TKqpExecuterBase<TKqpDataExecuter, EExecType::Da
1235
1247
shardState->State = TShardState::EState::Finished;
1236
1248
1237
1249
Counters->TxProxyMon ->TxResultAborted ->Inc (); // TODO: dedicated counter?
1238
-
1239
1250
LocksBroken = true ;
1240
1251
1241
- TMaybe<TString> tableName;
1242
1252
if (!res->Record .GetTxLocks ().empty ()) {
1243
- auto & lock = res->Record .GetTxLocks (0 );
1244
- auto tableId = TTableId (lock.GetSchemeShard (), lock.GetPathId ());
1245
- auto it = FindIf (TasksGraph.GetStagesInfo (), [tableId](const auto & x){ return x.second .Meta .TableId .HasSamePath (tableId); });
1246
- if (it != TasksGraph.GetStagesInfo ().end ()) {
1247
- tableName = it->second .Meta .TableConstInfo ->Path ;
1248
- }
1253
+ ResponseEv->BrokenLockPathId = TKikimrPathId (
1254
+ res->Record .GetTxLocks (0 ).GetSchemeShard (),
1255
+ res->Record .GetTxLocks (0 ).GetPathId ());
1249
1256
}
1250
1257
1251
- // Reply as soon as we know which table had locks invalidated
1252
- if (tableName) {
1253
- auto message = TStringBuilder ()
1254
- << " Transaction locks invalidated. Table: " << *tableName;
1255
-
1256
- return ReplyErrorAndDie (Ydb::StatusIds::ABORTED,
1257
- YqlIssue ({}, TIssuesIds::KIKIMR_LOCKS_INVALIDATED, message));
1258
- }
1259
-
1260
- // Receive more replies from other shards
1261
- CheckExecutionComplete ();
1262
- return ;
1258
+ return ReplyErrorAndDie (Ydb::StatusIds::ABORTED, {});
1263
1259
}
1264
1260
case NKikimrTxDataShard::TEvProposeTransactionResult::PREPARED: {
1265
1261
YQL_ENSURE (false );
0 commit comments