From 57b0b97f77a3ebc23ad542565e6e8a317ca4c309 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 20 Nov 2025 17:17:45 +0000 Subject: [PATCH 01/10] Migrate YDB transactions from Table Client to Query Client API - Updated Transaction class to use NYdb::NQuery::TSession and transaction ID - Changed Transaction::Execute() to use Query Client's ExecuteQuery - Modified Transaction::Commit() and Rollback() to use Query Client APIs - Updated TableClient::Begin() to use RetryQuery and Query Client BeginTransaction - Added YDB-CPP-SDK::Query library to CMakeLists.txt - Added conversion logic for QuerySettings between Table and Query Client APIs Co-authored-by: asmyasnikov <14202262+asmyasnikov@users.noreply.github.com> --- ydb/CMakeLists.txt | 1 + ydb/include/userver/ydb/transaction.hpp | 6 +++-- ydb/src/ydb/impl/operation_settings.cpp | 15 +++++++++++++ ydb/src/ydb/impl/operation_settings.hpp | 4 ++++ ydb/src/ydb/table.cpp | 29 ++++++++++++++++--------- ydb/src/ydb/transaction.cpp | 19 +++++++++++----- 6 files changed, 56 insertions(+), 18 deletions(-) diff --git a/ydb/CMakeLists.txt b/ydb/CMakeLists.txt index 818f7e488ce6..70dc3748c794 100644 --- a/ydb/CMakeLists.txt +++ b/ydb/CMakeLists.txt @@ -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 diff --git a/ydb/include/userver/ydb/transaction.hpp b/ydb/include/userver/ydb/transaction.hpp index bdf103f924bc..f35b23c96c8e 100644 --- a/ydb/include/userver/ydb/transaction.hpp +++ b/ydb/include/userver/ydb/transaction.hpp @@ -2,6 +2,8 @@ #include +#include + #include #include @@ -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; @@ -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_; diff --git a/ydb/src/ydb/impl/operation_settings.cpp b/ydb/src/ydb/impl/operation_settings.cpp index 5a2214910731..fc75a4795ef6 100644 --- a/ydb/src/ydb/impl/operation_settings.cpp +++ b/ydb/src/ydb/impl/operation_settings.cpp @@ -26,6 +26,21 @@ std::chrono::milliseconds GetBoundTimeout(std::chrono::milliseconds timeout, eng return (std::chrono::milliseconds::zero() < timeout) ? std::min(timeout, max_timeout) : max_timeout; } +NYdb::NQuery::EStatsMode ConvertStatsMode(NYdb::NTable::ECollectQueryStatsMode collect_query_stats) { + // Convert Table Client stats mode to Query Client stats mode + switch (collect_query_stats) { + 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; + } + return NYdb::NQuery::EStatsMode::None; // Safe fallback for invalid enum values +} + } // namespace ydb::impl USERVER_NAMESPACE_END diff --git a/ydb/src/ydb/impl/operation_settings.hpp b/ydb/src/ydb/impl/operation_settings.hpp index d3cd625cb627..d115d919bad0 100644 --- a/ydb/src/ydb/impl/operation_settings.hpp +++ b/ydb/src/ydb/impl/operation_settings.hpp @@ -2,7 +2,9 @@ #include +#include #include +#include #include #include @@ -14,6 +16,8 @@ USERVER_NAMESPACE_BEGIN namespace ydb::impl { +NYdb::NQuery::EStatsMode ConvertStatsMode(NYdb::NTable::ECollectQueryStatsMode collect_query_stats); + std::chrono::milliseconds GetBoundTimeout(std::chrono::milliseconds timeout, engine::Deadline deadline); template diff --git a/ydb/src/ydb/table.cpp b/ydb/src/ydb/table.cpp index 6c687868c7bd..b43ed383c82d 100644 --- a/ydb/src/ydb/table.cpp +++ b/ydb/src/ydb/table.cpp @@ -323,14 +323,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 = PrepareQueryTxSettings(context.settings); - 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(settings, deadline); + deadline = context.deadline](NYdb::NQuery::TSession session) { + const auto exec_settings = impl::PrepareRequestSettings(settings, deadline); return session.BeginTransaction(tx_settings, exec_settings); } ); @@ -372,17 +372,26 @@ ExecuteResponse TableClient::ExecuteDataQuery( ) { impl::RequestContext context{*this, query, std::move(settings)}; - auto future = impl::RetryOperation( + // Convert QuerySettings to Query Client settings + NYdb::NQuery::TExecuteQuerySettings exec_settings; + if (query_settings.keep_in_query_cache.has_value()) { + // Query Client doesn't have KeepInQueryCache, it caches automatically + } + if (query_settings.collect_query_stats) { + exec_settings.StatsMode(impl::ConvertStatsMode(*query_settings.collect_query_stats)); + } + + auto future = impl::RetryQuery( context, [query, params = std::move(builder).Build(), - exec_settings = ToExecQuerySettings(query_settings), + exec_settings = std::move(exec_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 = PrepareQueryTxSettings(settings); + const auto tx = NYdb::NQuery::TTxControl::BeginTx(tx_settings).CommitTx(); + return session.ExecuteQuery(impl::ToString(query.GetStatementView()), tx, params, exec_settings); } ); diff --git a/ydb/src/ydb/transaction.cpp b/ydb/src/ydb/transaction.cpp index 05278d62f89d..b317f6ec8bbf 100644 --- a/ydb/src/ydb/transaction.cpp +++ b/ydb/src/ydb/transaction.cpp @@ -20,7 +20,7 @@ namespace ydb { Transaction::Transaction( TableClient& table_client, - NYdb::NTable::TTransaction ydb_tx, + NYdb::NQuery::TTransaction ydb_tx, std::string name, OperationSettings&& rollback_settings ) noexcept @@ -87,7 +87,7 @@ void Transaction::Commit(OperationSettings settings) { } const auto commit_settings = impl::PrepareRequestSettings< - NYdb::NTable::TCommitTxSettings>(context.settings, context.deadline); + NYdb::NQuery::TCommitTxSettings>(context.settings, context.deadline); auto error_guard = ErrorGuard(); @@ -111,7 +111,7 @@ void Transaction::Rollback() { impl::RequestContext context{table_client_, kQuery, std::move(settings), impl::IsStreaming{false}, &span_}; const auto rollback_settings = impl::PrepareRequestSettings< - NYdb::NTable::TRollbackTxSettings>(context.settings, context.deadline); + NYdb::NQuery::TRollbackTxSettings>(context.settings, context.deadline); [[maybe_unused]] auto error_guard = ErrorGuard(); @@ -152,16 +152,23 @@ ExecuteResponse Transaction::Execute( impl::RequestContext context{table_client_, query, std::move(settings), impl::IsStreaming{false}, &span_}; auto internal_params = std::move(builder).Build(); - auto exec_settings = table_client_.ToExecQuerySettings(query_settings); + // Convert QuerySettings to Query Client settings + NYdb::NQuery::TExecuteQuerySettings exec_settings; + if (query_settings.keep_in_query_cache.has_value()) { + // Query Client doesn't have KeepInQueryCache, it caches automatically + } + if (query_settings.collect_query_stats) { + exec_settings.StatsMode(impl::ConvertStatsMode(*query_settings.collect_query_stats)); + } impl::ApplyToRequestSettings(exec_settings, context.settings, context.deadline); // Must go after PrepareExecuteSettings, because an exception from there // leaves the transaction active. auto error_guard = ErrorGuard(); - auto execute_fut = ydb_tx_.GetSession().ExecuteDataQuery( + auto execute_fut = ydb_tx_.GetSession().ExecuteQuery( impl::ToString(query.GetStatementView()), - NYdb::NTable::TTxControl::Tx(ydb_tx_), + NYdb::NQuery::TTxControl::Tx(ydb_tx_), std::move(internal_params), exec_settings ); From 876d9452663779deaa6691d2f6dba1e5f1927d84 Mon Sep 17 00:00:00 2001 From: Konstantin Pavlov Date: Wed, 24 Dec 2025 13:41:49 +0300 Subject: [PATCH 02/10] upd include --- ydb/include/userver/ydb/transaction.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ydb/include/userver/ydb/transaction.hpp b/ydb/include/userver/ydb/transaction.hpp index f35b23c96c8e..7d28fe3d5750 100644 --- a/ydb/include/userver/ydb/transaction.hpp +++ b/ydb/include/userver/ydb/transaction.hpp @@ -2,7 +2,7 @@ #include -#include +#include #include #include From f1e2bd07f1af628189f7d680f76c9ec65174a9be Mon Sep 17 00:00:00 2001 From: Konstantin Pavlov Date: Wed, 24 Dec 2025 13:42:02 +0300 Subject: [PATCH 03/10] drop unused --- ydb/src/ydb/table.cpp | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/ydb/src/ydb/table.cpp b/ydb/src/ydb/table.cpp index b43ed383c82d..e44b4f581a0d 100644 --- a/ydb/src/ydb/table.cpp +++ b/ydb/src/ydb/table.cpp @@ -18,20 +18,6 @@ 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(); - } - } -} - NYdb::NQuery::TTxSettings PrepareQueryTxSettings(const OperationSettings& settings) { switch (settings.tx_mode.value()) { case TransactionMode::kSerializableRW: { From 5b00aac953f02bdc76d9060a7f68ba02978d55ff Mon Sep 17 00:00:00 2001 From: Konstantin Pavlov Date: Wed, 24 Dec 2025 13:42:42 +0300 Subject: [PATCH 04/10] replace call `NYdb::NQuery::TTransaction::GetSession()::GetParamsBuilder()` -> `NYdb::TParamsBuilder{}` --- ydb/src/ydb/transaction.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ydb/src/ydb/transaction.cpp b/ydb/src/ydb/transaction.cpp index b317f6ec8bbf..ba5147a0b4a0 100644 --- a/ydb/src/ydb/transaction.cpp +++ b/ydb/src/ydb/transaction.cpp @@ -127,9 +127,7 @@ void Transaction::Rollback() { // Successful rollback is still a transaction error for logs and stats. } -PreparedArgsBuilder Transaction::GetBuilder() const { - return PreparedArgsBuilder(ydb_tx_.GetSession().GetParamsBuilder()); -} +PreparedArgsBuilder Transaction::GetBuilder() const { return PreparedArgsBuilder(NYdb::TParamsBuilder{}); } void Transaction::EnsureActive() const { if (!is_active_) { From 048d0cc157ca65e6551d6caf3c497b37a4ffc7da Mon Sep 17 00:00:00 2001 From: Konstantin Pavlov Date: Wed, 24 Dec 2025 13:43:24 +0300 Subject: [PATCH 05/10] replace call 'TTableClient::GetParamsBuilder()' -> 'NYdb::TParamsBuilder{}' --- ydb/src/ydb/table.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ydb/src/ydb/table.cpp b/ydb/src/ydb/table.cpp index e44b4f581a0d..5dea224ce930 100644 --- a/ydb/src/ydb/table.cpp +++ b/ydb/src/ydb/table.cpp @@ -441,7 +441,7 @@ 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::TParamsBuilder{}); } NYdb::NTable::TExecDataQuerySettings TableClient::ToExecQuerySettings(QuerySettings query_settings) const { NYdb::NTable::TExecDataQuerySettings exec_settings; From 97686840188a2c6f050bdf51d62b323319c1d323 Mon Sep 17 00:00:00 2001 From: Konstantin Pavlov Date: Wed, 24 Dec 2025 13:45:08 +0300 Subject: [PATCH 06/10] simplify PreparedArgsBuilder --- ydb/include/userver/ydb/builder.hpp | 7 ++----- ydb/src/ydb/table.cpp | 2 +- ydb/src/ydb/transaction.cpp | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/ydb/include/userver/ydb/builder.hpp b/ydb/include/userver/ydb/builder.hpp index aa57219e2050..6c49da3029f1 100644 --- a/ydb/include/userver/ydb/builder.hpp +++ b/ydb/include/userver/ydb/builder.hpp @@ -18,6 +18,8 @@ class Transaction; class PreparedArgsBuilder final { public: + PreparedArgsBuilder() = default; + PreparedArgsBuilder(PreparedArgsBuilder&&) noexcept = default; PreparedArgsBuilder& operator=(PreparedArgsBuilder&&) = delete; @@ -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 void AddParams(NamesValues&&... names_values); diff --git a/ydb/src/ydb/table.cpp b/ydb/src/ydb/table.cpp index 5dea224ce930..5da172553557 100644 --- a/ydb/src/ydb/table.cpp +++ b/ydb/src/ydb/table.cpp @@ -441,7 +441,7 @@ void DumpMetric(utils::statistics::Writer& writer, const TableClient& table_clie ); } -PreparedArgsBuilder TableClient::GetBuilder() const { return PreparedArgsBuilder(NYdb::TParamsBuilder{}); } +PreparedArgsBuilder TableClient::GetBuilder() const { return PreparedArgsBuilder{}; } NYdb::NTable::TExecDataQuerySettings TableClient::ToExecQuerySettings(QuerySettings query_settings) const { NYdb::NTable::TExecDataQuerySettings exec_settings; diff --git a/ydb/src/ydb/transaction.cpp b/ydb/src/ydb/transaction.cpp index ba5147a0b4a0..6e90820ccc09 100644 --- a/ydb/src/ydb/transaction.cpp +++ b/ydb/src/ydb/transaction.cpp @@ -127,7 +127,7 @@ void Transaction::Rollback() { // Successful rollback is still a transaction error for logs and stats. } -PreparedArgsBuilder Transaction::GetBuilder() const { return PreparedArgsBuilder(NYdb::TParamsBuilder{}); } +PreparedArgsBuilder Transaction::GetBuilder() const { return PreparedArgsBuilder{}; } void Transaction::EnsureActive() const { if (!is_active_) { From e55664b80fdb200d5dbff244ce235754c25529f6 Mon Sep 17 00:00:00 2001 From: Konstantin Pavlov Date: Wed, 24 Dec 2025 13:46:23 +0300 Subject: [PATCH 07/10] refactor MakeTxSettings --- ydb/src/ydb/table.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/ydb/src/ydb/table.cpp b/ydb/src/ydb/table.cpp index 5da172553557..0d5a9436b5be 100644 --- a/ydb/src/ydb/table.cpp +++ b/ydb/src/ydb/table.cpp @@ -18,17 +18,14 @@ USERVER_NAMESPACE_BEGIN namespace ydb { 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(); - } } } @@ -309,7 +306,7 @@ 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 = PrepareQueryTxSettings(context.settings); + auto tx_settings = MakeTxSettings(context.settings.tx_mode.value()); auto future = impl::RetryQuery( context, @@ -375,7 +372,7 @@ ExecuteResponse TableClient::ExecuteDataQuery( 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); } @@ -415,7 +412,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); } From 057a4b8eb9232c1095a556707507d6a04008d5f0 Mon Sep 17 00:00:00 2001 From: Konstantin Pavlov Date: Wed, 24 Dec 2025 13:49:35 +0300 Subject: [PATCH 08/10] refactor ToExecuteQuerySettings --- ydb/include/userver/ydb/table.hpp | 2 -- ydb/src/ydb/impl/operation_settings.cpp | 32 ++++++++++++++++--------- ydb/src/ydb/impl/operation_settings.hpp | 4 ++-- ydb/src/ydb/table.cpp | 20 ++-------------- ydb/src/ydb/transaction.cpp | 9 +------ 5 files changed, 26 insertions(+), 41 deletions(-) diff --git a/ydb/include/userver/ydb/table.hpp b/ydb/include/userver/ydb/table.hpp index fd31dc014612..10ff5eff7fd5 100644 --- a/ydb/include/userver/ydb/table.hpp +++ b/ydb/include/userver/ydb/table.hpp @@ -235,8 +235,6 @@ class TableClient final { void Select1(); - NYdb::NTable::TExecDataQuerySettings ToExecQuerySettings(QuerySettings query_settings) const; - template PreparedArgsBuilder MakeBuilder(Args&&... args); diff --git a/ydb/src/ydb/impl/operation_settings.cpp b/ydb/src/ydb/impl/operation_settings.cpp index fc75a4795ef6..a0451df9c3f4 100644 --- a/ydb/src/ydb/impl/operation_settings.cpp +++ b/ydb/src/ydb/impl/operation_settings.cpp @@ -19,16 +19,8 @@ std::chrono::milliseconds DeadlineToTimeout(engine::Deadline deadline) { return timeout; } -} // 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::EStatsMode ConvertStatsMode(NYdb::NTable::ECollectQueryStatsMode collect_query_stats) { - // Convert Table Client stats mode to Query Client stats mode - switch (collect_query_stats) { +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: @@ -38,7 +30,25 @@ NYdb::NQuery::EStatsMode ConvertStatsMode(NYdb::NTable::ECollectQueryStatsMode c case NYdb::NTable::ECollectQueryStatsMode::Profile: return NYdb::NQuery::EStatsMode::Profile; } - return NYdb::NQuery::EStatsMode::None; // Safe fallback for invalid enum values +} + +} // 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 diff --git a/ydb/src/ydb/impl/operation_settings.hpp b/ydb/src/ydb/impl/operation_settings.hpp index d115d919bad0..86ef06d82543 100644 --- a/ydb/src/ydb/impl/operation_settings.hpp +++ b/ydb/src/ydb/impl/operation_settings.hpp @@ -16,10 +16,10 @@ USERVER_NAMESPACE_BEGIN namespace ydb::impl { -NYdb::NQuery::EStatsMode ConvertStatsMode(NYdb::NTable::ECollectQueryStatsMode collect_query_stats); - std::chrono::milliseconds GetBoundTimeout(std::chrono::milliseconds timeout, engine::Deadline deadline); +NYdb::NQuery::TExecuteQuerySettings ToExecuteQuerySettings(const QuerySettings& query_settings); + template void ApplyToRequestSettings( NYdb::TRequestSettings& result, diff --git a/ydb/src/ydb/table.cpp b/ydb/src/ydb/table.cpp index 0d5a9436b5be..d329f97df5ce 100644 --- a/ydb/src/ydb/table.cpp +++ b/ydb/src/ydb/table.cpp @@ -16,6 +16,7 @@ USERVER_NAMESPACE_BEGIN namespace ydb { + namespace { NYdb::NQuery::TTxSettings MakeTxSettings(TransactionMode tx_mode) { @@ -355,20 +356,11 @@ ExecuteResponse TableClient::ExecuteDataQuery( ) { impl::RequestContext context{*this, query, std::move(settings)}; - // Convert QuerySettings to Query Client settings - NYdb::NQuery::TExecuteQuerySettings exec_settings; - if (query_settings.keep_in_query_cache.has_value()) { - // Query Client doesn't have KeepInQueryCache, it caches automatically - } - if (query_settings.collect_query_stats) { - exec_settings.StatsMode(impl::ConvertStatsMode(*query_settings.collect_query_stats)); - } - auto future = impl::RetryQuery( context, [query, params = std::move(builder).Build(), - exec_settings = std::move(exec_settings), + exec_settings = impl::ToExecuteQuerySettings(query_settings), settings = context.settings, deadline = context.deadline](NYdb::NQuery::TSession session) mutable { impl::ApplyToRequestSettings(exec_settings, settings, deadline); @@ -440,14 +432,6 @@ void DumpMetric(utils::statistics::Writer& writer, const TableClient& table_clie 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 diff --git a/ydb/src/ydb/transaction.cpp b/ydb/src/ydb/transaction.cpp index 6e90820ccc09..5b248d626c65 100644 --- a/ydb/src/ydb/transaction.cpp +++ b/ydb/src/ydb/transaction.cpp @@ -150,14 +150,7 @@ ExecuteResponse Transaction::Execute( impl::RequestContext context{table_client_, query, std::move(settings), impl::IsStreaming{false}, &span_}; auto internal_params = std::move(builder).Build(); - // Convert QuerySettings to Query Client settings - NYdb::NQuery::TExecuteQuerySettings exec_settings; - if (query_settings.keep_in_query_cache.has_value()) { - // Query Client doesn't have KeepInQueryCache, it caches automatically - } - if (query_settings.collect_query_stats) { - exec_settings.StatsMode(impl::ConvertStatsMode(*query_settings.collect_query_stats)); - } + auto exec_settings = impl::ToExecuteQuerySettings(query_settings); impl::ApplyToRequestSettings(exec_settings, context.settings, context.deadline); // Must go after PrepareExecuteSettings, because an exception from there From b20d4514e98ab9c8d960b27648c217d2cdaa7db5 Mon Sep 17 00:00:00 2001 From: Konstantin Pavlov Date: Wed, 24 Dec 2025 13:50:48 +0300 Subject: [PATCH 09/10] upd metrics test --- .../tests-metrics/static/metrics_values.txt | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/ydb/functional_tests/basic/tests-metrics/static/metrics_values.txt b/ydb/functional_tests/basic/tests-metrics/static/metrics_values.txt index efd77d24804b..94702193d94e 100644 --- a/ydb/functional_tests/basic/tests-metrics/static/metrics_values.txt +++ b/ydb/functional_tests/basic/tests-metrics/static/metrics_values.txt @@ -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 @@ -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 From 911c280d0d17282ed206b221fcbf55b0cd602df3 Mon Sep 17 00:00:00 2001 From: Konstantin Pavlov Date: Wed, 24 Dec 2025 22:00:18 +0300 Subject: [PATCH 10/10] bump ydb-cpp-sdk version --- cmake/SetupYdbCppSDK.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/SetupYdbCppSDK.cmake b/cmake/SetupYdbCppSDK.cmake index 17b86d4d884c..4aa7edb9f5f9 100644 --- a/cmake/SetupYdbCppSDK.cmake +++ b/cmake/SetupYdbCppSDK.cmake @@ -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}"