This is LibPaxos3! A complete rewrite of LibPaxos2. LibPaxos3 has been improved in the following aspects:
- Doesn't make use of multicast
- Has a cleaner design
- Has a better build system based on CMake
- Comes with unit tests
LibPaxos3 is divided in two libraries: libpaxos and libevpaxos.
Libpaxos (see libpaxos/paxos
) implements the core of the Paxos consensus
protocol, and is not cluttered with network specific code. That is, libpaxos
does not depend on any particular networking library.
Libevpaxos (see libpaxos/evpaxos
) is the actual networked Paxos
implementation. This library is built on top of the libpaxos and libevent.
These are the basic steps required to get and compile LibPaxos3
git clone https://bitbucket.org/sciascid/libpaxos.git
mkdir libpaxos/build
cd libpaxos/build
cmake ..
make
LibPaxos3 depends on libevent and msgpack. By default, LibPaxos3 uses
an in-memory storage, with support for a storage backend based on LMDB
(see paxos.conf
and build options below).
LibPaxos3 should compile on Linux and OS X.
You pass options to cmake as follows: cmake -DOPTION=VALUE
LMDB_ROOT=PATH
- point it to your installation of LMDBLIBEVENT_ROOT=PATH
- point it to your installation of LibeventMSGPACK_ROOT=PATH
- point it to your installation of MessagePack
cd libpaxos/build
./sample/acceptor 0 ../paxos.conf > /dev/null &
./sample/acceptor 1 ../paxos.conf > /dev/null &
./sample/proposer 0 ../paxos.conf > /dev/null &
./sample/learner ../paxos.conf > learner.txt &
./sample/client 127.0.0.1:5550 1
See paxos.conf
for a sample configuration file.
Unit tests depend on the Google Test library. Execute the tests using
make test
in your build directory, or run runtest
from
build/unit
for detailed output.
LibPaxos3 is distributed under the terms of the 3-clause BSD license. LibPaxos3 has been developed at the University of Lugano, by Daniele Sciascia.