Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions ydb/core/protos/data_events.proto
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ message TEvWriteResult {
STATUS_OVERLOADED = 5;
STATUS_CANCELLED = 6;
STATUS_BAD_REQUEST = 7;
STATUS_SCHEME_CHANGED = 8;
}

// Status
Expand Down
17 changes: 16 additions & 1 deletion ydb/core/tx/datashard/datashard__write.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
}
}
8 changes: 4 additions & 4 deletions ydb/core/tx/datashard/datashard_pipeline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand All @@ -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;
}

Expand Down
1 change: 1 addition & 0 deletions ydb/core/tx/datashard/datashard_write.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,6 @@ class Convertor {
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);
};
}