yql_issue.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "yql_issue.h"
  2. #include <util/string/builder.h>
  3. namespace NYql {
  4. const char IssueMapResource[] = "yql_issue.txt";
  5. static_assert(DEFAULT_ERROR == TIssuesIds::DEFAULT_ERROR,
  6. "value of particular and common error mismatched for \"DEFAULT_ERROR\"");
  7. static_assert(UNEXPECTED_ERROR == TIssuesIds::UNEXPECTED,
  8. "value of particular and common error mismatched for \"UNEXPECTED_ERROR\"");
  9. void CheckFatalIssues(TIssues& issues) {
  10. bool isFatal = false;
  11. auto checkIssue = [&](const TIssue& issue) {
  12. if (issue.GetSeverity() == TSeverityIds::S_FATAL) {
  13. isFatal = true;
  14. }
  15. };
  16. std::function<void(const TIssuePtr& issue)> recursiveCheck = [&](const TIssuePtr& issue) {
  17. if (isFatal) {
  18. return;
  19. }
  20. checkIssue(*issue);
  21. for (const auto& subissue : issue->GetSubIssues()) {
  22. recursiveCheck(subissue);
  23. }
  24. };
  25. for (const auto& issue : issues) {
  26. if (isFatal) {
  27. break;
  28. }
  29. checkIssue(issue);
  30. // check subissues
  31. for (const auto& subissue : issue.GetSubIssues()) {
  32. recursiveCheck(subissue);
  33. }
  34. }
  35. if (isFatal) {
  36. TIssue result;
  37. result.SetMessage(
  38. TStringBuilder()
  39. << "An abnormal situation found, so consider opening a bug report to YQL (st/YQLSUPPORT),"
  40. << " because more detailed information is only available in server side logs and/or "
  41. << "coredumps.");
  42. result.SetCode(TIssuesIds::UNEXPECTED, TSeverityIds::S_FATAL);
  43. issues.AddIssue(result);
  44. }
  45. }
  46. }