0.2.5
This release focuses on improved composition for generators (especially turning on and off faults over time), working with daemons that use wrapper scripts and break pidfile management, and more sophisticated membership nemeses. There's also a swath of minor bugfixes, utility functions, filled-out documentation, and ease-of-use improvements. Note in particular that the behavior of delay
and stagger
generators have changed: they no longer try to catch up when they fall behind, but instead schedule delays of approximately n seconds since the previous invocation. This should behave much better when composing delayed/staggered generators interleaved with long pauses, while retaining the property that you can mix multiple delayed generators together and still get each running at approximately the right rate.
Bugfixes
- control.util/install-archive! catches another type of corrupt zipfile error
- gen/until-ok previously allowed any OK event to trigger its completion. It now checks to make sure the completion is for an event it actually emitted.
- independent/tuple-gen tried to wrap operations which were not actually
:type :invoke
--which caused it to break when generators emitted:sleep
operations. It now only wraps invokes.
API Changes
- generator/stagger and delay no longer try to "catch up" when they fall behind; instead they schedule a mean delay between all operations. This lets them play nicer with generators that expect to toggle staggered/delayed generators on and off over time.
New Features
- control/env helps you construct environment variable strings out of literals and maps. This lets you pass things like {:AUTHOR "Foucault"} as the :env to control.util/start-daemon, rather than munging loads of string literals.
- util/await-fn calls a function repeatedly until it no longer throws, with configurable poll interval, timeouts, and logging. Helpful for blocking on long-running database setup.
- tests.cycle/append and wr checkers now use the :subdirectory option passed to
checker/check
to write Elle files into subdirectories - generator/cycle: cycles a generator n or infinitely many times
- generator/cycle-times: cycles through a rotating pool of generators on a fixed time schedule. Helpful for alternating between active and quiet periods of a nemesis.
- nemesis.membership.State now has a setup! and teardown! callback which can be used for storing e.g. network clients necessary for interacting with the cluster.
Minor Changes
- Remove :pure-generators requirement to confirm use of new generator style.
- Elle 0.1.3, Knossos 0.3.8, clojure 1.10.3, tools.cli 1.0.206, unilog 0.7.28, http-kit 2.5.3, ring 1.9.4, sshj 0.31.0, bouncycastle 1.69, fipp 0.6.24, dom-top 1.0.6, sshj 0.32.0
- checker.timeline no longer completes the history, which was, I think, unnecessary, and caused blowups on some test cases.
- nemesis.membership now has expanded documentation, and returns the underlying state atom in the package it constructs, so you can work with it.
- os.debian allows releaseinfo to change when executing apt update
- core/run! saves the test before tearing down the DB, which means if DB teardown crashes, you'll have at least some useful data to work with
- cli/parse-concurrency can now take arbitrary keys, making it easier to write tests that take multiple concurrency-related arguments
- Fixed some tests in control.util-test broken by an external FTP site going down
- control.util/start-daemon! has more complete documentation
- control.util/start-daemon! can now avoid using pidfiles and can instead check for
exec
- control.util/stop-daemon! can also avoid using pidfiles.