Base class for caching components. More...
#include <userver/cache/caching_component_base.hpp>
Public Types | |
using | DataType = T |
Public Member Functions | |
CachingComponentBase (const ComponentConfig &config, const ComponentContext &) | |
utils::SharedReadablePtr< T > | Get () const |
utils::SharedReadablePtr< T > | GetUnsafe () const |
template<class Class > | |
concurrent::AsyncEventSubscriberScope | UpdateAndListen (Class *obj, std::string name, void(Class::*func)(const std::shared_ptr< const T > &)) |
concurrent::AsyncEventChannel< const std::shared_ptr< const T > & > & | GetEventChannel () |
Public Member Functions inherited from components::LoggableComponentBase | |
LoggableComponentBase (const ComponentConfig &, const ComponentContext &) | |
LoggableComponentBase (LoggableComponentBase &&)=delete | |
LoggableComponentBase (const LoggableComponentBase &)=delete | |
~LoggableComponentBase () override=default | |
ComponentHealth | GetComponentHealth () const override |
void | OnLoadingCancelled () override |
void | OnAllComponentsLoaded () override |
void | OnAllComponentsAreStopping () override |
Static Public Member Functions | |
static yaml_config::Schema | GetStaticConfigSchema () |
Static Public Member Functions inherited from components::LoggableComponentBase | |
static yaml_config::Schema | GetStaticConfigSchema () |
Protected Member Functions | |
void | Set (std::unique_ptr< const T > value_ptr) |
void | Set (T &&value) |
template<typename... Args> | |
void | Emplace (Args &&... args) |
void | Clear () |
virtual bool | MayReturnNull () const |
virtual void | WriteContents (dump::Writer &writer, const T &contents) const |
virtual std::unique_ptr< const T > | ReadContents (dump::Reader &reader) const |
Protected Member Functions inherited from cache::CacheUpdateTrait | |
AllowedUpdateTypes | GetAllowedUpdateTypes () const |
Update types configured for the cache. | |
void | StartPeriodicUpdates (utils::Flags< Flag > flags={}) |
Starts periodic updates. | |
void | StopPeriodicUpdates () |
Stops periodic updates. | |
void | AssertPeriodicUpdateStarted () |
void | OnCacheModified () |
virtual void | Update (UpdateType type, const std::chrono::system_clock::time_point &last_update, const std::chrono::system_clock::time_point &now, UpdateStatisticsScope &stats_scope)=0 |
Should be overridden in a derived class to align the stored data with some data source. | |
CacheUpdateTrait (CacheUpdateTrait &&)=delete | |
CacheUpdateTrait & | operator= (CacheUpdateTrait &&)=delete |
void | InvalidateAsync (UpdateType update_type) |
Non-blocking forced cache update of specified type. | |
void | UpdateSyncDebug (UpdateType update_type) |
Forces a cache update of specified type. | |
const std::string & | Name () const |
Additional Inherited Members | |
Protected Types inherited from cache::CacheUpdateTrait | |
enum class | Flag { kNone = 0 , kNoFirstUpdate = 1 << 0 } |
Periodic update flags. More... | |
Base class for caching components.
Provides facilities for creating periodically updated caches. You need to override cache::CacheUpdateTrait::Update then call cache::CacheUpdateTrait::StartPeriodicUpdates after setup and cache::CacheUpdateTrait::StopPeriodicUpdates before teardown. You can also override cache::CachingComponentBase::PreAssignCheck and set has-pre-assign-check: true in the static config to enable check.
Caching components must be configured in service config (see options below) and may be reconfigured dynamically via components::DynamicConfig.
Basics of Caches provide a more detailed introduction.
Name | Description | Default value |
---|---|---|
update-types | specifies whether incremental and/or full updates will be used | see below |
update-interval | (required) interval between Update invocations | – |
update-jitter | max. amount of time by which interval may be adjusted for requests dispersal | update_interval / 10 |
full-update-interval | interval between full updates | – |
updates-enabled | if false, cache updates are disabled (except for the first one if !first-update-fail-ok) | true |
first-update-fail-ok | whether first update failure is non-fatal | false |
task-processor | the name of the TaskProcessor for running DoWork | main-task-processor |
config-settings | enables dynamic reconfiguration with CacheConfigSet | true |
exception-interval | Used instead of update-interval in case of exception | update_interval |
additional-cleanup-interval | how often to run background RCU garbage collector | 10 seconds |
is-strong-period | whether to include Update execution time in update-interval | false |
testsuite-force-periodic-update | override testsuite-periodic-update-enabled in TestsuiteSupport component config | – |
failed-updates-before-expiration | the number of consecutive failed updates for data expiration | – |
has-pre-assign-check | enables the check before changing the value in the cache, by default it is the check that the new value is not empty | false |
full-and-incremental
: both update-interval
and full-update-interval
must be specified. Updates with UpdateType::kIncremental will be triggered each update-interval
(adjusted by jitter) unless full-update-interval
has passed and UpdateType::kFull is triggered.only-full
: only update-interval
must be specified. UpdateType::kFull will be triggered each update-interval
(adjusted by jitter).only-incremental
: only update-interval
must be specified. UpdateType::kFull is triggered on the first update, afterwards UpdateType::kIncremental will be triggered each update-interval
(adjusted by jitter).use it to enable periodic cache update for a component in testsuite environment where testsuite-periodic-update-enabled from TestsuiteSupport config is false
By default, update types are guessed based on update intervals presence. If both update-interval
and full-update-interval
are present, full-and-incremental
types is assumed. Otherwise only-full
is used.
dump::Dumper
for more info on persistent cache dumps and corresponding config options.Definition at line 102 of file caching_component_base.hpp.
using components::CachingComponentBase< T >::DataType = T |
Definition at line 110 of file caching_component_base.hpp.
components::CachingComponentBase< T >::CachingComponentBase | ( | const ComponentConfig & | config, |
const ComponentContext & | context | ||
) |
Definition at line 174 of file caching_component_base.hpp.
|
override |
Definition at line 187 of file caching_component_base.hpp.
|
protected |
Definition at line 267 of file caching_component_base.hpp.
|
protected |
Definition at line 262 of file caching_component_base.hpp.
utils::SharedReadablePtr< T > components::CachingComponentBase< T >::Get | ( | ) | const |
Definition at line 196 of file caching_component_base.hpp.
concurrent::AsyncEventChannel< const std::shared_ptr< const T > & > & components::CachingComponentBase< T >::GetEventChannel | ( | ) |
Definition at line 217 of file caching_component_base.hpp.
|
static |
Definition at line 331 of file caching_component_base.hpp.
utils::SharedReadablePtr< T > components::CachingComponentBase< T >::GetUnsafe | ( | ) | const |
Definition at line 222 of file caching_component_base.hpp.
|
protectedvirtual |
Whether Get() is expected to return nullptr. If MayReturnNull() returns false, Get() throws an exception instead of returning nullptr.
Definition at line 272 of file caching_component_base.hpp.
|
protectedvirtual |
Definition at line 299 of file caching_component_base.hpp.
|
protected |
Definition at line 227 of file caching_component_base.hpp.
|
protected |
Definition at line 256 of file caching_component_base.hpp.
concurrent::AsyncEventSubscriberScope components::CachingComponentBase< T >::UpdateAndListen | ( | Class * | obj, |
std::string | name, | ||
void(Class::*)(const std::shared_ptr< const T > &) | func | ||
) |
Subscribes to cache updates using a member function. Also immediately invokes the function with the current cache contents.
Definition at line 206 of file caching_component_base.hpp.
|
protectedvirtual |
Override to use custom serialization for cache dumps
Definition at line 289 of file caching_component_base.hpp.