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