Skip to content

v0.3.6

Compare
Choose a tag to compare
@aphyr aphyr released this 18 Oct 19:13
· 10 commits to main since this release

This is a sizeable release. It includes a significant correctness bugfix for a rare condition that could make operations in the history print with the wrong data. It also adds a new namespace for composing databases, nemeses, and generators when working with systems where each node has a different role. Kafka-style tests gain new powers and are significantly faster. And we have the usual slew of small bugfixes, dependency bumps, and quality-of-life improvements. Happy testing!

Bugfixes

  • generator/fill-in-map no longer generates Ops with duplicate fields in their record extmaps. This fixes a rare bug where operations which used extra fields could wind up with two different values for (e.g.) (:value op) vs (pprint op). It should also improve speed and size on disk.
  • checker.perf/with-range: fix a bug causing plots with zero data points to convert the plot to a string. This was expensive if the plot is large, and caused very confusing error messages. We now provide a short string message instead.
  • net/iptables now handles the new error message from tc qdisc when calling net/fast!

API Changes

  • control/exec will now throw a :nonzero-exit error when an exit status code is nil. Yes, this is apparently a thing that's possible.
  • generator.test/with-fixed-rand-nth has been replaced by with-fixed-rands, which controls rand, rand-int, and rand-nth.
  • tests/kafka: failed and info operations are now assumed to roll back consumer positions, rather than advancing them.
  • tests/kafka: emit subscribe/assign ops only 1:64 ops, rather than 1:8. Now tunable via (:sub-p test).

New Features

  • A new namespace, jepsen.role, supports systems where different nodes run different software.
  • db/map-test wraps a DB in another which alters the test map. Helpful for composing DBs together which expect different things from their test maps.
  • generator/each-process: like each-thread, this facets an underlying generator into a distinct one for each process.
  • tests/kafka checks for transactions which read their own writes prior to commit.

Minor Changes

  • os/centos now uses dpkg 1.19.8
  • control.net/ip* now prefers v4 addresses
  • control/on-nodes no longer spawns a future when given a single node--slightly more efficient.
  • SSHJ now falls back to other auth methods after an AgentProxyException
  • generator/map and f-map now return nil when given a nil generator, which simplifies some before-run checks.
  • generator.test/default-test now includes a pair of :nodes, for generators that use nodes
  • checker/check-safe now writes exceptions as data to the :error field of the results, rather than an unreadable string stacktrace
  • tests.kafka now detects all duplicates even when given inconsistent offsets. It's nice to have both, it turns out.
  • tests/kafka includes an :unseen key in poll operations to help operators track how far behind we are
  • tests/kafka: new tests for the checker & generator
  • tests/kafka: duplicate errors now include specific offsets
  • tests/kafka: inconsistent-offsets errors now emit sorted sets, for readability
  • tests/kafka is roughly 8x faster now, thanks to a slew of performance improvements
  • tests/kafka also ignores the new cycle-exists variants of G0, G1c, etc.
  • Jepsen's internal tests log less noise now
  • Clojure 1.12.0
  • tools.logging 1.3.0
  • tools.cli 1.1.230
  • unilog 0.7.32
  • elle 0.2.2
  • http-kit 2.8.0
  • ring 1.12.2
  • sshj 0.39.0
  • data.codec 0.2.0
  • data.fressian 1.1.0

Full Changelog: v0.3.5...v0.3.6