diff options
author | Alexey Efimov <xeno@ydb.tech> | 2024-07-09 13:56:30 +0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-09 06:56:30 +0000 |
commit | 77cb18fe4bf5a70a9cd1ba57dcbb0c1abb327eab (patch) | |
tree | 39b720caa6e72be065818eaeb923d241cf6f961d | |
parent | 0fa3052f7c623d25d997e4844c4f1672be40efca (diff) | |
download | ydb-77cb18fe4bf5a70a9cd1ba57dcbb0c1abb327eab.tar.gz |
fix query errors processing (#6441)
-rw-r--r-- | ydb/core/viewer/json_query.h | 2 | ||||
-rw-r--r-- | ydb/core/viewer/viewer.cpp | 31 |
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; } |