Changelog for libraft-0.5.0.0
Changelog for raft
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
RaftStateMachineandRaftStateMachinePuretypeclasses; Followers do not re-validate the log entry when they receive the entry from the leader. -
Feature: Add
nix-buildandnix-shellsupport for use with the nix package manager. -
API change: Added a client request to query a raft node's metrics.
-
API change: Added
preprocessCmdfunction to theRaftStateMachinetypeclass for implementations where the leader should add data to state machine commands before creating the log entry. -
API change: The
clientSendXfamily of functions now take aClientReqvalue as an argument instead of a fully formedClientRequestvalue, such that the knownClientIdis used to construct theClientRequestvalue instead of users having to supply it themselves. -
API change: The
RaftStateMachinePureError sm vtype family from theRaftStateMachinePuretypeclass must now have both aShowand aSerializeinstance. -
API change: Client write requests now have the potential of returning a
ClientWriteRespFailsignifying a failure during the validation of the request state machine update. -
API change: The
RaftStateMachinetypeclass now has a functionpreprocessCmdfor 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.
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
RaftClientSendandRaftClientRecvusing 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.
0.4.0.0
- API change:
MonadRaftAsyncis nowMonadRaftFork, with a simpler API
0.3.0.0
- API change:
runRaftNodenow requires the monad it runs in to provide an instance of theMonadRaftAsyncandMonadRaftChanin theRaft.Monadmodule in lieu of the previously necessaryMonadConcinstance. - API change: Removed the
MonadConcconstraint on all example monad transformers and implemented inheritedMonadRaftChanandMonadRaftAsyncinstances - API change: Removed the
MonadConcconst - API change: Renamed the old
Raft.Monadmodule toRaft.Transtionand moved theRaftTmonad transformer fromRaft.hsto theRaft.Monadmodule - Improvement: Rework example monad
RaftExampleTfor simplicity
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
0.1.2.0
- 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
0.1.1.0
- Fixed MonadFail constraints for GHC 8.6
0.1.0.0
- Initial release.