Skip to Content

Maelstrom

Maelstrom  is a tool that makes it easy to run a Jepsen  simulation to verify the correctness of a system.

Unlike for TLA+, Maelstrom works by running the real production code, injecting network partitions and randomized message delays, and verifying that the external properties are not violated, using the Jepsen library.

For Oxia this means that we can run a multi-node Oxia cluster as a set of multiple processes running in a single physical machine. Instead of TCP networking through gRPC, we run Oxia nodes that use stdin/stdout to communicate, using the JSON based Maelstrom protocol .

To build Oxia for Maelstrom:

$ make maelstrom

This will produce the binary in bin/oxia-maelstrom

To run the Maelstrom simulation, you need to download Maelstrom and then run:

$ ./maelstrom test -w lin-kv --bin /path/to/oxia-maelstrom \ --time-limit 30 --concurrency 2n --latency 10 --latency-dist uniform \ --nemesis partition

The lin-kv workload checks the linearizability of concurrent key–value operations over the full operation history, while the partition nemesis (currently the only nemesis Maelstrom provides) injects network partitions between the Oxia nodes as the workload runs. This same configuration runs in CI on every build.

Last updated on