Conver verifies implementations of the most common non-transactional consistency models.
It spawns client processes that perform concurrent reads
and writes on the distributed store, and records their outcomes.
After the execution, it builds graph entities that express ordering
and mutual visibility of operations.
Finally, it uses such graph entities to check consistency semantics
defined as first-order logic predicates.
The approach implemented in Conver has been described in this PaPoC 2016 paper.
NOTE: this project is currently unmaintained. I decided to rewrite it in Scala for practical convenience. The Scala version features a linearizability checker (which this project lacks), and improved consistency checks.
Datastores currently supported: ZooKeeper and Riak.
Currently, Conver can verify the following consistency semantics: Monotonic Reads, Monotonic Writes,
Read-your-writes, PRAM, Writes-follow-reads, Causal and Strong Consistency (regularity).
To have an overview of the consistency models verified by Conver, see this survey.
Besides textual output, Conver generates a visualization of the executions, highlighting the violations of consistency models.
Once installed Erlang/OTP (R18+), to build Conver issue:
$ make
The dstores
folder contains scripts to build and locally run
Docker clusters of different storage systems.
For instance, to build and run a cluster of ZooKeeper servers
issue make build-zk
and make start-zk
.
To query the cluster status use make status-zk
, and to stop it make stop-zk
.
Additionally, the script dstores/net.sh
offers functions to simulate
slow and lossy networks.
Once the storage system is running and its configuration parameters are
recorded in conver.conf
, to run a Conver test issue:
$ ./conver run <num> <mock|zk|riak>
where num
is the number of client processes (e.g., 3),
followed by a string that identifies the store under test
(mock
for a dummy in-memory store consisting of Erlang's ets,
zk
for ZooKeeper, riak
for Riak).
For comparison, you can run a traditional property-based test suite
on the dummy in-memory database using
PropEr by issuing ./conver proper
.
Similar projects: Jepsen, Hermitage.
Conver has been developed at EURECOM.
License: Apache 2.0.