Skip to content
This repository has been archived by the owner on Feb 17, 2019. It is now read-only.
/ conver-old Public archive

[discontinued, see pviotti/conver] Practical verification of non-transactional consistency models.

License

Notifications You must be signed in to change notification settings

pviotti/conver-old

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Con:heavy_check_mark:er Build Status

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.

Features

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.

Conver execution

Getting started

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.

Authors and license

Conver has been developed at EURECOM.
License: Apache 2.0.

About

[discontinued, see pviotti/conver] Practical verification of non-transactional consistency models.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published