0.2.2
This is an incremental release which includes a slew of ease-of-use improvements, minor utilities, and improved performance. Special attention has been paid to complex nemeses, with new support for lifting generators, nemeses, and packages thereof into new domains, so that nemeses can affect different parts of a system selectively.
API changes
- repl/last-test is now latest-test, and does not require a test name any more
- independent/subhistory yields vectors, rather than lazy seqs. This allows checkers to depend on fast and consistent
nth
andpeek
access to histories. - nemesis.combined/nemesis-package now includes all nemeses, even if you didn't ask for them. This change makes it easier for you to write your own generators on top of combined nemeses.
- nemesis.combined/compose's generator's now use
any
, rather thanmix
. This is less efficient, but allows for reproducible and controlled interleaving of generators with different timescales. This may change your test timing dynamics: composing "pauses every 30 seconds" and "crashes every 60 seconds" now results in pauses every 30 seconds and crashes every 60 seconds (~3 ops/minute), rather than (potentially) stalling a pause operation for up to 30 seconds until the crash generator returns. In general,:interval 10
now means "a roughly ten second interval for each package", rather than across all packages.
New features
- store/write-fressian-file! and read-fressian-file offer easy serialization for your own data structures
- nemesis/f-map: Like generator/f-map, lifts a nemesis so that it can operate on ops with transformed
:f
fields. Helpful for gluing together multiple copies of the same nemesis which act on, say, different subsets of nodes. - nemesis.combined/f-map: lifts an entire nemesis package: generator(s), nemesis, and
:perf
rendering specification, into a new set of:f
s. - control.util/await-tcp-port: blocks until a local port is bound. Super helpful for DB setup.
- control/upload-resource: uploads a JVM resource to a remote file
Bugfixes
- web now handles EDN tagged literals correctly, which fixes valid/invalid/unknown highlighting on test directories with nonstandard data structures written to results.edn
- nemesis/majorities-ring: generated asymmetric partitions with more than 5 nodes. It now generates symmetric partitions via a stochastic method for larger clusters, though they may not be perfect rings.
- checker.perf/with-nemeses: now works even when :xrange is unspecified
Minor changes
- os.debian/install can now take additional CLI flags, if you like
- control.net/local-ip no longer depends on
eth0
, and should work for other network interfaces. - reconnect no longer dumps extraneous exceptions to the log when interrupted, which should make reading Jepsen stacktraces much easier.
- cli now allows users to merge option specifications together, overriding the default options that ship with Jepsen
- nemesis.time is much faster to set up; it avoids compiling binaries from scratch every time
- nemesis.compose offers more detailed error messages for unrecognized
:f
s - nemeses are pretty-printed in more detail
- nemesis/noop now supports reflection, which makes it more suitable as a monoid identity
- nemesis.combined can combine packages without requiring a nemesis key, which can be handy for packages that emit ops handled by other packages' nemeses
- cli's
lein run analyze
command now merges the stored test on top of the CLI-constructed test, which should help tests which lazily store checker-relevant state in atoms - Added type hints, which speeds up a tight loop in the generator interpreter
- core uses Fipp for pprint now
- control memoizes the clj-ssh agent, which significantly speeds up creating SSH connections
- control.ssh-failed exceptions no longer throw exceptions without a cause
- checker.perf now lets
:f
be a data structure, not just a string - os.ubuntu: no longer installs libzip
- checker.perf now allows empty collections of data points. Being persnickety about this was, in retrospect, more obnoxious than helpful
- control.util/start-daemon! can now take a :env map to set environment variables
- control/&&: shortcut for shell
&&
- nemesis.combined: a new target,
:minority-third
, is helpful for systems which can survive the loss of fewer than 1/3rd of nodes.