Normandy.Behaviours.SessionStore.Mnesia
(normandy v1.1.0)
View Source
Distributed, durable SessionStore over OTP-native Mnesia ("distributed ETS").
ram_copies tables are replicated ETS; :mnesia.transaction/1 serializes per-session
appends (the FOR-UPDATE equivalent), so concurrent/cross-node appends never lose an
entry. Mnesia stores Erlang terms natively, so content / turn_state /
config_template need no term_to_binary.
The handle is %{entries: table, sessions: table}. The host (or Normandy.Cluster)
calls create_tables/1 with copies: :disc_copies for durable, full-cluster-restart
survival (the production default); ram_copies (test/default new/0) is faster but
only meaningful with ≥2 nodes. Configure via
{Normandy.Behaviours.SessionStore.Mnesia, entries: :..., sessions: :...}.
Summary
Functions
Create the two Mnesia tables. Opts: :entries/:sessions (table-name atoms,
required), :copies (:disc_copies default | :ram_copies), :nodes (default
[node()]). disc_copies converts this node's schema to disc first so it survives
restart (requires a writable Mnesia dir; see -mnesia dir / :mnesia app env).
Test/default handle: fresh uniquely-named ram_copies tables on this node.
Functions
@spec create_tables(keyword()) :: :ok
Create the two Mnesia tables. Opts: :entries/:sessions (table-name atoms,
required), :copies (:disc_copies default | :ram_copies), :nodes (default
[node()]). disc_copies converts this node's schema to disc first so it survives
restart (requires a writable Mnesia dir; see -mnesia dir / :mnesia app env).
Test/default handle: fresh uniquely-named ram_copies tables on this node.