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.