0.1.12
New Features
- When tests crash, Jepsen will write the stacktrace to that test's
jepsen.log
file for you - Named locks: a concurrency primitive for locking a dynamic pool of resources by some identifier
- Knossos now supports timeouts to help bound search time
jepsen.checker/set-full
reads can now use vectors, not just sets, and will flag duplicate values- Tests now take a :logging map, which can override package log levels. Helpful for tracing, or noisy clients
- Latency and rate graphs now render different kinds of nemesis operations in separate tracks, like gantt charts, with colors and customizable legends.
jepsen.generator/process-limit
: bounds number of processes, rather than number of operations. Helpful for linearizable tests, where process concurrency is the dominant factor in complexity.jepsen.generator/seq-all
: likeseq
, but emits every element of each generator it's given. Useful for constructing an infinite series of finite generators.- New type of test:
jepsen.tests.causal-reverse
, which looks for incompatible read orders in serializable systems. jepsen.os.ubuntu
: supports running tests on Ubuntu.- Docker scripts can also set up Ubuntu nodes with
--ubuntu
API Changes
- Keyword nodes (
:n1
) are no longer supported. We've all been using string node names for a few years now. - Tests no longer take a
:model
key. Only a few checkers used them; you provide models to checkers on construction now. jepsen.control.util
now throws ex-info exception maps using Slingshot, which means you can pattern-match return codes in exception handlers for shell commands usingslingshot/try+
. Exceptions fromexec
also have their stdout, stderr, and command neatly separated into different fields, which should cut down on regex tomfoolery.
Minor Changes
- Additional test coverage
- Knossos 0.3.4
jepsen.checker/counter
is now more precise: it filters out failed operations- TravisCI integration means we'll be more rigorous about tests and PRs
- Performance improvements to
jepsen.checker/set-full
Bugfixes
- Clock skew plots no longer explode on empty histories
- Bank plots no longer explode on empty histories
- Fixed a nullpointerexception serializing empty multisets
- Documentation fixes
- Typo fixes in the tutorial
Notes
jepsen.generator/time-limit
continues to be bad; it contains a least two race conditions around nested time limits that can mostly work, but can also ruin your life. We need to fundamentally redesign generators.