Skip to content

Commit 283523c

Browse files
nikvas0blinkov
authored andcommitted
More useful error for different coordinators (#15058)
1 parent b6da66b commit 283523c

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

ydb/core/kqp/common/kqp_tx_manager.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,10 @@ class TKqpTransactionManager : public IKqpTransactionManager {
307307
return !dontNeedCommit;
308308
}
309309

310+
virtual ui64 GetCoordinator() const override {
311+
return Coordinator;
312+
}
313+
310314
void StartPrepare() override {
311315
AFL_ENSURE(!CollectOnly);
312316
AFL_ENSURE(State == ETransactionState::COLLECTING);

ydb/core/kqp/common/kqp_tx_manager.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ class IKqpTransactionManager {
9595

9696
virtual bool NeedCommit() const = 0;
9797

98+
virtual ui64 GetCoordinator() const = 0;
99+
98100
virtual void StartPrepare() = 0;
99101

100102
struct TPrepareInfo {

ydb/core/kqp/runtime/kqp_write_actor.cpp

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2581,11 +2581,21 @@ class TKqpBufferWriteActor :public TActorBootstrapped<TKqpBufferWriteActor>, pub
25812581
Process();
25822582
}
25832583

2584-
void OnPrepared(IKqpTransactionManager::TPrepareResult&& preparedInfo, ui64 dataSize) override {
2584+
void OnPrepared(IKqpTransactionManager::TPrepareResult&& preparedInfo, ui64) override {
25852585
if (State != EState::PREPARING) {
25862586
return;
25872587
}
2588-
Y_UNUSED(preparedInfo, dataSize);
2588+
if (!preparedInfo.Coordinator || (TxManager->GetCoordinator() && preparedInfo.Coordinator != TxManager->GetCoordinator())) {
2589+
CA_LOG_E("Handle TEvWriteResult: unable to select coordinator. Tx canceled, actorId: " << SelfId()
2590+
<< ", previously selected coordinator: " << TxManager->GetCoordinator()
2591+
<< ", coordinator selected at propose result: " << preparedInfo.Coordinator);
2592+
2593+
TxProxyMon->TxResultAborted->Inc();
2594+
ReplyErrorAndDie(NYql::NDqProto::StatusIds::CANCELLED,
2595+
NKikimrIssues::TIssuesIds::TX_DECLINED_IMPLICIT_COORDINATOR,
2596+
"Unable to choose coordinator.");
2597+
return;
2598+
}
25892599
if (TxManager->ConsumePrepareTransactionResult(std::move(preparedInfo))) {
25902600
OnOperationFinished(Counters->BufferActorPrepareLatencyHistogram);
25912601
TxManager->StartExecute();
@@ -2596,11 +2606,10 @@ class TKqpBufferWriteActor :public TActorBootstrapped<TKqpBufferWriteActor>, pub
25962606
Process();
25972607
}
25982608

2599-
void OnCommitted(ui64 shardId, ui64 dataSize) override {
2609+
void OnCommitted(ui64 shardId, ui64) override {
26002610
if (State != EState::COMMITTING) {
26012611
return;
26022612
}
2603-
Y_UNUSED(dataSize);
26042613
if (TxManager->ConsumeCommitResult(shardId)) {
26052614
CA_LOG_D("Committed TxId=" << TxId.value_or(0));
26062615
OnOperationFinished(Counters->BufferActorCommitLatencyHistogram);
@@ -2615,8 +2624,7 @@ class TKqpBufferWriteActor :public TActorBootstrapped<TKqpBufferWriteActor>, pub
26152624
}
26162625
}
26172626

2618-
void OnMessageAcknowledged(ui64 dataSize) override {
2619-
Y_UNUSED(dataSize);
2627+
void OnMessageAcknowledged(ui64) override {
26202628
Process();
26212629
}
26222630

@@ -2641,7 +2649,7 @@ class TKqpBufferWriteActor :public TActorBootstrapped<TKqpBufferWriteActor>, pub
26412649
ReplyErrorAndDie(statusCode, std::move(issues));
26422650
}
26432651

2644-
void ReplyErrorAndDie(NYql::NDqProto::StatusIds::StatusCode statusCode, NYql::EYqlIssueCode id, const TString& message, const NYql::TIssues& subIssues = {}) {
2652+
void ReplyErrorAndDie(NYql::NDqProto::StatusIds::StatusCode statusCode, auto id, const TString& message, const NYql::TIssues& subIssues = {}) {
26452653
BufferWriteActorState.EndError(message);
26462654
BufferWriteActor.EndError(message);
26472655

0 commit comments

Comments
 (0)