aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Efimov <xeno@ydb.tech>2024-07-09 13:56:30 +0700
committerGitHub <noreply@github.com>2024-07-09 06:56:30 +0000
commit77cb18fe4bf5a70a9cd1ba57dcbb0c1abb327eab (patch)
tree39b720caa6e72be065818eaeb923d241cf6f961d
parent0fa3052f7c623d25d997e4844c4f1672be40efca (diff)
downloadydb-77cb18fe4bf5a70a9cd1ba57dcbb0c1abb327eab.tar.gz
fix query errors processing (#6441)
-rw-r--r--ydb/core/viewer/json_query.h2
-rw-r--r--ydb/core/viewer/viewer.cpp31
2 files changed, 18 insertions, 15 deletions
diff --git a/ydb/core/viewer/json_query.h b/ydb/core/viewer/json_query.h
index 0378f12d516..9b6fad555be 100644
--- a/ydb/core/viewer/json_query.h
+++ b/ydb/core/viewer/json_query.h
@@ -481,7 +481,7 @@ private:
NViewer::MakeErrorReply(jsonResponse, message, status);
if (Span) {
- Span.EndError("Error");
+ Span.EndError(message);
}
}
diff --git a/ydb/core/viewer/viewer.cpp b/ydb/core/viewer/viewer.cpp
index 4ae033dcfda..53473f77287 100644
--- a/ydb/core/viewer/viewer.cpp
+++ b/ydb/core/viewer/viewer.cpp
@@ -779,31 +779,34 @@ void MakeErrorReply(NJson::TJsonValue& jsonResponse, TString& message, const NYd
NYql::IssuesToMessage(status.GetIssues(), &protoIssues);
message.clear();
+
+ NJson::TJsonValue& jsonIssues = jsonResponse["issues"];
+ for (const auto& queryIssue : protoIssues) {
+ NJson::TJsonValue& issue = jsonIssues.AppendValue({});
+ NProtobufJson::Proto2Json(queryIssue, issue);
+ }
+
+ TString textStatus = TStringBuilder() << status.GetStatus();
+ jsonResponse["status"] = textStatus;
+
// find first deepest error
std::stable_sort(protoIssues.begin(), protoIssues.end(), [](const Ydb::Issue::IssueMessage& a, const Ydb::Issue::IssueMessage& b) -> bool {
return a.severity() < b.severity();
});
- while (protoIssues.size() > 0 && protoIssues[0].issuesSize() > 0) {
- protoIssues = protoIssues[0].issues();
+ const google::protobuf::RepeatedPtrField<Ydb::Issue::IssueMessage>* protoIssuesPtr = &protoIssues;
+ while (protoIssuesPtr->size() > 0 && protoIssuesPtr->at(0).issuesSize() > 0) {
+ protoIssuesPtr = &protoIssuesPtr->at(0).issues();
}
- if (protoIssues.size() > 0) {
- const Ydb::Issue::IssueMessage& issue = protoIssues[0];
+ if (protoIssuesPtr->size() > 0) {
+ const Ydb::Issue::IssueMessage& issue = protoIssuesPtr->at(0);
NProtobufJson::Proto2Json(issue, jsonResponse["error"]);
message = issue.message();
+ } else {
+ jsonResponse["error"]["message"] = textStatus;
}
- NJson::TJsonValue& jsonIssues = jsonResponse["issues"];
- for (const auto& queryIssue : protoIssues) {
- NJson::TJsonValue& issue = jsonIssues.AppendValue({});
- NProtobufJson::Proto2Json(queryIssue, issue);
- }
-
- TString textStatus = TStringBuilder() << status.GetStatus();
-
- jsonResponse["status"] = textStatus;
-
if (message.empty()) {
message = textStatus;
}