The runner: config in, verdict out.
A run is Jepsen's own pipeline with the parts a Lite user shouldn't have to see kept internal -- generator -> the user's adapter (via the bridge) -> history -> the workload's checker.
The runner: config in, verdict out. A run is Jepsen's own pipeline with the parts a Lite user shouldn't have to see kept internal -- generator -> the user's adapter (via the bridge) -> history -> the workload's checker.
An in-process target is one logical node. Later target-types supply their own; nothing here branches on which.
An in-process target is one logical node. Later target-types supply their own; nothing here branches on which.
(run config)Runs config:
{:adapter <a ClientAdapter> :handler (fn [conn op] ...) ; the user's op -> target-call mapping :workload :register ; optional; :register is the default :workload-opts {...} ; optional; see the workload's ns :concurrency <n> ; optional; the workload picks otherwise :time-limit <seconds> ; optional; otherwise the run ends after ; the workload's op count :name "..." ; optional :target {:type :in-process} ; optional; :in-process is the default ; see lite.target.<type> for its config :nemesis [:crash] ; optional; faults to inject :nemesis-opts {...}} ; optional; :in-process takes :crashes ; and :crash-interval, the others ; :faults (a cap) and :fault-interval; ; :compose also :fault-duration
Interprets the workload's generator against the user's adapter -- with the
nemesis, if any, perturbing the target as it goes -- checks the resulting
history, and returns {:valid? ..., :results ..., :history ...}. The verdict
is printed and, like the history, written to store/.
prepare-test supplies the :start-time/:concurrency/:barrier the
interpreter needs and makes the generator forgettable; the store handle has
to be open for the interpreter's history writer, and stays open through
analysis so the checker's results land next to the history.
A target-type that runs the target -- :local-process, :compose -- starts
it here and stops it in the finally, whatever the run did. The ones that
don't own a target no-op.
Runs `config`:
{:adapter <a ClientAdapter>
:handler (fn [conn op] ...) ; the user's op -> target-call mapping
:workload :register ; optional; :register is the default
:workload-opts {...} ; optional; see the workload's ns
:concurrency <n> ; optional; the workload picks otherwise
:time-limit <seconds> ; optional; otherwise the run ends after
; the workload's op count
:name "..." ; optional
:target {:type :in-process} ; optional; :in-process is the default
; see lite.target.<type> for its config
:nemesis [:crash] ; optional; faults to inject
:nemesis-opts {...}} ; optional; :in-process takes :crashes
; and :crash-interval, the others
; :faults (a cap) and :fault-interval;
; :compose also :fault-duration
Interprets the workload's generator against the user's adapter -- with the
nemesis, if any, perturbing the target as it goes -- checks the resulting
history, and returns `{:valid? ..., :results ..., :history ...}`. The verdict
is printed and, like the history, written to `store/`.
`prepare-test` supplies the `:start-time`/`:concurrency`/`:barrier` the
interpreter needs and makes the generator forgettable; the store handle has
to be open for the interpreter's history writer, and stays open through
analysis so the checker's results land next to the history.
A target-type that runs the target -- `:local-process`, `:compose` -- starts
it here and stops it in the `finally`, whatever the run did. The ones that
don't own a target no-op.(test-map {:keys [adapter handler workload workload-opts concurrency time-limit
name nodes target nemesis nemesis-opts]})Builds the Jepsen test map for config. Everything not named here keeps
noop-test's defaults: a noop os/db is correct for an in-process target,
which has no node to configure.
Builds the Jepsen test map for `config`. Everything not named here keeps `noop-test`'s defaults: a noop os/db is correct for an in-process target, which has no node to configure.
(validate! {:keys [target nemesis]})Checks the combinations a run can't recover from -- an unrunnable target-type, or a fault that target-type can't inject -- before anything is built, opened or generated. Throws with an explanation; returns config.
Checks the combinations a run can't recover from -- an unrunnable target-type, or a fault that target-type can't inject -- before anything is built, opened or generated. Throws with an explanation; returns config.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |