https://github.com/pviotti/conver
Consistency verification tool
https://github.com/pviotti/conver
consistency databases testing verification
Last synced: about 1 year ago
JSON representation
Consistency verification tool
- Host: GitHub
- URL: https://github.com/pviotti/conver
- Owner: pviotti
- Created: 2016-05-26T17:40:51.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2021-09-24T07:44:27.000Z (over 4 years ago)
- Last Synced: 2025-03-23T19:04:31.717Z (about 1 year ago)
- Topics: consistency, databases, testing, verification
- Language: Scala
- Homepage:
- Size: 78.1 KB
- Stars: 9
- Watchers: 3
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Conver [](https://travis-ci.org/pviotti/conver)
Conver is a testing tool that 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 describe ordering and
mutual visibility of operations.
Finally, it uses these graph entities to check consistency semantics
defined as first-order logic predicates.
By default, Conver conveniently starts distributed stores as local clusters of Docker containers,
and can emulate WAN latencies through `netem` (without requiring admin rights).
The approach implemented in Conver has been described in [this PaPoC 2016 paper][papoc].
NOTE: This is a work-in-progress Scala rewrite of the [original](https://github.com/pviotti/conver-old)
Erlang implementation. It features a new linearizability checker, and improved consistency checks.
## Getting started
Once installed JDK, [Scala][scala] (with its building tool [sbt][sbt]) and Docker,
to build Conver issue:
$ sbt compile
The following command spawns a local cluster of 3 Docker containers running ZooKeeper, and
performs the consistency verification test using 10 concurrent clients
that invoke 10 operations on average.
Moreover, by setting the `-w` flag, Conver emulates wide area network settings by delaying,
dropping and corrupting packets.
$ sbt "run -d zk -s 3 -c 10 -o 10 -w"
The resulting textual and graphical outputs look like the following.

Here are the options currently supported:
-b, --batch Number of batch executions
-d, --database Database (lin, reg, zk, antidote)
-o, --mean-num-ops Average number of operations per client
-c, --num-clients Number of clients
-s, --num-servers Number of servers
-w, --wan Emulate wide area network
--help Show help message
## Features and related work
At the moment Conver supports:
* linearizability checking based on pseudocode from [Lu et al., SOSP '15][exist], and
checking of consistency semantics describing causality and monotonicity of operations
within and across sessions (e.g., monotonic writes, monotonic reads, sequential consistency, regular
semantics, causal consistency --- [this survey][survey] provides an overview of all these consistency
semantics)
* WAN latencies emulation
Similar projects: [Jepsen][jepsen], [Hermitage][hermitage], [WatCA][watca].
Linearizability checkers: [Horn's][horn], [Lowe's][lowe], [Line-up][lineup].
## Authors and license
Conver has been developed at [EURECOM][eurecom].
License: Apache 2.0.
[survey]: http://arxiv.org/abs/1512.00168
[papoc]: http://www.eurecom.fr/fr/publication/4874/download/ds-publi-4874.pdf
[jepsen]: http://jepsen.io
[hermitage]: https://github.com/ept/hermitage
[eurecom]: http://www.eurecom.fr
[horn]: https://github.com/ahorn/linearizability-checker
[lowe]: http://www.cs.ox.ac.uk/people/gavin.lowe/LinearizabiltyTesting/
[scala]: https://www.scala-lang.org/
[sbt]: http://www.scala-sbt.org/
[exist]: http://sigops.org/sosp/sosp15/current/2015-Monterey/printable/240-lu.pdf
[watca]: https://github.com/wgolab/WatCA
[lineup]: http://dl.acm.org/citation.cfm?id=1806634