# This is a combination of 21 commits.
# The first commit's message is:
add an ets backend and create a rafter_backend behaviour

# This is the 2nd commit message:

add statem test for ets backend

# This is the 3rd commit message:

all tests passing

# This is the 4th commit message:

keep track of tables used and add corresponding invariant

# This is the 5th commit message:

add tests for rafter_backend_ets:read/1

# This is the 6th commit message:

add list_tables to ets backend

# This is the 7th commit message:

add list_keys to ets backend

# This is the 8th commit message:

fix rafter:read_op/2

# This is the 9th commit message:

WIP - support linearizable reads

# This is the 10th commit message:

WIP - it builds

# This is the 11th commit message:

add a simple script to start a node for development purposes

# This is the 12th commit message:

WIP - read linearizability appears to be working

# This is the 13th commit message:

support noop entries to allow advancement of commitIndex

# This is the 14th commit message:

reformat some stuff

# This is the 15th commit message:

explicitly handle timeouts - code very stable

# This is the 16th commit message:

backend behaviours handle state now

# This is the 17th commit message:

backend test passing with new api

# This is the 18th commit message:

remove eper from rebar.config

# This is the 19th commit message:

fix rafter_system_test_eqc

# This is the 20th commit message:

update README

# This is the 21st commit message:

change start-node path order for ebin and deps
add an ets backend and rafter_backend behaviour

This commit incorporates the following changes:

Improvements
 * Separate Read and Write Path
   * Read path is linearizable, but doesn't require logging operations
   * Uses successful next tick of append_entries as an implicit quorum
 * ETS Backend
 * Backends can maintain their internal state now
 * Statem test for ETS Backend
 * script to start a node for development purposes

Bugfixes
  * uses noops to advance commitIndex
  * explicitly handle timeouts in rafter_consensus_fsm

Libraries
  * Removed eper from rebar.config