Since 2013, Jepsen has analyzed over two dozen databases, coordination services, and queues—and we’ve found replica divergence, data loss, stale reads, read skew, lock conflicts, and much more. Here’s every analysis we’ve published.
Aerospike | 2015-05-04 | 3.5.4 |
2018-03-07 | 3.99.0.3 | |
Bufstream | 2024-11-12 | 0.1.0 |
Cassandra | 2013-09-24 | 2.0.0 |
Chronos | 2015-08-10 | 2.4.0 |
CockroachDB | 2017-02-16 | beta-20160829 |
Crate | 2016-06-28 | 0.54.9 |
Datomic | 2024-05-15 | 1.0.7075 |
Dgraph | 2018-08-23 | 1.0.2 |
2020-04-30 | 1.1.1 | |
Elasticsearch | 2014-06-15 | 1.1.0 |
2015-04-27 | 1.5.0 | |
etcd | 2014-06-09 | 0.4.1 |
2020-01-30 | 3.4.3 | |
FaunaDB | 2019-03-05 | 2.5.4 |
Hazelcast | 2017-10-06 | 3.8.3 |
jetcd | 2024-08-08 | 0.8.2 |
Kafka | 2013-09-24 | 0.8 beta |
MariaDB Galera | 2015-09-01 | 10.0 |
MongoDB | 2013-05-18 | 2.4.3 |
2015-04-20 | 2.6.7 | |
2017-02-07 | 3.4.0‑rc3 | |
2018-10-23 | 3.6.4 | |
2020-05-15 | 4.2.6 | |
MySQL | 2023-12-19 | 8.0.34 |
NuoDB | 2013-09-23 | 1.2 |
Percona XtraDB Cluster | 2015-09-04 | 5.6.25 |
PostgreSQL | 2020-06-12 | 12.3 |
RabbitMQ | 2014-06-06 | 3.3.0 |
Radix DLT | 2022-02-05 | 1.0-beta.35.1 |
RavenDB | 2024-01-31 | 6.0.2 |
Redis | 2013-05-18 | 2.6.13 |
2013-12-10 | WAIT | |
Redis-Raft | 2020-06-23 | 1b3fbf6 |
Redpanda | 2022-04-29 | 21.10.1 |
RethinkDB | 2016-01-04 | 2.1.5 |
2016-01-22 | 2.2.3 | |
Riak | 2013-05-19 | 1.2.1 |
Scylla | 2020-12-23 | 4.2-rc3 |
Tendermint | 2017-09-05 | 0.10.2 |
TiDB | 2019-06-12 | 2.1.7 |
VoltDB | 2016-07-12 | 6.3 |
YugaByte DB | 2019-03-26 | 1.1.9 |
2019-09-05 | 1.3.1 | |
Zookeeper | 2013-09-23 | 3.4.5 |
Get Tested
You can hire Jepsen to analyze a database, queue, or other kind of system. Jepsen also offers training and consulting to help you build and extend your own tests.
Ethics
All public Jepsen analyses are performed in accordance with our ethics policy.
Techniques
Jepsen occupies a particular niche of the correctness testing landscape. We emphasize:
-
Opaque-box systems testing: we evaluate real binaries running on real clusters. This allows us to test systems without access to their source, and without requiring deep packet inspection, formal annotations, etc. Bugs reproduced in Jepsen are observable in production, not theoretical. However, we sacrifice some of the strengths of formal methods: tests are nondeterministic, and we cannot prove correctness, only find errors.
-
Testing under distributed systems failure modes: faulty networks, unsynchronized clocks, and partial failure. Many test suites only evaluate the behavior of healthy clusters, but production systems experience pathological failure modes. Jepsen shows behavior under strain.
-
Generative testing: we construct random operations, apply them to the system, and construct a concurrent history of their results. That history is checked against a model to establish its correctness. Generative (or property-based) tests often reveal edge cases with subtle combinations of inputs.