aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ydb/core/protos/data_events.proto1
-rw-r--r--ydb/core/tx/datashard/datashard__write.cpp17
-rw-r--r--ydb/core/tx/datashard/datashard_pipeline.cpp8
-rw-r--r--ydb/core/tx/datashard/datashard_write.h1
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