userver: components::CachingComponentBase< T > Class Template Reference
⚠️ 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

Base class for caching components. More...

#include <userver/cache/caching_component_base.hpp>

+ Inheritance diagram for components::CachingComponentBase< T >:
+ Collaboration diagram for components::CachingComponentBase< T >:

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
 
CacheUpdateTraitoperator= (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...
 

Detailed Description

template<typename T>
class components::CachingComponentBase< T >

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.

Dynamic config

Static options:

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

Update types

  • 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).

testsuite-force-periodic-update

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.

See also
dump::Dumper for more info on persistent cache dumps and corresponding config options.
Basics of Caches. pytest_userver.client.Client.invalidate_caches() for a function to force cache update from testsuite.
Examples
samples/http_caching/http_caching.cpp.

Definition at line 102 of file caching_component_base.hpp.

Member Typedef Documentation

◆ DataType

template<typename T >
using components::CachingComponentBase< T >::DataType = T

Definition at line 110 of file caching_component_base.hpp.

Constructor & Destructor Documentation

◆ CachingComponentBase()

template<typename T >
components::CachingComponentBase< T >::CachingComponentBase ( const ComponentConfig config,
const ComponentContext context 
)

Definition at line 174 of file caching_component_base.hpp.

◆ ~CachingComponentBase()

template<typename T >
components::CachingComponentBase< T >::~CachingComponentBase ( )
override

Definition at line 187 of file caching_component_base.hpp.

Member Function Documentation

◆ Clear()

template<typename T >
void components::CachingComponentBase< T >::Clear ( )
protected

Definition at line 267 of file caching_component_base.hpp.

◆ Emplace()

template<typename T >
template<typename... Args>
void components::CachingComponentBase< T >::Emplace ( Args &&...  args)
protected

Definition at line 262 of file caching_component_base.hpp.

◆ Get()

template<typename T >
utils::SharedReadablePtr< T > components::CachingComponentBase< T >::Get ( ) const
Returns
cache contents. May be nullptr if and only if MayReturnNull() returns true.

Definition at line 196 of file caching_component_base.hpp.

◆ GetEventChannel()

template<typename T >
concurrent::AsyncEventChannel< const std::shared_ptr< const T > & > & components::CachingComponentBase< T >::GetEventChannel ( )

Definition at line 217 of file caching_component_base.hpp.

◆ GetStaticConfigSchema()

template<typename T >
yaml_config::Schema components::CachingComponentBase< T >::GetStaticConfigSchema ( )
static

Definition at line 331 of file caching_component_base.hpp.

◆ GetUnsafe()

template<typename T >
utils::SharedReadablePtr< T > components::CachingComponentBase< T >::GetUnsafe ( ) const
Returns
cache contents. May be nullptr regardless of MayReturnNull().

Definition at line 222 of file caching_component_base.hpp.

◆ MayReturnNull()

template<typename T >
bool components::CachingComponentBase< T >::MayReturnNull ( ) const
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.

◆ ReadContents()

template<typename T >
std::unique_ptr< const T > components::CachingComponentBase< T >::ReadContents ( dump::Reader reader) const
protectedvirtual

Definition at line 299 of file caching_component_base.hpp.

◆ Set() [1/2]

template<typename T >
void components::CachingComponentBase< T >::Set ( std::unique_ptr< const T >  value_ptr)
protected

Definition at line 227 of file caching_component_base.hpp.

◆ Set() [2/2]

template<typename T >
void components::CachingComponentBase< T >::Set ( T &&  value)
protected

Definition at line 256 of file caching_component_base.hpp.

◆ UpdateAndListen()

template<typename T >
template<typename Class >
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.

◆ WriteContents()

template<typename T >
void components::CachingComponentBase< T >::WriteContents ( dump::Writer writer,
const T &  contents 
) const
protectedvirtual

Override to use custom serialization for cache dumps

Definition at line 289 of file caching_component_base.hpp.


The documentation for this class was generated from the following file: