Jepsen 0.2.6

109 views
Skip to first unread message

Kyle Kingsbury

unread,
Jan 26, 2022, 11:43:25 AM1/26/22
to anno...@jepsen.io
To whom it may delight,

Jepsen 0.2.6 is now available on Clojars and Github.
https://github.com/jepsen-io/jepsen/releases/tag/v0.2.6

The biggest change in this release is the introduction of a custom file
format for Jepsen tests: each store directory now has a `test.jepsen`
file. This file can be incrementally written, which speeds up testing
and allows for much better crash recovery. It can also be lazy-loaded:
loading a test from disk takes only a few milliseconds rather than
multiple minutes (for reasonably chonky tests), and gives you immediate
access to the top-level test map and the results `:valid?` field.
Loading the history or full results map is lazy and cached. This makes
working with tests at the REPL much nicer, and you'll find new
functions for loading tests at the repl too: `store/all-tests` and
`store/test`. The new file format also speeds up the web interface and
makes it more accurate for tests where results.edn is large or
truncated.

All store functions are backwards compatible, using test.jepsen where
possible, and falling back to results.edn and test.fressian otherwise.
We still produce test.fressian files, but this will (unless people
complain) be discontinued in the next Jepsen release to save storage
space and speed up testing.

There are some improvements to the membership nemesis framework that
make it easier to debug and to track complex state. Clients can
explicitly signal that they'd like to tear down the process, even if
they *don't* crash. You'll also find some quality-of-life improvements,
including the ability to map log-files to short local paths.

## API Changes

- No significant breaking API changes

## Bugfixes

- Docker scripts no longer print out control characters on OS X /
latest Debian
- Docker scripts don't throw "unbound variable" when POSITIONAL is
empty
- db/tcpdump now allows you to specify multiple ports correctly--they
were combined using `and`, not `or`.
- The web interface no longer flags some valid? tests as incomplete

## New Features

- Tests are now stored in a new binary format (jepsen.store.format)
which allows lazy loading of histories and results, as well as
incremental saves.
- client/invoke can add `:end-process? true` to a completion operation,
which forces the interpreter to terminate the process even if the op
was ok/fail. Helpful for clients which need to be torn down even on
definite failure.
- Web interface now uses test.jepsen, and uses a local cache to
dramatically speed up load times
- Web interface has some basic pagination, for when you've got
thousands of tests in a store dir
- db/log-files can now return a map of remote paths to short local
paths, which lets you avoid deep nested paths
- nemesis.membership/invoke! can now return [op, member-state] pairs.
This allows membership to track states resulting from applying
operations in a purely functional way. Membership state changes now
involve an exclusive lock, but node view fetching remains nonblocking.

## Minor Changes

- `lein run analyze` and `jepsen.core/run!` read and emit test.jepsen
files in addition to test.fressian.
- Web interface now displays local times for test runs
- Web interface click-to-copy-test-dir now uses double instead of
single quotes, so you can paste at the REPL
- Docker scripts are now compatible with cgroupv2
- Compiled for Java source level 11
- store/test loads a test by either a test directory string, or an
integer index (-1 for most recent)
- store/all-tests gives a lazy sequence of every test in chronological
order
- Some fressian-related vars in jepsen.store have been moved to
jepsen.store.fressian, but copies remain in jepsen.store for backwards
compatibility
- Fressian writers and readers are now available as first-class vars in
jepsen.store.fressian for later composition, if you so desire
- nemesis.membership offers slightly clearer logging messages
- fs-cache/write-atomic creates tempfiles in the same directory as the
destination, so targets need not be in /tmp.
- elle 0.1.4
- dom-top 1.0.7
- tools.logging 1.2.4
- unilog 0.7.29
- ring 1.9.5
- bouncycastle/bcprov-jdk15on 1.70
- fipp 0.6.25

Very truly yours,

--Kyle

Reply all
Reply to author
Forward
0 new messages