libraft v0.6 Release Notes

Release Date: 2019-06-13 // over 2 years ago
  • 0.6.0.0

    🔋 Feature: Optimized (reduced) the number of RPC messages sent between leader
    🌲 and follower for the follower to reconcile a log disparity resulting from
    network partitions.

    API change: Added a type parameter to many internal datatypes and type
    classes, most importantly of which the RaftT monad transformer with which
    raft nodes are spawned.

    🐛 Bug Fix: Validation of log entries upon appending them to a node's local log
    🌲 no longer causes the nodes to crash; The leader now properly validates log
    entries before replicating them to all followers.


Previous changes from v0.5.0.0

  • 0.5.0.0

    🔋 Feature: Client write requests are now validated by the leader before being
    🌲 written to its log using the functions from the RaftStateMachine and
    🌲 RaftStateMachinePure typeclasses; Followers do not re-validate the log
    entry when they receive the entry from the leader.

    🔋 Feature: Add nix-build and nix-shell support for use with the nix package
    manager.

    API change: Added a client request to query a raft node's metrics.

    API change: Added preprocessCmd function to the RaftStateMachine
    typeclass for implementations where the leader should add data to state
    🌲 machine commands before creating the log entry.

    API change: The clientSendX family of functions now take a ClientReq
    value as an argument instead of a fully formed ClientRequest value, such
    that the known ClientId is used to construct the ClientRequest value
    instead of users having to supply it themselves.

    API change: The RaftStateMachinePureError sm v type family from the
    RaftStateMachinePure typeclass must now have both a Show and a
    Serialize instance.

    API change: Client write requests now have the potential of returning a
    ClientWriteRespFail signifying a failure during the validation of the
    ⚡️ request state machine update.

    API change: The RaftStateMachine typeclass now has a function
    preprocessCmd for applications that need the leader to manipulate the
    🌲 command before it is made into a log entry and applied to the state machine.

    ✅ Tests: Factor out common test functionality and reorganize test files.

    ✅ Tests: Added more comprehensive concurrency tests.

    🐛 Bug Fix: When running networks of size 2, 'incrCommitIndex' will no longer run
    in an infinite loop when incrementing the leader's commit to the correct N.

    🐛 Bug Fix: When an invalid client request is submitted, the leader appropriately
    responds with a failure response and handles the next event as expected.

    🐛 Bug Fix: Correctly construct the Append Entries RPC data when handling a
    client read request as the leader.

    🐛 Bug Fix: Candidates now transition to followers if the term in an Append
    Entries RPC is >= to their current term.