trex-paxos / trex

Embeddable multi-Paxos For The JVM

Website GitHub

Build Status

Trex: An embeddable Paxos engine for the JVM

Checkout the blog posts for a description of this implementation of Paxos Made Simple.

Notable Releases

Trex 0.4.2 includes unpickle byte[] for java clients

Trex 0.2 is now released which allows for pluggable a QuroumStrategy which would allow for a more flexible paxos known as FPaxos

Trex 0.1 is now released to Central! This release has what is believed to be a correct and functional paxos library. The other jars ( core server and demo module) are only enough to run simple demos. A key missing features is that core has no logic for dynamic cluster membership.

Building

# Kick the tires
sbt clean test it:test
sbt coverageReport

See the .travis.yml for supported jdk and scala versions.

Releasing

Create a release:

sbt> sonatypeDrop comgithubtrex-paxos-1029
sbt> publishSigned
sbt> sonatypeReleaseAll

Status / Work Plan

0.1 - library (released)

  • replace pickling
  • fix driver
  • is retransmission of accepted values actually safe?
  • overrideable send methods
  • fix the fixmes
  • extract a core functional library with no dependencies
  • breakup monolithic actor and increase unit test coverage
  • java demo

0.2 - Flexible paxos (FPaxos) hooks

  • pluggable quorum strategy in the library

0.3 - integrity

  • crc32 message integrity

0.4.0 - Remove Akka dependence from core (keep in tests)

  • expose more methods for new rsocket code

0.4.1 - Remove Akka dependence from core (keep in tests) #2

  • Unpickle byte[] for Java clients

05 - practical

  • dynamic cluster membership with UPaxos

0.6 - enhanced

  • learners / scale-out multicast
  • timeline reads
  • noop heartbeats (less duels and partitioned leader detection)
  • snapshots and out of band retransmission
  • metrics/akka-tracing
  • binary tracing
  • jumbo UDP packets
  • complete the TODOs

0.7 - performance

  • strong reads
  • outdated reads
  • optimised journal
  • batching
  • remove remote actor from client driver
  • replica strong reads
  • compression
  • journal truncation by size
  • periodically leader number boosting

0.8

  • final API
  • hand-off reads?

M1

  • transaction demo
  • ???

Attribution

The TRex icon is Tyrannosaurus Rex by Raf Verbraeken from the Noun Project licensed under CC3.0