Skip to content

0.1.14

Compare
Choose a tag to compare
@aphyr aphyr released this 20 May 14:00

This is a big release! We've got a bunch of bugfixes--most importantly, an issue which allowed tests.long-fork to fail to find long fork anomalies, and a long-standing bug which wrote invalid .fressian files. Plot rendering has been totally re-worked, which standardizes behavior between several types of plot that used to do their own thing, and adds colorizable nemeses to all the usual plots. There's also a new, somewhat experimental set of tests for cycle detection in jepsen.tests.cycle. Finally, we've got several quality-of-life improvements around debuggability and error handling: better log messages for jepsen.control errors, crashes in analyses, and more careful choices about which exceptions to throw when more than one occurs concurrently, or sequentially, during a test.

Special thanks to Kit Patella and Peter Alvaro for their work and discussion around plotting and cycle detection, and to Craig Pastro, who made several documentation fixes and improvements to Docker support.

New Features

  • Totally re-worked plots. Latency, rate, clock, and bank plots now have a unified system for rendering nemesis operations. Nemesis ops have nice colors that match their legends. Fixed a whole bunch of edge cases with rendering outside plot ranges. Fixed issues with autoscaling. Fixed issues with multiple start operations followed by a single stop. Fixed several issues with crashes when plotting short or empty histories. Fixed issues with nemeses which extended to the end of the test. You can now include a :plot map to tests, specifying how to classify, label, and colorize nemeses in plots.
  • jepsen.tests.cycle: New tests based on cycle detection between operations. It's functional, finds bugs, and the bugs it finds all check out so far, but expect some API changes and re-organization as we refine it for use in additional databases.

API Changes

  • jepsen.tests.linearizable-register: now uses process-limit, rather than limit, by default. This should make register tests better at finding bugs, and less likely to become incredibly expensive to analyze.

Minor Changes

  • jepsen.txn 0.1.1: adds some additional support functions for transactional histories
  • dom-top 1.0.5
  • jepsen.core: when threads race to abort, try to throw more meaningful exceptions, rather than broken barriers/interrupts.
  • Fixed a bug in internal integration tests for teardown
  • jepsen.control.util/wget now retries NXDOMAIN wget errors. I know, this shouldn't happen. EC2's DNS is apparently awful?
  • jepsen.faketime: add an installer for our custom build of faketime supporting CLOCK_MONOTONIC_COARSE
  • jepsen.control/exec exceptions now include a human & logger-friendly error message as well as data
  • jepsen.db/cycle no longer swallows exceptions that occur during teardown!. This created hard-to-debug situations.
  • jepsen.control now uses real-pmap from dom-top.
  • jepsen.core: log a special message when :valid? is :unknown
  • jepsen.control.util/start-daemon! now logs the escaped command line used to start the daemon, which is really helpful for debugging startup issues.
  • jepsen.core/run! now throws the original exception if a test aborts and, during cleanup, an error occurs while snarfing logs. The log-snarfing message is still logged, but it's probably not as useful as the original error that interrupted the test!
  • jepsen.txn/reduce-mops: a helper for writing reductions over ever micro-op in a history
  • Docker support now uses networks instead of links, some other assorted updates for Debian Stretch.
  • jepsen.control.util/signal! sends a signal to a process by name
  • jepsen.os.debian now installs dirmngr by default.

Bugfixes

  • jepsen.tests.long-fork often failed to find long forks. This was a serious issue which could have allowed tests to pass when they should have failed. Now fixed.
  • jepsen.store: fixed a longstanding bug with writing invalid .fressian files for tests containing sets
  • jepsen.faketime/wrap!: if a test crashes during wrap!, don't get stuck with wrapper scripts without mode +x
  • jepsen.control.util/grepkill! no longer throws when no processes match
  • jepsen.tests.sequential: fixed a misleading namespace docstring which mischaracterized the invariants the test looked for. The test itself was OK; the docs were just wrong.
  • Don't copy temporary files into the control docker image, which could cause errors when copying symlinks referring to directories created during previous runs.