Skip to content

0.2.2

Compare
Choose a tag to compare
@aphyr aphyr released this 05 Feb 22:11
· 499 commits to main since this release

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 and peek 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 than mix. 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 :fs.
  • 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 :fs
  • 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.