Test results are stored in store/<test-name>/<timestamp>/. See store/latest
for a symlink to the most recently completed test, and store/current for a
symlink to the currently executing (or most recently completed) test.
You can view these files at the command line, using a file explorer, or via
Maelstrom's built-in web server. Run java -jar maelstrom.jar serve (or lein run serve) to launch the server on port 8080.
Each workload generates slightly different files and output, but in every test, you'll find:
-
jepsen.log: The full logs from the test run, as printed to the console. -
results.edn: The results of the test's checker, including statistics and safety analysis. This structure is also printed at the end of a test. -
history.edn: The history of all operations performed during the test, including reads, writes, and nemesis operations. -
history.txt: A condensed, human-readable representation of the history. Columns areprocess,type,f,value, anderror. -
messages.svg: A spacetime diagram of messages exchanged. Time flows (nonlinearly) from top to bottom, and each node is shown as a vertical bar. Messages are diagonal arrows between nodes, colorized by type. Hovering over a message shows the message itself. Helpful for understanding how your system's messages are flowing between nodes. -
timeline.html: A diagram where time flows (nonlinearly) down, and each process's operations are arranged in a vertical track. Blue indicatesokoperations, orange indicates indefinite (info) operations, and pink indicatesfailed operations. Helpful in understanding the concurrency structure of the test, as visible to Maelstrom. -
latency-raw.png: Shows the latency of each Maelstrom operation, plotted over time by the time the request began. Color indicates whether the operation completed withok,info, orfail. Shape indicates theffunction for that operation: e.g. aread,write,cas, etc. -
latency-quantiles.png: The same latency timeseries, binned by time, intervals and projected to quantiles 0.5, 0.95, 0.99, and 1. -
rate.png: The overall rate of requests per second, over time, broken down by:fand:type. -
log/n*.log: The STDERR logs emitted by each node. -
test.fressian: A machine-readable copy of the entire test, including history and analysis.
At the end of each test, Maelstrom analyzes the history of operations using a
checker, which produces results. Those results are printed to the console
at the end of the test, and also written to results.edn. At a high level,
results are a map with a single mandatory keyword, :valid?, which can be one
of three values:
true: The checker considers this history legal.:unknown: The checker could not determine whether the history was valid. This could happen if, for instance, the history contains no reads.false: The checker identified an error of some kind.
These values determine the colors of test directories in the web interface:
blue means :valid? true, orange means :valid? :unknown, and pink means
:valid? false. They also determine Jepsen's exit status when running a test:
true exits with status 0, 1 indicates a failure, and 2 indicates an :unknown.
Other exit statuses indicate internal Jepsen errors, like a crash.
Maelstrom's results are a combination of several different checkers:
-
perfis always valid, and generates performance graphs likelatency-raw.png. -
timelineis always valid, and generatestimeline.html -
exceptionscollects unhandled exceptions thrown during the course of a test--for example, if your binary generates malformed RPC responses. -
statscollects basic statistics: the overall:countof operations, how many wereok,failed, or crashed withinfo, as well as breakdowns for each function (by-f), so you can see specifically how many reads vs writes failed. -
netshows network statistics, including the overall number of sent, received, and total unique messages, and breakdowns for traffic between clients and servers vs between servers. -
workloaddepends on the checker for that particular workload. See the workload documentation for details.