#include <userver/ydb/dist_lock/component_base.hpp>
Base class for YDB-based distlock worker components.
A component that implements a distlock with lock in YDB. Inherit from DistLockComponentBase and implement DoWork(). Lock options are configured in static config.
The class must be used for infinite loop jobs.
name | Description | Default value |
---|---|---|
semaphore-name | name of the semaphore within the coordination node | – |
database-settings.dbname | the key of the database within ydb component (NOT the actual database path) | – |
database-settings.coordination-node | name of the coordination node within the database | – |
initial-setup | if true, then create the coordination node and the semaphore unless they already exist | true |
task-processor | the name of the TaskProcessor for running DoWork | main-task-processor |
node-settings.session-grace-period | the time after which the lock will be given to another host after a network failure | 10s |
session-timeout | for how long we will try to restore session after a network failure before dropping it | 5s |
restart-session-delay | backoff before attempting to reconnect session after it returns "permanent failure" | 1s |
acquire-interval | backoff before repeating a failed Acquire call | 100ms |
restart-delay | backoff before calling DoWork again after it returns or throws | 100ms |
cancel-task-time-limit | time, within which a cancelled DoWork is expected to finish | 5s |
Definition at line 55 of file component_base.hpp.
Public Member Functions | |
DistLockComponentBase (const components::ComponentConfig &, const components::ComponentContext &) | |
bool | OwnsLock () const noexcept |
Checks if the the current service instance owns the lock. | |
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 | |
virtual void | DoWork ()=0 |
virtual void | DoWorkTestsuite () |
void | Start () |
Must be called at the end of the constructor of the derived component. | |
void | Stop () noexcept |
Must be called in the destructor of the derived component. | |
|
protectedpure virtual |
Override this function with anything that must be done under the lock.
DoWork
must honour task cancellation and stop ASAP when it is cancelled, otherwise brain split is possible (IOW, two different users do work assuming both of them hold the lock, which is not true).restart-delay
the lock is attempted to be re-acquired (but by that time another host likely acquires the lock).
|
inlineprotectedvirtual |
Override this function to provide a custom testsuite handler, e.g. one that does not contain a "while not cancelled" loop. Calls DoWork
by default.
In testsuite runs, the normal DoWork execution disabled by default. There is an API to call DoWorkTestsuite from testsuite, imitating waiting until DoWork runs:
Definition at line 100 of file component_base.hpp.
|
noexcept |
Checks if the the current service instance owns the lock.
Useful for: