userver: userver/cache/cache_config.hpp Source File
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
cache_config.hpp
1#pragma once
2
3#include <chrono>
4#include <optional>
5#include <stdexcept>
6#include <string>
7#include <unordered_map>
8
9#include <userver/cache/update_type.hpp>
10#include <userver/dynamic_config/snapshot.hpp>
11#include <userver/formats/json_fwd.hpp>
12#include <userver/yaml_config/fwd.hpp>
13
14USERVER_NAMESPACE_BEGIN
15
16namespace dump {
17struct Config;
18} // namespace dump
19
20namespace cache {
21
22class ConfigError : public std::logic_error {
23 public:
24 using std::logic_error::logic_error;
25};
26
27enum class FirstUpdateMode {
28 kRequired,
29 kBestEffort,
30 kSkip,
31};
32
33FirstUpdateMode Parse(const yaml_config::YamlConfig& config,
34 formats::parse::To<FirstUpdateMode>);
35
36std::string_view ToString(FirstUpdateMode);
37
38enum class FirstUpdateType {
39 kFull,
40 kIncremental,
41 kIncrementalThenAsyncFull,
42};
43
44FirstUpdateType Parse(const yaml_config::YamlConfig& config,
45 formats::parse::To<FirstUpdateType>);
46
47std::string_view ToString(FirstUpdateType);
48
49struct ConfigPatch final {
50 std::chrono::milliseconds update_interval;
51 std::chrono::milliseconds update_jitter;
52 std::chrono::milliseconds full_update_interval;
53 std::optional<std::chrono::milliseconds> exception_interval;
54 bool updates_enabled;
55};
56
57ConfigPatch Parse(const formats::json::Value& value,
58 formats::parse::To<ConfigPatch>);
59
60struct Config final {
61 explicit Config(const yaml_config::YamlConfig& config,
62 const std::optional<dump::Config>& dump_config);
63
64 Config MergeWith(const ConfigPatch& patch) const;
65
66 AllowedUpdateTypes allowed_update_types;
67 bool allow_first_update_failure;
68 std::optional<bool> force_periodic_update;
69 bool config_updates_enabled;
70 bool has_pre_assign_check;
71 std::optional<std::string> task_processor_name;
72 std::chrono::milliseconds cleanup_interval;
73 bool is_strong_period;
74 std::optional<std::uint64_t> failed_updates_before_expiration;
75
76 FirstUpdateMode first_update_mode;
77 FirstUpdateType first_update_type;
78
79 std::chrono::milliseconds update_interval;
80 std::chrono::milliseconds update_jitter;
81 std::chrono::milliseconds full_update_interval;
82 std::optional<std::chrono::milliseconds> exception_interval;
83 bool updates_enabled;
84};
85
86std::unordered_map<std::string, ConfigPatch> ParseCacheConfigSet(
87 const dynamic_config::DocsMap& docs_map);
88
89inline constexpr dynamic_config::Key<ParseCacheConfigSet> kCacheConfigSet;
90
91} // namespace cache
92
93USERVER_NAMESPACE_END