Skip to content
Draft
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: 1 addition & 1 deletion cmake/SetupYdbCppSDK.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ endif()

cpmaddpackage(
NAME ydb-cpp-sdk
GIT_TAG v3.5.1
GIT_TAG v3.12.0
GITHUB_REPOSITORY ydb-platform/ydb-cpp-sdk
GIT_SHALLOW TRUE
OPTIONS "Brotli_VERSION ${Brotli_VERSION}" "RAPIDJSON_INCLUDE_DIRS ${RAPIDJSON_INCLUDE_DIRS}"
Expand Down
1 change: 1 addition & 0 deletions ydb/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ set(YDB_LIBRARIES
YDB-CPP-SDK::Coordination
YDB-CPP-SDK::Driver
YDB-CPP-SDK::Operation
YDB-CPP-SDK::Query
YDB-CPP-SDK::Result
YDB-CPP-SDK::Scheme
YDB-CPP-SDK::SolomonStats
Expand Down
35 changes: 17 additions & 18 deletions ydb/functional_tests/basic/tests-metrics/static/metrics_values.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ ydb.by-query.success: ydb_database=sampledb, ydb_query=UNNAMED RATE 1
ydb.by-query.success: ydb_database=sampledb, ydb_query=upsert-row RATE 3
ydb.by-query.timings: ydb_database=sampledb, ydb_query=Begin HIST_RATE [5]=3,[10]=0,[20]=0,[35]=0,[60]=0,[100]=0,[173]=0,[300]=0,[520]=0,[1000]=0,[3200]=0,[10000]=0,[32000]=0,[100000]=0,[inf]=0
ydb.by-query.timings: ydb_database=sampledb, ydb_query=Commit HIST_RATE [5]=3,[10]=0,[20]=0,[35]=0,[60]=0,[100]=0,[173]=0,[300]=0,[520]=0,[1000]=0,[3200]=0,[10000]=0,[32000]=0,[100000]=0,[inf]=0
ydb.by-query.timings: ydb_database=sampledb, ydb_query=UNNAMED HIST_RATE [5]=0,[10]=0,[20]=0,[35]=1,[60]=0,[100]=0,[173]=0,[300]=0,[520]=0,[1000]=0,[3200]=0,[10000]=0,[32000]=0,[100000]=0,[inf]=0
ydb.by-query.timings: ydb_database=sampledb, ydb_query=UNNAMED HIST_RATE [5]=0,[10]=0,[20]=0,[35]=0,[60]=0,[100]=1,[173]=0,[300]=0,[520]=0,[1000]=0,[3200]=0,[10000]=0,[32000]=0,[100000]=0,[inf]=0
ydb.by-query.timings: ydb_database=sampledb, ydb_query=upsert-row HIST_RATE [5]=3,[10]=0,[20]=0,[35]=0,[60]=0,[100]=0,[173]=0,[300]=0,[520]=0,[1000]=0,[3200]=0,[10000]=0,[32000]=0,[100000]=0,[inf]=0
ydb.by-query.total: ydb_database=sampledb, ydb_query=Begin RATE 3
ydb.by-query.total: ydb_database=sampledb, ydb_query=Commit RATE 3
Expand All @@ -45,42 +45,41 @@ ydb.native.Endpoints/Total: database=/local, ydb_database=sampledb GAUGE 0
ydb.native.Grpc/InFlight: database=/local, ydb_database=sampledb GAUGE 0
ydb.native.Grpc/InFlightByYdbHost: YdbHost=(REDACTED), database=/local, ydb_database=sampledb GAUGE 0
ydb.native.Grpc/InFlightByYdbHost: YdbHost=(REDACTED), database=/local, ydb_database=sampledb GAUGE 0
ydb.native.Request/ClientQueryCacheMiss: database=/local, ydb_client=Table, ydb_database=sampledb RATE 4
ydb.native.Request/ClientQueryCacheMiss: database=/local, ydb_client=Table, ydb_database=sampledb RATE 0
ydb.native.Request/FailedDiscoveryQueueOverflow: database=/local, ydb_database=sampledb RATE 0
ydb.native.Request/FailedNoEndpoint: database=/local, ydb_database=sampledb RATE 0
ydb.native.Request/FailedTransportError: database=/local, ydb_database=sampledb RATE 0
ydb.native.Request/Latency: database=/local, ydb_database=sampledb HIST_RATE [1]=0,[2]=0,[4]=4,[8]=4,[16]=2,[32]=1,[64]=1,[128]=0,[256]=0,[512]=0,[1024]=0,[2048]=0,[4096]=0,[8192]=0,[16384]=0,[32768]=0,[65536]=0,[131072]=0,[262144]=0,[inf]=0
ydb.native.Request/ParamsSize: database=/local, ydb_client=Query, ydb_database=sampledb HIST_RATE [32]=0,[64]=0,[128]=0,[256]=0,[512]=0,[1024]=0,[2048]=0,[4096]=0,[8192]=0,[inf]=0
ydb.native.Request/ParamsSize: database=/local, ydb_client=Table, ydb_database=sampledb HIST_RATE [32]=3,[64]=0,[128]=0,[256]=0,[512]=0,[1024]=0,[2048]=0,[4096]=0,[8192]=0,[inf]=0
ydb.native.Request/QuerySize: database=/local, ydb_client=Query, ydb_database=sampledb HIST_RATE [32]=0,[64]=0,[128]=0,[256]=0,[512]=0,[1024]=0,[2048]=0,[4096]=0,[8192]=0,[16384]=0,[32768]=0,[65536]=0,[131072]=0,[262144]=0,[524288]=0,[1048576]=0,[2097152]=0,[4194304]=0,[8388608]=0,[inf]=0
ydb.native.Request/QuerySize: database=/local, ydb_client=Table, ydb_database=sampledb HIST_RATE [32]=1,[64]=0,[128]=0,[256]=0,[512]=3,[1024]=0,[2048]=0,[4096]=0,[8192]=0,[16384]=0,[32768]=0,[65536]=0,[131072]=0,[262144]=0,[524288]=0,[1048576]=0,[2097152]=0,[4194304]=0,[8388608]=0,[inf]=0
ydb.native.Request/ResultSize: database=/local, ydb_database=sampledb HIST_RATE [32]=1,[64]=0,[128]=6,[256]=2,[512]=3,[1024]=0,[2048]=0,[4096]=0,[8192]=0,[16384]=0,[32768]=0,[65536]=0,[131072]=0,[262144]=0,[524288]=0,[1048576]=0,[2097152]=0,[4194304]=0,[8388608]=0,[inf]=0
ydb.native.Request/FailedTransportError: database=/local, ydb_database=sampledb RATE 1
ydb.native.Request/Latency: database=/local, ydb_database=sampledb HIST_RATE [1]=0,[2]=0,[4]=0,[8]=0,[16]=2,[32]=5,[64]=2,[128]=0,[256]=0,[512]=0,[1024]=0,[2048]=0,[4096]=0,[8192]=0,[16384]=0,[32768]=0,[65536]=0,[131072]=0,[262144]=0,[inf]=0
ydb.native.Request/ParamsSize: database=/local, ydb_client=Query, ydb_database=sampledb HIST_RATE [32]=1,[64]=0,[128]=3,[256]=0,[512]=0,[1024]=0,[2048]=0,[4096]=0,[8192]=0,[inf]=0
ydb.native.Request/ParamsSize: database=/local, ydb_client=Table, ydb_database=sampledb HIST_RATE [32]=0,[64]=0,[128]=0,[256]=0,[512]=0,[1024]=0,[2048]=0,[4096]=0,[8192]=0,[inf]=0
ydb.native.Request/QuerySize: database=/local, ydb_client=Query, ydb_database=sampledb HIST_RATE [32]=1,[64]=0,[128]=0,[256]=0,[512]=3,[1024]=0,[2048]=0,[4096]=0,[8192]=0,[16384]=0,[32768]=0,[65536]=0,[131072]=0,[262144]=0,[524288]=0,[1048576]=0,[2097152]=0,[4194304]=0,[8388608]=0,[inf]=0
ydb.native.Request/QuerySize: database=/local, ydb_client=Table, ydb_database=sampledb HIST_RATE [32]=0,[64]=0,[128]=0,[256]=0,[512]=0,[1024]=0,[2048]=0,[4096]=0,[8192]=0,[16384]=0,[32768]=0,[65536]=0,[131072]=0,[262144]=0,[524288]=0,[1048576]=0,[2097152]=0,[4194304]=0,[8388608]=0,[inf]=0
ydb.native.Request/ResultSize: database=/local, ydb_database=sampledb HIST_RATE [32]=5,[64]=3,[128]=1,[256]=0,[512]=0,[1024]=0,[2048]=0,[4096]=0,[8192]=0,[16384]=0,[32768]=0,[65536]=0,[131072]=0,[262144]=0,[524288]=0,[1048576]=0,[2097152]=0,[4194304]=0,[8388608]=0,[inf]=0
ydb.native.SessionBalancer/RequestsMigrated: database=/local, ydb_client=Table, ydb_database=sampledb RATE 0
ydb.native.SessionBalancer/SessionsRemoved: database=/local, ydb_client=Table, ydb_database=sampledb RATE 0
ydb.native.SessionBalancer/Variation: database=/local, ydb_database=sampledb GAUGE 0
ydb.native.Sessions/InPool: database=/local, ydb_client=Query, ydb_database=sampledb GAUGE 0
ydb.native.Sessions/InPool: database=/local, ydb_client=Table, ydb_database=sampledb GAUGE 1
ydb.native.Sessions/InPool: database=/local, ydb_client=Query, ydb_database=sampledb GAUGE 1
ydb.native.Sessions/InPool: database=/local, ydb_client=Table, ydb_database=sampledb GAUGE 0
ydb.native.Sessions/InUse: database=/local, ydb_client=Query, ydb_database=sampledb GAUGE 0
ydb.native.Sessions/InUse: database=/local, ydb_client=Table, ydb_database=sampledb GAUGE 0
ydb.native.Sessions/SessionsLimitExceeded: database=/local, ydb_client=Query, ydb_database=sampledb RATE 0
ydb.native.Sessions/SessionsLimitExceeded: database=/local, ydb_client=Table, ydb_database=sampledb RATE 0
ydb.native.Sessions/WaitForReturn: database=/local, ydb_client=Query, ydb_database=sampledb GAUGE 0
ydb.native.Sessions/WaitForReturn: database=/local, ydb_client=Table, ydb_database=sampledb GAUGE 0
ydb.native.SessionsByYdbHost: YdbHost=(REDACTED), database=/local, ydb_database=sampledb GAUGE 1
ydb.native.TransportErrorsByYdbHost: YdbHost=(REDACTED), database=/local, ydb_database=sampledb RATE 0
ydb.retry_budget.account_fail: ydb_database=sampledb RATE 0
ydb.retry_budget.account_ok: ydb_database=sampledb RATE 14
ydb.retry_budget.approx_token_count: ydb_database=sampledb GAUGE 100
ydb.retry_budget.max_token_count: ydb_database=sampledb GAUGE 100
ydb.native.TransportErrorsByYdbHost: YdbHost=(REDACTED), database=/local, ydb_database=sampledb RATE 1
ydb.pool.active-sessions: ydb_database=sampledb GAUGE 0
ydb.pool.current-size: ydb_database=sampledb GAUGE 1
ydb.pool.max-size: ydb_database=sampledb GAUGE 10
ydb.queries-total.cancelled: ydb_database=sampledb RATE 0
ydb.queries-total.error: ydb_database=sampledb RATE 0
ydb.queries-total.success: ydb_database=sampledb RATE 10
ydb.queries-total.timings: ydb_database=sampledb HIST_RATE [1]=9,[2]=0,[3]=0,[5]=0,[7]=0,[10]=0,[13]=0,[16]=0,[20]=0,[24]=0,[29]=1,[35]=0,[42]=0,[50]=0,[60]=0,[71]=0,[84]=0,[100]=0,[120]=0,[144]=0,[173]=0,[208]=0,[250]=0,[300]=0,[360]=0,[430]=0,[520]=0,[620]=0,[730]=0,[850]=0,[1000]=0,[1800]=0,[3200]=0,[5600]=0,[10000]=0,[18000]=0,[32000]=0,[56000]=0,[100000]=0,[inf]=0
ydb.queries-total.timings: ydb_database=sampledb HIST_RATE [1]=9,[2]=0,[3]=0,[5]=0,[7]=0,[10]=0,[13]=0,[16]=0,[20]=0,[24]=0,[29]=0,[35]=0,[42]=0,[50]=0,[60]=0,[71]=0,[84]=1,[100]=0,[120]=0,[144]=0,[173]=0,[208]=0,[250]=0,[300]=0,[360]=0,[430]=0,[520]=0,[620]=0,[730]=0,[850]=0,[1000]=0,[1800]=0,[3200]=0,[5600]=0,[10000]=0,[18000]=0,[32000]=0,[56000]=0,[100000]=0,[inf]=0
ydb.queries-total.total: ydb_database=sampledb RATE 10
ydb.queries-total.transport-error: ydb_database=sampledb RATE 0
ydb.retry_budget.account_fail: ydb_database=sampledb RATE 0
ydb.retry_budget.account_ok: ydb_database=sampledb RATE 10
ydb.retry_budget.approx_token_count: ydb_database=sampledb GAUGE 100
ydb.retry_budget.max_token_count: ydb_database=sampledb GAUGE 100
ydb.transactions-total.cancelled: ydb_database=sampledb RATE 0
ydb.transactions-total.error: ydb_database=sampledb RATE 0
ydb.transactions-total.success: ydb_database=sampledb RATE 3
Expand Down
7 changes: 2 additions & 5 deletions ydb/include/userver/ydb/builder.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ class Transaction;

class PreparedArgsBuilder final {
public:
PreparedArgsBuilder() = default;

PreparedArgsBuilder(PreparedArgsBuilder&&) noexcept = default;
PreparedArgsBuilder& operator=(PreparedArgsBuilder&&) = delete;

Expand All @@ -27,11 +29,6 @@ class PreparedArgsBuilder final {
void Add(const std::string& name, T&& value);

/// @cond
// For internal use only.
explicit PreparedArgsBuilder(NYdb::TParamsBuilder&& builder)
: builder_(std::move(builder))
{}

// For internal use only.
template <typename... NamesValues>
void AddParams(NamesValues&&... names_values);
Expand Down
2 changes: 0 additions & 2 deletions ydb/include/userver/ydb/table.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -235,8 +235,6 @@ class TableClient final {

void Select1();

NYdb::NTable::TExecDataQuerySettings ToExecQuerySettings(QuerySettings query_settings) const;

template <typename... Args>
PreparedArgsBuilder MakeBuilder(Args&&... args);

Expand Down
6 changes: 4 additions & 2 deletions ydb/include/userver/ydb/transaction.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

#include <string>

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

#include <userver/tracing/span.hpp>
#include <userver/utils/trx_tracker.hpp>

Expand Down Expand Up @@ -69,7 +71,7 @@ class Transaction final {
// For internal use only.
Transaction(
TableClient& table_client,
NYdb::NTable::TTransaction ydb_tx,
NYdb::NQuery::TTransaction ydb_tx,
std::string name,
OperationSettings&& rollback_settings
) noexcept;
Expand All @@ -85,7 +87,7 @@ class Transaction final {
std::string name_;
impl::StatsScope stats_scope_;
tracing::Span span_;
NYdb::NTable::TTransaction ydb_tx_;
NYdb::NQuery::TTransaction ydb_tx_;
OperationSettings rollback_settings_;
bool is_active_{true};
utils::trx_tracker::TransactionLock trx_lock_;
Expand Down
25 changes: 25 additions & 0 deletions ydb/src/ydb/impl/operation_settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,38 @@ std::chrono::milliseconds DeadlineToTimeout(engine::Deadline deadline) {
return timeout;
}

NYdb::NQuery::EStatsMode ConvertStatsMode(NYdb::NTable::ECollectQueryStatsMode collect_query_stats_mode) {
switch (collect_query_stats_mode) {
case NYdb::NTable::ECollectQueryStatsMode::None:
return NYdb::NQuery::EStatsMode::None;
case NYdb::NTable::ECollectQueryStatsMode::Basic:
return NYdb::NQuery::EStatsMode::Basic;
case NYdb::NTable::ECollectQueryStatsMode::Full:
return NYdb::NQuery::EStatsMode::Full;
case NYdb::NTable::ECollectQueryStatsMode::Profile:
return NYdb::NQuery::EStatsMode::Profile;
}
}

} // namespace

std::chrono::milliseconds GetBoundTimeout(std::chrono::milliseconds timeout, engine::Deadline deadline) {
const auto max_timeout = impl::DeadlineToTimeout(deadline);
return (std::chrono::milliseconds::zero() < timeout) ? std::min(timeout, max_timeout) : max_timeout;
}

NYdb::NQuery::TExecuteQuerySettings ToExecuteQuerySettings(const QuerySettings& query_settings) {
NYdb::NQuery::TExecuteQuerySettings execute_query_settings;

// Query Client doesn't have KeepInQueryCache, it caches automatically

if (query_settings.collect_query_stats.has_value()) {
execute_query_settings.StatsMode(ConvertStatsMode(*query_settings.collect_query_stats));
}

return execute_query_settings;
}

} // namespace ydb::impl

USERVER_NAMESPACE_END
4 changes: 4 additions & 0 deletions ydb/src/ydb/impl/operation_settings.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

#include <chrono>

#include <ydb-cpp-sdk/client/query/query.h>
#include <ydb-cpp-sdk/client/retry/retry.h>
#include <ydb-cpp-sdk/client/table/table.h>
#include <ydb-cpp-sdk/client/types/request_settings.h>

#include <userver/engine/deadline.hpp>
Expand All @@ -16,6 +18,8 @@ namespace ydb::impl {

std::chrono::milliseconds GetBoundTimeout(std::chrono::milliseconds timeout, engine::Deadline deadline);

NYdb::NQuery::TExecuteQuerySettings ToExecuteQuerySettings(const QuerySettings& query_settings);

template <typename T>
void ApplyToRequestSettings(
NYdb::TRequestSettings<T>& result,
Expand Down
60 changes: 18 additions & 42 deletions ydb/src/ydb/table.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,33 +16,17 @@
USERVER_NAMESPACE_BEGIN

namespace ydb {
namespace {

NYdb::NTable::TTxSettings PrepareTxSettings(const OperationSettings& settings) {
switch (settings.tx_mode.value()) {
case TransactionMode::kSerializableRW: {
return NYdb::NTable::TTxSettings::SerializableRW();
}
case TransactionMode::kOnlineRO: {
return NYdb::NTable::TTxSettings::OnlineRO();
}
case TransactionMode::kStaleRO: {
return NYdb::NTable::TTxSettings::StaleRO();
}
}
}
namespace {

NYdb::NQuery::TTxSettings PrepareQueryTxSettings(const OperationSettings& settings) {
switch (settings.tx_mode.value()) {
case TransactionMode::kSerializableRW: {
NYdb::NQuery::TTxSettings MakeTxSettings(TransactionMode tx_mode) {
switch (tx_mode) {
case TransactionMode::kSerializableRW:
return NYdb::NQuery::TTxSettings::SerializableRW();
}
case TransactionMode::kOnlineRO: {
case TransactionMode::kOnlineRO:
return NYdb::NQuery::TTxSettings::OnlineRO();
}
case TransactionMode::kStaleRO: {
case TransactionMode::kStaleRO:
return NYdb::NQuery::TTxSettings::StaleRO();
}
}
}

Expand Down Expand Up @@ -323,14 +307,14 @@ Transaction TableClient::Begin(utils::StringLiteral transaction_name, OperationS
Transaction TableClient::Begin(DynamicTransactionName transaction_name, OperationSettings settings) {
const Query query{"", Query::Name{"Begin"}};
impl::RequestContext context{*this, query, std::move(settings)};
auto tx_settings = PrepareTxSettings(context.settings);
auto tx_settings = MakeTxSettings(context.settings.tx_mode.value());

auto future = impl::RetryOperation(
auto future = impl::RetryQuery(
context,
[tx_settings = std::move(tx_settings),
settings = context.settings,
deadline = context.deadline](NYdb::NTable::TSession session) {
const auto exec_settings = impl::PrepareRequestSettings<NYdb::NTable::TBeginTxSettings>(settings, deadline);
deadline = context.deadline](NYdb::NQuery::TSession session) {
const auto exec_settings = impl::PrepareRequestSettings<NYdb::NQuery::TBeginTxSettings>(settings, deadline);
return session.BeginTransaction(tx_settings, exec_settings);
}
);
Expand Down Expand Up @@ -372,17 +356,17 @@ ExecuteResponse TableClient::ExecuteDataQuery(
) {
impl::RequestContext context{*this, query, std::move(settings)};

auto future = impl::RetryOperation(
auto future = impl::RetryQuery(
context,
[query,
params = std::move(builder).Build(),
exec_settings = ToExecQuerySettings(query_settings),
exec_settings = impl::ToExecuteQuerySettings(query_settings),
settings = context.settings,
deadline = context.deadline](NYdb::NTable::TSession session) mutable {
deadline = context.deadline](NYdb::NQuery::TSession session) mutable {
impl::ApplyToRequestSettings(exec_settings, settings, deadline);
const auto tx_settings = PrepareTxSettings(settings);
const auto tx = NYdb::NTable::TTxControl::BeginTx(tx_settings).CommitTx();
return session.ExecuteDataQuery(impl::ToString(query.GetStatementView()), tx, params, exec_settings);
const auto tx_settings = MakeTxSettings(settings.tx_mode.value());
const auto tx = NYdb::NQuery::TTxControl::BeginTx(tx_settings).CommitTx();
return session.ExecuteQuery(impl::ToString(query.GetStatementView()), tx, params, exec_settings);
}
);

Expand Down Expand Up @@ -420,7 +404,7 @@ ExecuteResponse TableClient::ExecuteQuery(
settings = context.settings,
deadline = context.deadline](NYdb::NQuery::TSession session) mutable {
impl::ApplyToRequestSettings(exec_settings, settings, deadline);
const auto tx_settings = PrepareQueryTxSettings(settings);
const auto tx_settings = MakeTxSettings(settings.tx_mode.value());
const auto tx = NYdb::NQuery::TTxControl::BeginTx(tx_settings).CommitTx();
return session.ExecuteQuery(impl::ToString(query.GetStatementView()), tx, params, exec_settings);
}
Expand All @@ -446,16 +430,8 @@ void DumpMetric(utils::statistics::Writer& writer, const TableClient& table_clie
);
}

PreparedArgsBuilder TableClient::GetBuilder() const { return PreparedArgsBuilder(table_client_->GetParamsBuilder()); }
PreparedArgsBuilder TableClient::GetBuilder() const { return PreparedArgsBuilder{}; }

NYdb::NTable::TExecDataQuerySettings TableClient::ToExecQuerySettings(QuerySettings query_settings) const {
NYdb::NTable::TExecDataQuerySettings exec_settings;
exec_settings.KeepInQueryCache(query_settings.keep_in_query_cache.value_or(keep_in_query_cache_));
if (query_settings.collect_query_stats) {
exec_settings.CollectQueryStats(*query_settings.collect_query_stats);
}
return exec_settings;
}
} // namespace ydb

USERVER_NAMESPACE_END
Loading
Loading