Cachex.Services.Overseer (Cachex v3.4.0) View Source
Service module overseeing the persistence of cache records.
This module controls the state of caches being handled by Cachex. This was originally part of an experiment to see if it was viable to remove a process which backed each cache to avoid bottlenecking scenarios and grant the develop finer control over their concurrency.
The result was much higher throughput with better flexibility, and so we kept this new design. Cache states are stored in a single ETS table backing this module and all cache calls will be routed through here first to ensure their state is up to date.
Link to this section Summary
Functions
Ensures a cache from a name or record.
Determines whether a cache is known by the Overseer.
Registers a cache record against a name.
Retrieves a cache record, or nil if none exists.
Creates a new Overseer service tree.
Determines whether the Overseer has been started.
Carries out a transaction against the state table.
Unregisters a cache record against a name.
Updates a cache record against a name.
Link to this section Functions
Specs
ensure(atom() | Supervisor.Spec.cache()) :: Supervisor.Spec.cache() | nil
Ensures a cache from a name or record.
Ensuring a cache will map the provided argument to a cache record if available, otherwise a nil value.
Specs
known?(atom()) :: true | false
Determines whether a cache is known by the Overseer.
Specs
register(atom(), Supervisor.Spec.cache()) :: true
Registers a cache record against a name.
Specs
retrieve(atom()) :: Supervisor.Spec.cache() | nil
Retrieves a cache record, or nil if none exists.
Specs
start_link() :: Supervisor.on_start()
Creates a new Overseer service tree.
This will start a basic Agent for transactional changes, as well
as the main ETS table backing this service.
Specs
started?() :: boolean()
Determines whether the Overseer has been started.
Specs
Carries out a transaction against the state table.
Specs
unregister(atom()) :: true
Unregisters a cache record against a name.
Specs
update( atom(), Supervisor.Spec.cache() | (Supervisor.Spec.cache() -> Supervisor.Spec.cache()) ) :: Supervisor.Spec.cache()
Updates a cache record against a name.
This is atomic and happens inside a transaction to ensure that we don't get out of sync. Hooks are notified of the change, and the new state is returned.