diff --git a/ydb/src/ydb/impl/operation_settings.hpp b/ydb/src/ydb/impl/operation_settings.hpp index 5cc4f073a8b2..15a65f87b064 100644 --- a/ydb/src/ydb/impl/operation_settings.hpp +++ b/ydb/src/ydb/impl/operation_settings.hpp @@ -16,6 +16,8 @@ USERVER_NAMESPACE_BEGIN namespace ydb::impl { +constexpr double kOperationTimeoutMultiplier = 0.8; + std::chrono::milliseconds GetBoundTimeout(std::chrono::milliseconds timeout, engine::Deadline deadline); NYdb::NQuery::TExecuteQuerySettings ToExecuteQuerySettings(const QuerySettings& query_settings); @@ -33,6 +35,23 @@ void ApplyToRequestSettings( } } +template +void ApplyToRequestSettings( + NYdb::TOperationRequestSettings& result, + const OperationSettings& settings, + engine::Deadline deadline +) { + auto timeout = GetBoundTimeout(settings.client_timeout_ms, deadline); + + result.ClientTimeout(timeout); + result.OperationTimeout(timeout * kOperationTimeoutMultiplier); + result.CancelAfter(timeout * kOperationTimeoutMultiplier); + + if (!settings.trace_id.empty()) { + result.TraceId(impl::ToString(settings.trace_id)); + } +} + template T PrepareRequestSettings(const OperationSettings& settings, engine::Deadline deadline) { T result;