userver: userver/cache/cache_config.hpp Source File
Loading...
Searching...
No Matches
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