View Source Skitter.Worker (Skitter v0.6.3)
Worker which manages state and performs computations for an operation and its strategy.
Workers are spawned by strategies to manage state and perform computations for a given operation. Any operation or strategy state not stored in the deployment lives in a worker.
Skitter workers are created by strategies with an initial state. Any messages received by the
worker are handled by the Skitter.Strategy.Operation.process/4
hook of its strategy. This
callback receives the current worker state and may return a new, updated state to be stored by
the worker.
Since strategies can create many separate workers, each worker is created with a tag which can
be used by the strategy to provide different implementations of
Skitter.Strategy.Operation.process/4
based on the worker that received the message.
This module defines the worker types and various functions to deal with workers.
Link to this section Summary
Types
Placement constraints.
Reference to a created worker.
Worker state.
Worker state or a function which returns a worker state.
Worker tag.
Functions
Create a new worker on the local node.
Create a new worker on a remote node.
Send a message to the worker at ref
.
Stop worker ref
.
Link to this section Types
@type placement() :: nil | :local | [{:on, node()}] | [{:with, ref()}] | [{:avoid, ref() | node()}] | [{:tagged, Skitter.Remote.tag()}]
Placement constraints.
When spawning a remote worker, it is often desirable to tweak on which node the worker will be
placed. This type defines a set of placement constraints which can be passed as an argument to
create_remote/4
.
The following constraints are defined:
nil
: No constraints.on: node
: Spawn the worker at the specified node.with: ref
: Spawn the worker on the same node as the worker identified byref
.avoid: ref
: Try to place the worker on a different node than the worker identified byref
.avoid: node
: Try to avoid placing the worker onnode
.tagged: tag
: Try to place the worker on a node with a specifict:Skitter.Nodes.tag/0
.
Note that it is not always possible to match the desired constraints. When this is the case, a warning will be logged.
@type ref() :: pid()
Reference to a created worker.
@type state() :: any()
Worker state.
Worker state or a function which returns a worker state.
Functions which create workers may be created with an initial state, or with a function which returns an initial state.
@type tag() :: atom()
Worker tag.
Each worker is tagged with an atom which allows the strategy to differentiate between the various workers it creates.
Link to this section Functions
@spec create_local(Skitter.Strategy.context(), state_or_state_fn(), tag()) :: ref() | :error
Create a new worker on the local node.
This will raise when executed on a master node.
@spec create_remote( Skitter.Strategy.context(), state_or_state_fn(), tag(), placement() ) :: ref()
Create a new worker on a remote node.
The worker will be placed on a random node, subject to the passed placement constraints.
Send a message to the worker at ref
.
@spec stop(ref()) :: :ok
Stop worker ref
.