Module khepri_machine

Khepri private low-level API.

Behaviours: ra_machine.

Description

Khepri private low-level API.

This module exposes the private "low-level" API to the Khepri database and state machine. Main functions correspond to Ra commands implemented by the state machine. All functions in khepri are built on top of this module.

This module is private. The documentation is still visible because it may help understand some implementation details. However, this module should never be called directly outside of Khepri.

Data Types

async_ret()

async_ret() = ok

common_ret()

common_ret() = khepri:ok(khepri_adv:node_props_map()) | khepri:error()

keep_while_conds_map()

keep_while_conds_map() = #{khepri_path:native_path() => khepri_condition:native_keep_while()}

Per-node keep_while conditions.

keep_while_conds_revidx()

keep_while_conds_revidx() = #{khepri_path:native_path() => #{khepri_path:native_path() => ok}}

Internal reverse index of the keep_while conditions. If node A depends on a condition on node B, then this reverse index will have a "node B => node A" entry.

machine_config()

machine_config() = #config{store_id = khepri:store_id(), member = ra:server_id(), snapshot_interval = non_neg_integer()}

Configuration record, holding read-only or rarely changing fields.

projections_map()

projections_map() = #{khepri_projection:projection() => khepri_path:native_pattern()}

Internal mapping between khepri_projection:projection() records and the native path patterns which trigger updates to each projection.

props()

props() = #{payload_version := khepri:payload_version(), child_list_version := khepri:child_list_version()}

Properties attached to each node in the tree structure.

state()

state() = #khepri_machine{config = khepri_machine:machine_config(), root = khepri_machine:tree_node(), keep_while_conds = khepri_machine:keep_while_conds_map(), keep_while_conds_revidx = khepri_machine:keep_while_conds_revidx(), triggers = #{khepri:trigger_id() => #{sproc := khepri_path:native_path(), event_filter := khepri_evf:event_filter()}}, emitted_triggers = [khepri_machine:triggered()], projections = khepri_machine:projections_map(), metrics = #{applied_command_count => non_neg_integer()}}

State of this Ra state machine.

tree_node()

tree_node() = #node{props = khepri_machine:props(), payload = khepri_payload:payload(), child_nodes = #{khepri_path:component() := #node{props = khepri_machine:props(), payload = khepri_payload:payload(), child_nodes = #{khepri_path:component() := #node{}}}}}

A node in the tree structure.

triggered()

triggered() = #triggered{id = khepri:trigger_id(), event_filter = khepri_evf:event_filter(), sproc = khepri_fun:standalone_fun(), props = map()}

tx_ret()

tx_ret() = khepri:ok(khepri_tx:tx_fun_result()) | khepri_tx:tx_abort() | no_return()

Function Index

fold/5Returns all tree nodes matching the given path pattern.
delete/3Deletes all tree nodes matching the path pattern.
transaction/5Runs a transaction and returns the result.
handle_tx_exception/1
register_trigger/5Registers a trigger.
register_projection/4Registers a projection.

Function Details

fold/5

fold(StoreId, PathPattern, Fun, Acc, Options) -> Ret

StoreId: the name of the Ra cluster.
PathPattern: the path (or path pattern) to the nodes to get.
Options: query options such as favor.

returns: an {ok, NodePropsMap} tuple with a map with zero, one or more entries, or an {error, Reason} tuple.

Returns all tree nodes matching the given path pattern.

delete/3

delete(StoreId, PathPattern, Options) -> Ret

StoreId: the name of the Ra cluster.
PathPattern: the path (or path pattern) to the nodes to delete.
Options: command options such as the command type.

returns: in the case of a synchronous delete, an {ok, NodePropsMap} tuple with a map with zero, one or more entries, or an {error, Reason} tuple; in the case of an asynchronous put, always ok (the actual return value may be sent by a message if a correlation ID was specified).

Deletes all tree nodes matching the path pattern.

transaction/5

transaction(StoreId, FunOrPath, Args, ReadWrite, Options) -> Ret

StoreId: the name of the Ra cluster.
FunOrPath: an arbitrary anonymous function or a path pattern pointing to a stored procedure.
Args: a list of arguments to pass to FunOrPath.
ReadWrite: the read/write or read-only nature of the transaction.
Options: command options such as the command type.

returns: in the case of a synchronous transaction, {ok, Result} where Result is the return value of FunOrPath, or {error, Reason} if the anonymous function was aborted; in the case of an asynchronous transaction, always ok (the actual return value may be sent by a message if a correlation ID was specified).

Runs a transaction and returns the result.

handle_tx_exception/1

handle_tx_exception(X1) -> any()

register_trigger/5

register_trigger(StoreId, TriggerId, EventFilter, StoredProcPath, Options) -> Ret

StoreId: the name of the Ra cluster.
TriggerId: the name of the trigger.
EventFilter: the event filter used to associate an event with a stored procedure.
StoredProcPath: the path to the stored procedure to execute when the corresponding event occurs.

returns: ok if the trigger was registered, an {error, Reason} tuple otherwise.

Registers a trigger.

register_projection/4

register_projection(StoreId, PathPattern, Projection, Options) -> Ret

StoreId: the name of the Ra cluster.
PathPattern: the pattern of tree nodes which should be projected.
Projection: the projection record created with khepri_projection:new/3.
Options: command options such as the command type.

returns: ok if the projection was registered, an {error, Reason} tuple otherwise.

Registers a projection.


Generated by EDoc