Skip to content

Commit bb44959

Browse files
author
shfdis
committed
Add build info header to userver.
commit_hash:bd58b2fdcae41bd2a681e1bf39c7059ae71b6a96
1 parent 46795d7 commit bb44959

4 files changed

Lines changed: 85 additions & 0 deletions

File tree

.mapping.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6319,6 +6319,8 @@
63196319
"ydb/src/ydb/dist_lock/worker.cpp":"taxi/uservices/userver/ydb/src/ydb/dist_lock/worker.cpp",
63206320
"ydb/src/ydb/exceptions.cpp":"taxi/uservices/userver/ydb/src/ydb/exceptions.cpp",
63216321
"ydb/src/ydb/federated_topic.cpp":"taxi/uservices/userver/ydb/src/ydb/federated_topic.cpp",
6322+
"ydb/src/ydb/impl/build_info.cpp":"taxi/uservices/userver/ydb/src/ydb/impl/build_info.cpp",
6323+
"ydb/src/ydb/impl/build_info.hpp":"taxi/uservices/userver/ydb/src/ydb/impl/build_info.hpp",
63226324
"ydb/src/ydb/impl/config.cpp":"taxi/uservices/userver/ydb/src/ydb/impl/config.cpp",
63236325
"ydb/src/ydb/impl/config.hpp":"taxi/uservices/userver/ydb/src/ydb/impl/config.hpp",
63246326
"ydb/src/ydb/impl/dist_lock/semaphore_settings.hpp":"taxi/uservices/userver/ydb/src/ydb/impl/dist_lock/semaphore_settings.hpp",

ydb/src/ydb/impl/build_info.cpp

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#include "build_info.hpp"
2+
3+
#include <ydb-cpp-sdk/client/driver/driver.h>
4+
5+
#include <userver/utils/algo.hpp>
6+
#include <userver/utils/assert.hpp>
7+
#include <userver/utils/userver_info.hpp>
8+
9+
USERVER_NAMESPACE_BEGIN
10+
11+
namespace ydb::impl {
12+
13+
namespace {
14+
15+
constexpr std::string_view kBuildInfoName = "ydb-userver";
16+
17+
bool IsNonEmptyAlnum(std::string_view s) {
18+
return !s.empty() && std::ranges::all_of(s, [](char c) { return isdigit(c) || isalpha(c) && islower(c); });
19+
}
20+
21+
} // namespace
22+
23+
std::string FormatUserverVersionForBuildInfo(std::string_view version) {
24+
const auto dash = version.find('-');
25+
if (dash != std::string_view::npos) {
26+
version = version.substr(0, dash);
27+
}
28+
29+
const auto dot1 = version.find('.');
30+
UINVARIANT(dot1 != std::string_view::npos, "Invalid userver version");
31+
32+
const auto dot2 = version.find('.', dot1 + 1);
33+
std::string result;
34+
if (dot2 == std::string_view::npos) {
35+
result = utils::StrCat(version, ".0");
36+
} else {
37+
UINVARIANT(version.find('.', dot2 + 1) == std::string_view::npos, "Invalid userver version");
38+
result.assign(version);
39+
}
40+
41+
const auto result_dot1 = result.find('.');
42+
const auto result_dot2 = result.find('.', result_dot1 + 1);
43+
UINVARIANT(
44+
IsNonEmptyAlnum(std::string_view{result}.substr(0, result_dot1)
45+
) && IsNonEmptyAlnum(std::string_view{result}.substr(result_dot1 + 1, result_dot2 - result_dot1 - 1)) &&
46+
IsNonEmptyAlnum(std::string_view{result}.substr(result_dot2 + 1)),
47+
"Invalid userver version for build info"
48+
);
49+
50+
return result;
51+
}
52+
53+
void AppendUserverYdbBuildInfo(NYdb::TDriverConfig& config) {
54+
const auto version = FormatUserverVersionForBuildInfo(utils::GetUserverVersion());
55+
config.AppendBuildInfo(utils::StrCat(kBuildInfoName, "/", version));
56+
}
57+
58+
} // namespace ydb::impl
59+
60+
USERVER_NAMESPACE_END

ydb/src/ydb/impl/build_info.hpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#pragma once
2+
3+
#include <string>
4+
#include <string_view>
5+
6+
#include <ydb-cpp-sdk/client/driver/fwd.h>
7+
8+
USERVER_NAMESPACE_BEGIN
9+
10+
namespace ydb::impl {
11+
12+
/// Normalizes userver version to X.Y.Z format required by NYdb::TDriverConfig::AppendBuildInfo.
13+
std::string FormatUserverVersionForBuildInfo(std::string_view version);
14+
15+
/// Appends "ydb-userver/<version>" segment to the driver config build info header.
16+
void AppendUserverYdbBuildInfo(NYdb::TDriverConfig& config);
17+
18+
} // namespace ydb::impl
19+
20+
USERVER_NAMESPACE_END

ydb/src/ydb/impl/driver.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <userver/utils/algo.hpp>
99
#include <userver/utils/text_light.hpp>
1010

11+
#include <ydb/impl/build_info.hpp>
1112
#include <ydb/impl/config.hpp>
1213
#include <ydb/impl/native_metrics.hpp>
1314

@@ -70,6 +71,8 @@ Driver::Driver(std::string dbname, impl::DriverSettings settings)
7071
driver_config.SetGRpcKeepAlivePermitWithoutCalls(*settings.grpc_keepalive_permit_without_calls);
7172
}
7273

74+
AppendUserverYdbBuildInfo(driver_config);
75+
7376
driver_ = std::make_unique<NYdb::TDriver>(driver_config);
7477
NSolomonStatExtension::AddMetricRegistry(*driver_, native_metrics_.get());
7578
}

0 commit comments

Comments
 (0)