userver: userver/ydb/settings.hpp Source File
Loading...
Searching...
No Matches
settings.hpp
1#pragma once
2
3#include <chrono>
4#include <cstdint>
5#include <optional>
6#include <string>
7#include <string_view>
8
9#include <ydb-cpp-sdk/client/table/query_stats/stats.h>
10
11#include <userver/yaml_config/fwd.hpp>
12
13USERVER_NAMESPACE_BEGIN
14
15namespace ydb {
16
17enum class TransactionMode { kSerializableRW, kOnlineRO, kStaleRO, kSnapshotRO, kSnapshotRW };
18
19/// @brief Settings for a single request.
20struct OperationSettings final {
21 /// Maximum number of retries for a single request.
22 std::optional<std::uint32_t> retries{std::nullopt};
23
24 /// Timeout for a single request.
25 std::chrono::milliseconds client_timeout_ms{0};
26
27 /// Transaction mode.
28 std::optional<TransactionMode> tx_mode{std::nullopt};
29
30 /// Timeout for getting a session.
31 std::chrono::milliseconds get_session_timeout_ms{0};
32
33 /// Whether a single request to YDB is idempotent.
34 bool is_idempotent{false};
35
36 /// @cond
37 // For internal use only.
38 std::string trace_id{};
39 /// @endcond
40};
41
42/// @brief Settings for a single query execution.
43struct QuerySettings final {
44 /// Whether to keep the query in a server-side query cache.
45 /// @deprecated Query Client doesn't have KeepInQueryCache, it caches automatically.
46 std::optional<bool> keep_in_query_cache{std::nullopt};
47
48 /// Stats collection mode for query execution.
49 std::optional<NYdb::NTable::ECollectQueryStatsMode> collect_query_stats{std::nullopt};
50};
51
52/// @brief Settings for a single request inside a TxActor.
53struct RequestSettings final {
54 /// Timeout for a single request.
55 std::optional<std::chrono::milliseconds> client_timeout_ms{std::nullopt};
56};
57
58using ExecuteSettings = RequestSettings;
59using GetSessionSettings = RequestSettings;
60using CommitSettings = RequestSettings;
61using RollbackSettings = RequestSettings;
62
63/// @brief Settings for a transaction lambda.
64/// @see TableClient::RetryTx.
65struct RetryTxSettings final {
66 /// Transaction mode.
67 std::optional<TransactionMode> tx_mode{std::nullopt};
68
69 /// Timeout for an entire transaction lambda.
70 /// @note std::nullopt means unlimited.
71 std::optional<std::chrono::milliseconds> timeout_ms{std::nullopt};
72
73 /// Maximum number of retries for a transaction lambda.
74 std::optional<std::uint32_t> retries{std::nullopt};
75
76 /// Whether a transaction lambda is idempotent.
77 bool is_idempotent{false};
78
79 /// Settings for a get session request.
80 GetSessionSettings get_session_settings;
81
82 /// Settings for a commit transaction.
83 CommitSettings commit_settings;
84
85 /// Settings for a rollback transaction.
86 RollbackSettings rollback_settings;
87};
88
89} // namespace ydb
90
91namespace formats::parse {
92
93ydb::OperationSettings Parse(const yaml_config::YamlConfig& config, To<ydb::OperationSettings>);
94
95} // namespace formats::parse
96
97USERVER_NAMESPACE_END