diff options
-rw-r--r-- | ydb/core/protos/data_events.proto | 1 | ||||
-rw-r--r-- | ydb/core/tx/datashard/datashard__write.cpp | 17 | ||||
-rw-r--r-- | ydb/core/tx/datashard/datashard_pipeline.cpp | 8 | ||||
-rw-r--r-- | ydb/core/tx/datashard/datashard_write.h | 1 |
4 files changed, 22 insertions, 5 deletions
diff --git a/ydb/core/protos/data_events.proto b/ydb/core/protos/data_events.proto index 20218d69e9..25945777d2 100644 --- a/ydb/core/protos/data_events.proto +++ b/ydb/core/protos/data_events.proto @@ -98,6 +98,7 @@ message TEvWriteResult { STATUS_OVERLOADED = 5; STATUS_CANCELLED = 6; STATUS_BAD_REQUEST = 7; + STATUS_SCHEME_CHANGED = 8; } // Status diff --git a/ydb/core/tx/datashard/datashard__write.cpp b/ydb/core/tx/datashard/datashard__write.cpp index 63ff4a55c1..437196f164 100644 --- a/ydb/core/tx/datashard/datashard__write.cpp +++ b/ydb/core/tx/datashard/datashard__write.cpp @@ -52,7 +52,7 @@ bool TDataShard::TTxWrite::Execute(TTransactionContext& txc, const TActorContext LOG_LOG_S_THROTTLE(Self->GetLogThrottler(TDataShard::ELogThrottlerType::TxProposeTransactionBase_Execute), ctx, NActors::NLog::PRI_ERROR, NKikimrServices::TX_DATASHARD, "TTxWrite:: errors while proposing transaction txid " << TxId << " at tablet " << Self->TabletID() << " status: " << status << " error: " << errMessage); - auto result = NEvents::TDataEvents::TEvWriteResult::BuildError(Self->TabletID(), TxId, NKikimrDataEvents::TEvWriteResult::STATUS_INTERNAL_ERROR, errMessage); + auto result = NEvents::TDataEvents::TEvWriteResult::BuildError(Self->TabletID(), TxId, NKikimrDataEvents::TEvWriteResult::STATUS_SCHEME_CHANGED, errMessage); TActorId target = Op ? Op->GetTarget() : Ev->Sender; ui64 cookie = Op ? Op->GetCookie() : Ev->Cookie; @@ -277,4 +277,19 @@ NKikimrTxDataShard::TEvProposeTransactionResult::EStatus EvWrite::Convertor::Get return NKikimrTxDataShard::TEvProposeTransactionResult::ERROR; } } + +NKikimrDataEvents::TEvWriteResult::EStatus EvWrite::Convertor::ConvertErrCode(NKikimrTxDataShard::TError::EKind code) { + switch (code) { + case NKikimrTxDataShard::TError_EKind_OK: + return NKikimrDataEvents::TEvWriteResult::STATUS_COMPLETED; + case NKikimrTxDataShard::TError_EKind_BAD_ARGUMENT: + case NKikimrTxDataShard::TError_EKind_SCHEME_ERROR: + case NKikimrTxDataShard::TError_EKind_WRONG_PAYLOAD_TYPE: + return NKikimrDataEvents::TEvWriteResult::STATUS_BAD_REQUEST; + case NKikimrTxDataShard::TError_EKind_SCHEME_CHANGED: + return NKikimrDataEvents::TEvWriteResult::STATUS_SCHEME_CHANGED; + default: + return NKikimrDataEvents::TEvWriteResult::STATUS_INTERNAL_ERROR; + } +} }
\ No newline at end of file diff --git a/ydb/core/tx/datashard/datashard_pipeline.cpp b/ydb/core/tx/datashard/datashard_pipeline.cpp index 980abdedb8..4c2cd57893 100644 --- a/ydb/core/tx/datashard/datashard_pipeline.cpp +++ b/ydb/core/tx/datashard/datashard_pipeline.cpp @@ -1583,13 +1583,13 @@ TOperation::TPtr TPipeline::BuildOperation(NEvents::TDataEvents::TEvWrite::TPtr& auto writeTx = writeOp->GetWriteTx(); Y_ABORT_UNLESS(writeTx); - auto badRequest = [&](const TString& error) { - writeOp->SetError(NKikimrDataEvents::TEvWriteResult::STATUS_BAD_REQUEST, TStringBuilder() << error << " at tablet# " << Self->TabletID()); + auto badRequest = [&](NKikimrDataEvents::TEvWriteResult::EStatus status, const TString& error) { + writeOp->SetError(status, TStringBuilder() << error << " at tablet# " << Self->TabletID()); LOG_ERROR_S(TActivationContext::AsActorContext(), NKikimrServices::TX_DATASHARD, error); }; if (!writeTx->Ready()) { - badRequest(TStringBuilder() << "Cannot parse tx " << writeOp->GetTxId() << ". " << writeOp->GetWriteTx()->GetErrCode() << ": " << writeOp->GetWriteTx()->GetErrStr()); + badRequest(EvWrite::Convertor::ConvertErrCode(writeOp->GetWriteTx()->GetErrCode()), TStringBuilder() << "Cannot parse tx " << writeOp->GetTxId() << ". " << writeOp->GetWriteTx()->GetErrCode() << ": " << writeOp->GetWriteTx()->GetErrStr()); return writeOp; } @@ -1605,7 +1605,7 @@ TOperation::TPtr TPipeline::BuildOperation(NEvents::TDataEvents::TEvWrite::TPtr& writeOp->SetImmediateFlag(); break; default: - badRequest(TStringBuilder() << "Unknown txmode: " << rec.txmode()); + badRequest(NKikimrDataEvents::TEvWriteResult::STATUS_BAD_REQUEST, TStringBuilder() << "Unknown txmode: " << rec.txmode()); return writeOp; } diff --git a/ydb/core/tx/datashard/datashard_write.h b/ydb/core/tx/datashard/datashard_write.h index af19b37c22..9caedb3527 100644 --- a/ydb/core/tx/datashard/datashard_write.h +++ b/ydb/core/tx/datashard/datashard_write.h @@ -16,5 +16,6 @@ public: static ui64 GetProposeFlags(NKikimrDataEvents::TEvWrite::ETxMode txMode); static NKikimrDataEvents::TEvWrite::ETxMode GetTxMode(ui64 flags); static NKikimrTxDataShard::TEvProposeTransactionResult::EStatus GetStatus(NKikimrDataEvents::TEvWriteResult::EStatus status); + static NKikimrDataEvents::TEvWriteResult::EStatus ConvertErrCode(NKikimrTxDataShard::TError::EKind code); }; }
\ No newline at end of file |