Skip to content

Refactor yql issue lib #272

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jul 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions examples/basic_example/basic_example.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#include "basic_example.h"

#include <ydb-cpp-sdk/util/string/cast.h>

#include <src/util/folder/pathsplit.h>

#include <format>
Expand Down
2 changes: 2 additions & 0 deletions examples/pagination/pagination.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#include "pagination.h"

#include <ydb-cpp-sdk/util/string/cast.h>

#include <src/util/folder/pathsplit.h>

using namespace NYdb;
Expand Down
4 changes: 3 additions & 1 deletion examples/ttl/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

#include <ydb-cpp-sdk/client/table/table.h>

#include <src/util/folder/pathsplit.h>
#include <ydb-cpp-sdk/util/generic/yexception.h>
#include <ydb-cpp-sdk/util/string/cast.h>

#include <src/util/folder/pathsplit.h>

namespace NExample {

Expand Down
4 changes: 4 additions & 0 deletions include/ydb-cpp-sdk/library/yql/public/issue/yql_issue.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@

#include "yql_issue_id.h"

#include <ydb-cpp-sdk/util/generic/ptr.h>
#include <ydb-cpp-sdk/util/generic/yexception.h>
#include <ydb-cpp-sdk/util/system/types.h>
#include <ydb-cpp-sdk/util/str_stl.h>

#include <google/protobuf/message.h>

#include <optional>
#include <vector>
#include <sstream>
#include <string>
Expand Down
119 changes: 2 additions & 117 deletions include/ydb-cpp-sdk/library/yql/public/issue/yql_issue_id.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,128 +2,13 @@

#include <ydb-cpp-sdk/src/library/yql/public/issue/protos/issue_severity.pb.h>

#include <ydb-cpp-sdk/library/resource/resource.h>
#include <ydb-cpp-sdk/library/string_utils/misc/misc.h>

#include <google/protobuf/descriptor.h>
#include <google/protobuf/repeated_field.h>
#include <google/protobuf/text_format.h>
#include <google/protobuf/message.h>

#include <ydb-cpp-sdk/util/generic/singleton.h>
#include <ydb-cpp-sdk/util/generic/yexception.h>
#include <ydb-cpp-sdk/util/string/subst.h>

#ifdef _win_
#ifdef GetMessage
#undef GetMessage
#endif
#endif

namespace NYql {

using TIssueCode = ui32;
using TIssueCode = uint32_t;
using ESeverity = NYql::TSeverityIds::ESeverityId;
const TIssueCode DEFAULT_ERROR = 0;
const TIssueCode UNEXPECTED_ERROR = 1;

inline std::string SeverityToString(ESeverity severity)
{
auto ret = NYql::TSeverityIds::ESeverityId_Name(severity);
return ret.empty() ? "Unknown" : NUtils::ToTitle(ret.substr(2)); //remove prefix "S_"
}

template <typename T>
inline std::string IssueCodeToString(TIssueCode id) {
auto ret = T::EIssueCode_Name(static_cast<typename T::EIssueCode>(id));
if (!ret.empty()) {
SubstGlobal(ret, '_', ' ');
return to_title(ret);
} else {
return "Unknown";
}
}

template<typename TProto, const char* ResourceName>
class TIssueId {
TProto ProtoIssues_;
std::unordered_map<TIssueCode, NYql::TSeverityIds::ESeverityId> IssuesMap_;
std::unordered_map<TIssueCode, std::string> IssuesFormatMap_;

const google::protobuf::Descriptor* GetProtoDescriptor() const {
auto ret = ProtoIssues_.GetDescriptor();
Y_ENSURE(ret != nullptr, "Bad proto file");
return ret;
}

bool CheckSeverityNameFormat(const std::string& name) const {
if (name.size() > 2 && name.substr(0,2) == "S_") {
return true;
}
return false;
}

public:
ESeverity GetSeverity(TIssueCode id) const {
auto it = IssuesMap_.find(id);
Y_ENSURE(it != IssuesMap_.end(), "Unknown issue id: "
<< id << "(" << IssueCodeToString<TProto>(id) << ")");
return it->second;
}

std::string GetMessage(TIssueCode id) const {
auto it = IssuesFormatMap_.find(id);
Y_ENSURE(it != IssuesFormatMap_.end(), "Unknown issue id: "
<< id << "(" << IssueCodeToString<TProto>(id) << ")");
return it->second;
}

TIssueId() {
auto configData = NResource::Find(std::string_view(ResourceName));
if (!::google::protobuf::TextFormat::ParseFromString(configData, &ProtoIssues_)) {
Y_ENSURE(false, "Bad format of protobuf data file, resource: " << ResourceName);
}

auto sDesc = TSeverityIds::ESeverityId_descriptor();
for (int i = 0; i < sDesc->value_count(); i++) {
const auto& name = sDesc->value(i)->name();
Y_ENSURE(CheckSeverityNameFormat(name),
"Wrong severity name: " << name << ". Severity must starts with \"S_\" prefix");
}

for (const auto& x : ProtoIssues_.ids()) {
auto rv = IssuesMap_.insert(std::make_pair(x.code(), x.severity()));
Y_ENSURE(rv.second, "Duplicate issue code found, code: "
<< static_cast<int>(x.code())
<< "(" << IssueCodeToString<TProto>(x.code()) <<")");
}

// Check all IssueCodes have mapping to severity
auto eDesc = TProto::EIssueCode_descriptor();
for (int i = 0; i < eDesc->value_count(); i++) {
auto it = IssuesMap_.find(eDesc->value(i)->number());
Y_ENSURE(it != IssuesMap_.end(), "IssueCode: "
<< eDesc->value(i)->name()
<< " is not found in protobuf data file");
}

for (const auto& x : ProtoIssues_.ids()) {
auto rv = IssuesFormatMap_.insert(std::make_pair(x.code(), x.format()));
Y_ENSURE(rv.second, "Duplicate issue code found, code: "
<< static_cast<int>(x.code())
<< "(" << IssueCodeToString<TProto>(x.code()) <<")");
}
}
};

template<typename TProto, const char* ResourceName>
inline ESeverity GetSeverity(TIssueCode id) {
return Singleton<TIssueId<TProto, ResourceName>>()->GetSeverity(id);
}

template<typename TProto, const char* ResourceName>
inline std::string GetMessage(TIssueCode id) {
return Singleton<TIssueId<TProto, ResourceName>>()->GetMessage(id);
}
std::string SeverityToString(ESeverity severity);

}
7 changes: 4 additions & 3 deletions src/client/impl/ydb_internal/plain_status/status.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@

#include <ydb-cpp-sdk/client/types/status_codes.h>

#include <src/api/protos/ydb_operation.pb.h>

#include <ydb-cpp-sdk/library/grpc/client/grpc_client_low.h>
#include <ydb-cpp-sdk/library/yql/public/issue/yql_issue.h>

#include <ydb-cpp-sdk/library/grpc/client/grpc_client_low.h>
#include <ydb-cpp-sdk/util/string/subst.h>

#include <src/api/protos/ydb_operation.pb.h>

namespace NYdb {

Expand Down
4 changes: 4 additions & 0 deletions src/client/impl/ydb_internal/retry/retry.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
#include "retry.h"

#include <ydb-cpp-sdk/util/random/random.h>
#include <ydb-cpp-sdk/client/retry/retry.h>

#include <ydb-cpp-sdk/util/string/subst.h>

#include <src/client/common_client/impl/iface.h>

#include <cmath>
Expand Down
2 changes: 1 addition & 1 deletion src/client/impl/ydb_internal/retry/retry.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@

#include <ydb-cpp-sdk/library/threading/future/core/fwd.h>
#include <ydb-cpp-sdk/util/datetime/base.h>
#include <src/util/datetime/cputimer.h>
#include <ydb-cpp-sdk/util/generic/ptr.h>
#include <ydb-cpp-sdk/util/system/types.h>
#include <ydb-cpp-sdk/util/string/cast.h>

#include <functional>
#include <memory>
Expand Down
5 changes: 4 additions & 1 deletion src/client/types/operation/operation.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
#include <ydb-cpp-sdk/client/types/operation/operation.h>

#include <src/api/protos/ydb_operation.pb.h>
#include <ydb-cpp-sdk/client/types/status/status.h>

#include <ydb-cpp-sdk/util/stream/str.h>

#include <src/api/protos/ydb_operation.pb.h>

namespace NYdb {


Expand Down
2 changes: 2 additions & 0 deletions src/client/types/status/status.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

#include <ydb-cpp-sdk/client/types/exceptions/exceptions.h>

#include <ydb-cpp-sdk/util/string/cast.h>

namespace NYdb {

class TStatus::TImpl {
Expand Down
3 changes: 2 additions & 1 deletion src/library/yql/public/issue/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ target_link_libraries(yql-public-issue PUBLIC
)

target_sources(yql-public-issue PRIVATE
yql_issue.cpp
yql_issue_id.cpp
yql_issue_message.cpp
yql_issue.cpp
)

_ydb_sdk_install_targets(TARGETS yql-public-issue)
12 changes: 12 additions & 0 deletions src/library/yql/public/issue/yql_issue_id.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#include <ydb-cpp-sdk/library/yql/public/issue/yql_issue_id.h>

#include <ydb-cpp-sdk/library/string_utils/helpers/helpers.h>

namespace NYql {

std::string SeverityToString(ESeverity severity) {
auto ret = NYql::TSeverityIds::ESeverityId_Name(severity);
return ret.empty() ? "Unknown" : NUtils::ToTitle(ret.substr(2)); //remove prefix "S_"
}

};
2 changes: 1 addition & 1 deletion src/library/yql/public/issue/yql_issue_message.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include <ydb-cpp-sdk/util/stream/output.h>
#include <src/util/string/join.h>

#include <tuple>
#include <google/protobuf/text_format.h>

namespace NYql {

Expand Down
Loading