All Versions
14
Latest Version
0.6
Avg Release Cycle
7 days
Latest Release
1772 days ago

Changelog History
Page 1

  • v0.6 Changes

    June 13, 2019

    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.

  • v0.6.0.0 Changes

    • ๐Ÿ”‹ 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.

  • v0.5.0.0 Changes

    March 15, 2019

    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.

  • v0.4.1.0 Changes

    February 12, 2019

    0.4.1.0

    • ๐Ÿ‘Œ Improvement: Users can now supply an existing logging function to log internal
      ๐Ÿ”Š raft node logs, useful for integration into existing applications.
    • ๐Ÿ‘Œ Improvement: The example instances for RaftClientSend and
      RaftClientRecv using unix sockets no longer need to fork a server to handle
      responses from the raft node; the response is sent on the same socket the
      client opens while sending the request.
  • v0.4.0.0 Changes

    February 08, 2019
    • API change: MonadRaftAsync is now MonadRaftFork, with a simpler API
  • v0.3.0.0 Changes

    February 07, 2019

    ๐Ÿš€ 0.3.0.0 Release Notes

    • API change: runRaftNode now requires the monad it runs in to provide an
      instance of the MonadRaftAsync and MonadRaftChan in the Raft.Monad
      module in lieu of the previously necessary MonadConc instance.
    • ๐Ÿšš API change: Removed the MonadConc constraint on all example monad
      transformers and implemented inherited MonadRaftChan and MonadRaftAsync
      instances
    • ๐Ÿšš API change: Removed the MonadConc const
    • ๐Ÿšš API change: Renamed the old Raft.Monad module to Raft.Transtion and moved the
      RaftT monad transformer from Raft.hs to the Raft.Monad module
    • ๐Ÿ‘Œ Improvement: Rework example monad RaftExampleT for simplicity
  • v0.2.1 Changes

    February 07, 2019

    ๐Ÿš€ 0.2.1 Release

    • ๐Ÿ›  Fix extra-src-files to fix Stackage compilation.
  • v0.2 Changes

    February 07, 2019

    0.2.0.0

    • ๐Ÿ”‹ Feature: Client requests are now cached by the current leader such that duplicate
      client requests are not serviced
    • ๐Ÿ› Bug Fix: Fix issue in concurrent timer not resetting properly when the timeout
      was set to values under 500ms
    • ๐Ÿ”‹ Feature: Client read requests can now query entries by index or range of
      indices
    • ๐Ÿ‘Œ Improvement: Raft nodes now only write to disk if the state changes during
      handling of events
    • ๐Ÿ”‹ Feature: Users can now specify what severity of log messages should be logged
    • ๐Ÿ› Bug Fix: Receiving all data from a socket in the RaftSocketT monad
      transformer RaftRecvX typeclass instances inducing a deadlock has been
      rewritten
    • ๐Ÿ”‹ Feature: A PostgreSQL backend has been added for storage of log entries
  • v0.2.0.0 Changes

    • ๐Ÿ”‹ Feature: Client requests are now cached by the current leader such that duplicate client requests are not serviced
    • ๐Ÿ› Bug Fix: Fix issue in concurrent timer not resetting properly when the timeout was set to values under 500ms
    • ๐Ÿ”‹ Feature: Client read requests can now query entries by index or range of indices
    • ๐Ÿ‘Œ Improvement: Raft nodes now only write to disk if the state changes during handling of events
    • ๐Ÿ”‹ Feature: Users can now specify what severity of log messages should be logged
    • ๐Ÿ› Bug Fix: Receiving all data from a socket in the RaftSocketT monad transformer RaftRecvX typeclass instances inducing a deadlock has been rewritten
    • ๐Ÿ”‹ Feature: A PostgreSQL backend has been added for storage of log entries
  • v0.1.2.0 Changes

    • โž• Added a heartbeat broadcast by leader on read requests from client to ensure that the node is leader before responding to client
    • ๐ŸŒฒ Each log entry is now linked by sha256 hash to the log entry immediately preceding it
    • ๐Ÿ›  Fixed bug where the last log entry was not being read from disk before starting the main event loop
    • โž• Added quickcheck-state-machine tests for black-box testing of the raft-example client program