Skip to content

0.1.12

Compare
Choose a tag to compare
@aphyr aphyr released this 06 Mar 15:50

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: like seq, 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 using slingshot/try+. Exceptions from exec 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.