aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorivanmorozov333 <ivanmorozov@ydb.tech>2024-09-25 11:12:21 +0300
committerGitHub <noreply@github.com>2024-09-25 11:12:21 +0300
commit4b099673cf0a08f79cff089bb62c0245f66c4143 (patch)
treedb91dfd2d773aa829e9935659a099334a9e3364f
parent55fae2ae92daeb0d2b8dd49ddf8a0343df139d6c (diff)
downloadydb-4b099673cf0a08f79cff089bb62c0245f66c4143.tar.gz
EvWrite codes unification with kqp (#9698)
-rw-r--r--ydb/core/kqp/executer_actor/kqp_data_executer.cpp36
-rw-r--r--ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp4
-rw-r--r--ydb/core/tx/columnshard/blobs_action/transaction/tx_write.cpp3
-rw-r--r--ydb/core/tx/columnshard/engines/storage/optimizer/lbuckets/planner/optimizer.h2
-rw-r--r--ydb/core/tx/columnshard/operations/batch_builder/builder.cpp2
-rw-r--r--ydb/core/tx/data_events/common/error_codes.cpp32
-rw-r--r--ydb/core/tx/data_events/common/error_codes.h31
-rw-r--r--ydb/core/tx/data_events/common/ya.make3
-rw-r--r--ydb/core/tx/data_events/shard_writer.cpp6
-rw-r--r--ydb/library/yql/core/issue/protos/issue_id.proto3
-rw-r--r--ydb/library/yql/core/issue/yql_issue.txt12
11 files changed, 97 insertions, 37 deletions
diff --git a/ydb/core/kqp/executer_actor/kqp_data_executer.cpp b/ydb/core/kqp/executer_actor/kqp_data_executer.cpp
index 74d0bfda9b6..a3f3d0cb523 100644
--- a/ydb/core/kqp/executer_actor/kqp_data_executer.cpp
+++ b/ydb/core/kqp/executer_actor/kqp_data_executer.cpp
@@ -18,6 +18,7 @@
#include <ydb/core/kqp/runtime/kqp_transport.h>
#include <ydb/core/kqp/opt/kqp_query_plan.h>
#include <ydb/core/tx/columnshard/columnshard.h>
+#include <ydb/core/tx/data_events/common/error_codes.h>
#include <ydb/core/tx/datashard/datashard.h>
#include <ydb/core/tx/long_tx_service/public/events.h>
#include <ydb/core/tx/long_tx_service/public/lock_handle.h>
@@ -862,37 +863,12 @@ private:
void ShardError(const NKikimrDataEvents::TEvWriteResult& result) {
NYql::TIssues issues;
NYql::IssuesFromMessage(result.GetIssues(), issues);
-
- switch (result.GetStatus()) {
- case NKikimrDataEvents::TEvWriteResult::STATUS_UNSPECIFIED:
- case NKikimrDataEvents::TEvWriteResult::STATUS_PREPARED:
- case NKikimrDataEvents::TEvWriteResult::STATUS_COMPLETED: {
- YQL_ENSURE(false);
- }
- case NKikimrDataEvents::TEvWriteResult::STATUS_ABORTED: {
- return ReplyErrorAndDie(Ydb::StatusIds::ABORTED, issues);
- }
- case NKikimrDataEvents::TEvWriteResult::STATUS_DISK_SPACE_EXHAUSTED:
- case NKikimrDataEvents::TEvWriteResult::STATUS_INTERNAL_ERROR: {
- return ReplyErrorAndDie(Ydb::StatusIds::INTERNAL_ERROR, issues);
- }
- case NKikimrDataEvents::TEvWriteResult::STATUS_OVERLOADED: {
- return ReplyErrorAndDie(Ydb::StatusIds::OVERLOADED, issues);
- }
- case NKikimrDataEvents::TEvWriteResult::STATUS_CANCELLED: {
- return ReplyErrorAndDie(Ydb::StatusIds::CANCELLED, issues);
- }
- case NKikimrDataEvents::TEvWriteResult::STATUS_BAD_REQUEST: {
- return ReplyErrorAndDie(Ydb::StatusIds::BAD_REQUEST, issues);
- }
- case NKikimrDataEvents::TEvWriteResult::STATUS_SCHEME_CHANGED: {
- return ReplyErrorAndDie(Ydb::StatusIds::SCHEME_ERROR, issues);
- }
- case NKikimrDataEvents::TEvWriteResult::STATUS_LOCKS_BROKEN: {
- issues.AddIssue(NYql::YqlIssue({}, TIssuesIds::KIKIMR_LOCKS_INVALIDATED, "Transaction locks invalidated."));
- return ReplyErrorAndDie(Ydb::StatusIds::ABORTED, issues);
- }
+ auto statusConclusion = NEvWrite::NErrorCodes::TOperator::GetStatusInfo(result.GetStatus());
+ AFL_ENSURE(statusConclusion.IsSuccess())("error", statusConclusion.GetErrorMessage());
+ if (result.GetStatus() == NKikimrDataEvents::TEvWriteResult::STATUS_LOCKS_BROKEN) {
+ issues.AddIssue(NYql::YqlIssue({}, statusConclusion->GetIssueCode(), statusConclusion->GetIssueGeneralText()));
}
+ return ReplyErrorAndDie(statusConclusion->GetYdbStatusCode(), issues);
}
void PQTabletError(const NKikimrPQ::TEvProposeTransactionResult& result) {
diff --git a/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp b/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp
index ec81be006de..ec9c7c952e2 100644
--- a/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp
+++ b/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp
@@ -7953,13 +7953,13 @@ Y_UNIT_TEST_SUITE(KqpOlapScheme) {
TTestHelper::TUpdatesBuilder tableInserter(testTable.GetArrowSchema(schemaWithNull));
tableInserter.AddRow().Add(1).Add("test_res_1").AddNull();
tableInserter.AddRow().Add(2).Add("test_res_2").Add(123);
- testHelper.BulkUpsert(testTable, tableInserter, Ydb::StatusIds::GENERIC_ERROR);
+ testHelper.BulkUpsert(testTable, tableInserter, Ydb::StatusIds::BAD_REQUEST);
}
{
TTestHelper::TUpdatesBuilder tableInserter(testTable.GetArrowSchema(schemaWithNull));
tableInserter.AddRow().Add(1).Add("test_res_1").AddNull();
tableInserter.AddRow().Add(2).Add("test_res_2").Add(123);
- testHelper.BulkUpsert(testTable, tableInserter, Ydb::StatusIds::GENERIC_ERROR);
+ testHelper.BulkUpsert(testTable, tableInserter, Ydb::StatusIds::BAD_REQUEST);
}
testHelper.ReadData("SELECT * FROM `/Root/ColumnTableTest` WHERE id=1", "[]");
diff --git a/ydb/core/tx/columnshard/blobs_action/transaction/tx_write.cpp b/ydb/core/tx/columnshard/blobs_action/transaction/tx_write.cpp
index 48d94c41fd0..21f72c4f808 100644
--- a/ydb/core/tx/columnshard/blobs_action/transaction/tx_write.cpp
+++ b/ydb/core/tx/columnshard/blobs_action/transaction/tx_write.cpp
@@ -25,7 +25,8 @@ bool TTxWrite::CommitOneBlob(TTransactionContext& txc, const NOlap::TWideSeriali
NOlap::TDbWrapper dbTable(txc.DB, &dsGroupSelector);
NOlap::TCommittedData commitData(userData, Self->GetLastPlannedSnapshot(), Self->Generation(), writeId);
if (Self->TablesManager.HasTable(userData->GetPathId())) {
- Self->InsertTable->CommitEphemeral(dbTable, std::move(commitData));
+ auto counters = Self->InsertTable->CommitEphemeral(dbTable, std::move(commitData));
+ Self->Counters.GetTabletCounters()->OnWriteCommitted(counters);
}
Self->UpdateInsertTableCounters();
return true;
diff --git a/ydb/core/tx/columnshard/engines/storage/optimizer/lbuckets/planner/optimizer.h b/ydb/core/tx/columnshard/engines/storage/optimizer/lbuckets/planner/optimizer.h
index 7293e4cb1e4..2d580ae7cb0 100644
--- a/ydb/core/tx/columnshard/engines/storage/optimizer/lbuckets/planner/optimizer.h
+++ b/ydb/core/tx/columnshard/engines/storage/optimizer/lbuckets/planner/optimizer.h
@@ -1093,7 +1093,7 @@ public:
Y_UNUSED(LeftBucket->Actualize(currentInstant));
AddBucketToRating(LeftBucket);
for (auto&& i : Buckets) {
- const i64 rating = i.second->GetWeight();
+ const i64 rating = i.second->GetLastWeight();
if (i.second->Actualize(currentInstant)) {
RemoveBucketFromRating(i.second, rating);
AddBucketToRating(i.second);
diff --git a/ydb/core/tx/columnshard/operations/batch_builder/builder.cpp b/ydb/core/tx/columnshard/operations/batch_builder/builder.cpp
index 39aa61a9a00..e17acbe1069 100644
--- a/ydb/core/tx/columnshard/operations/batch_builder/builder.cpp
+++ b/ydb/core/tx/columnshard/operations/batch_builder/builder.cpp
@@ -32,7 +32,7 @@ TConclusionStatus TBuildBatchesTask::DoExecute(const std::shared_ptr<ITask>& /*t
ActualSchema->PrepareForModification(batchConclusion.DetachResult(), WriteData.GetWriteMeta().GetModificationType());
if (preparedConclusion.IsFail()) {
ReplyError("cannot prepare incoming batch: " + preparedConclusion.GetErrorMessage(),
- NColumnShard::TEvPrivate::TEvWriteBlobsResult::EErrorClass::Internal);
+ NColumnShard::TEvPrivate::TEvWriteBlobsResult::EErrorClass::Request);
return TConclusionStatus::Fail("cannot prepare incoming batch: " + preparedConclusion.GetErrorMessage());
}
auto batch = preparedConclusion.DetachResult();
diff --git a/ydb/core/tx/data_events/common/error_codes.cpp b/ydb/core/tx/data_events/common/error_codes.cpp
new file mode 100644
index 00000000000..f7cc9bae1e1
--- /dev/null
+++ b/ydb/core/tx/data_events/common/error_codes.cpp
@@ -0,0 +1,32 @@
+#include "error_codes.h"
+
+namespace NKikimr::NEvWrite::NErrorCodes {
+
+TConclusion<NErrorCodes::TOperator::TYdbStatusInfo> TOperator::GetStatusInfo(
+ const NKikimrDataEvents::TEvWriteResult::EStatus value) {
+ switch (value) {
+ case NKikimrDataEvents::TEvWriteResult::STATUS_UNSPECIFIED:
+ case NKikimrDataEvents::TEvWriteResult::STATUS_PREPARED:
+ case NKikimrDataEvents::TEvWriteResult::STATUS_COMPLETED:
+ return TConclusionStatus::Fail("Incorrect status for interpretation to YdbStatus");
+ case NKikimrDataEvents::TEvWriteResult::STATUS_ABORTED:
+ return TYdbStatusInfo(Ydb::StatusIds::ABORTED, NYql::TIssuesIds::KIKIMR_OPERATION_ABORTED, "Request aborted");
+ case NKikimrDataEvents::TEvWriteResult::STATUS_DISK_SPACE_EXHAUSTED:
+ return TYdbStatusInfo(Ydb::StatusIds::INTERNAL_ERROR, NYql::TIssuesIds::KIKIMR_DISK_SPACE_EXHAUSTED, "Disk space exhausted");
+ case NKikimrDataEvents::TEvWriteResult::STATUS_INTERNAL_ERROR:
+ return TYdbStatusInfo(Ydb::StatusIds::INTERNAL_ERROR, NYql::TIssuesIds::KIKIMR_INTERNAL_ERROR, "Request aborted");
+ case NKikimrDataEvents::TEvWriteResult::STATUS_OVERLOADED:
+ return TYdbStatusInfo(Ydb::StatusIds::OVERLOADED, NYql::TIssuesIds::KIKIMR_OVERLOADED, "System overloaded");
+ case NKikimrDataEvents::TEvWriteResult::STATUS_CANCELLED:
+ return TYdbStatusInfo(Ydb::StatusIds::CANCELLED, NYql::TIssuesIds::KIKIMR_OPERATION_CANCELLED, "Request cancelled");
+ case NKikimrDataEvents::TEvWriteResult::STATUS_BAD_REQUEST:
+ return TYdbStatusInfo(Ydb::StatusIds::BAD_REQUEST, NYql::TIssuesIds::KIKIMR_BAD_REQUEST, "Incorrect request");
+ case NKikimrDataEvents::TEvWriteResult::STATUS_SCHEME_CHANGED:
+ return TYdbStatusInfo(Ydb::StatusIds::SCHEME_ERROR, NYql::TIssuesIds::KIKIMR_SCHEMA_CHANGED, "Schema changed");
+ case NKikimrDataEvents::TEvWriteResult::STATUS_LOCKS_BROKEN: {
+ return TYdbStatusInfo(Ydb::StatusIds::ABORTED, NYql::TIssuesIds::KIKIMR_LOCKS_INVALIDATED, "Transaction locks invalidated.");
+ }
+ }
+}
+
+} \ No newline at end of file
diff --git a/ydb/core/tx/data_events/common/error_codes.h b/ydb/core/tx/data_events/common/error_codes.h
new file mode 100644
index 00000000000..a859b8bfdcb
--- /dev/null
+++ b/ydb/core/tx/data_events/common/error_codes.h
@@ -0,0 +1,31 @@
+#pragma once
+#include <ydb/core/protos/data_events.pb.h>
+#include <ydb/core/protos/tx_columnshard.pb.h>
+
+#include <ydb/library/accessor/accessor.h>
+#include <ydb/library/conclusion/result.h>
+#include <ydb/library/yql/core/issue/protos/issue_id.pb.h>
+#include <ydb/public/api/protos/ydb_status_codes.pb.h>
+
+namespace NKikimr::NEvWrite::NErrorCodes {
+
+class TOperator {
+public:
+ class TYdbStatusInfo {
+ private:
+ YDB_READONLY(Ydb::StatusIds::StatusCode, YdbStatusCode, Ydb::StatusIds::STATUS_CODE_UNSPECIFIED);
+ YDB_READONLY(NYql::TIssuesIds::EIssueCode, IssueCode, NYql::TIssuesIds::UNEXPECTED);
+ YDB_READONLY_DEF(TString, IssueGeneralText);
+
+ public:
+ TYdbStatusInfo(const Ydb::StatusIds::StatusCode code, const NYql::TIssuesIds::EIssueCode issueCode, const TString& issueMessage)
+ : YdbStatusCode(code)
+ , IssueCode(issueCode)
+ , IssueGeneralText(issueMessage) {
+ }
+ };
+
+ static TConclusion<TYdbStatusInfo> GetStatusInfo(const NKikimrDataEvents::TEvWriteResult::EStatus value);
+};
+
+} // namespace NKikimr::NEvWrite::NErrorCodes
diff --git a/ydb/core/tx/data_events/common/ya.make b/ydb/core/tx/data_events/common/ya.make
index acbb8ebd252..5d60d3500c3 100644
--- a/ydb/core/tx/data_events/common/ya.make
+++ b/ydb/core/tx/data_events/common/ya.make
@@ -2,10 +2,13 @@ LIBRARY()
PEERDIR(
ydb/core/protos
+ ydb/library/yql/core/issue/protos
+ ydb/public/api/protos
)
SRCS(
modification_type.cpp
+ error_codes.cpp
)
END()
diff --git a/ydb/core/tx/data_events/shard_writer.cpp b/ydb/core/tx/data_events/shard_writer.cpp
index e09a1bbc657..7d7f69ad067 100644
--- a/ydb/core/tx/data_events/shard_writer.cpp
+++ b/ydb/core/tx/data_events/shard_writer.cpp
@@ -1,4 +1,5 @@
#include "shard_writer.h"
+#include "common/error_codes.h"
#include <ydb/core/base/tablet_pipe.h>
#include <ydb/core/base/tablet_pipecache.h>
@@ -86,8 +87,9 @@ namespace NKikimr::NEvWrite {
auto gPassAway = PassAwayGuard();
if (ydbStatus != NKikimrDataEvents::TEvWriteResult::STATUS_COMPLETED) {
- ExternalController->OnFail(Ydb::StatusIds::GENERIC_ERROR,
- TStringBuilder() << "Cannot write data into shard " << ShardId << " in longTx " <<
+ auto statusInfo = NEvWrite::NErrorCodes::TOperator::GetStatusInfo(ydbStatus).DetachResult();
+ ExternalController->OnFail(statusInfo.GetYdbStatusCode(),
+ TStringBuilder() << "Cannot write data into shard(" << statusInfo.GetIssueGeneralText() << ") " << ShardId << " in longTx " <<
ExternalController->GetLongTxId().ToString());
return;
}
diff --git a/ydb/library/yql/core/issue/protos/issue_id.proto b/ydb/library/yql/core/issue/protos/issue_id.proto
index a635b9b9a52..dd9064c78ef 100644
--- a/ydb/library/yql/core/issue/protos/issue_id.proto
+++ b/ydb/library/yql/core/issue/protos/issue_id.proto
@@ -79,6 +79,9 @@ message TIssuesIds {
KIKIMR_UNSUPPORTED = 2030;
KIKIMR_BAD_COLUMN_TYPE = 2031;
KIKIMR_NO_COLUMN_DEFAULT_VALUE = 2032;
+ KIKIMR_DISK_SPACE_EXHAUSTED = 2033;
+ KIKIMR_SCHEMA_CHANGED = 2034;
+ KIKIMR_INTERNAL_ERROR = 2035;
// kikimr warnings
KIKIMR_READ_MODIFIED_TABLE = 2500;
diff --git a/ydb/library/yql/core/issue/yql_issue.txt b/ydb/library/yql/core/issue/yql_issue.txt
index 7a4151a1898..82a0a1eecd3 100644
--- a/ydb/library/yql/core/issue/yql_issue.txt
+++ b/ydb/library/yql/core/issue/yql_issue.txt
@@ -292,6 +292,18 @@ ids {
severity: S_ERROR
}
ids {
+ code: KIKIMR_DISK_SPACE_EXHAUSTED
+ severity: S_ERROR
+}
+ids {
+ code: KIKIMR_SCHEMA_CHANGED
+ severity: S_ERROR
+}
+ids {
+ code: KIKIMR_INTERNAL_ERROR
+ severity: S_ERROR
+}
+ids {
code: YQL_PRAGMA_WARNING_MSG
severity: S_WARNING
}