Changelog History
Page 1
-
v0.6 Changes
June 13, 20190.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 theRaftT
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, 20190.5.0.0
๐ Feature: Client write requests are now validated by the leader before being
๐ฒ written to its log using the functions from theRaftStateMachine
and
๐ฒRaftStateMachinePure
typeclasses; Followers do not re-validate the log
entry when they receive the entry from the leader.๐ Feature: Add
nix-build
andnix-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 theRaftStateMachine
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 aClientReq
value as an argument instead of a fully formedClientRequest
value, such
that the knownClientId
is used to construct theClientRequest
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 aShow
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, 20190.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.
- ๐ Improvement: Users can now supply an existing logging function to log internal
-
v0.4.0.0 Changes
February 08, 2019- API change:
MonadRaftAsync
is nowMonadRaftFork
, with a simpler API
- API change:
-
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 theMonadRaftAsync
andMonadRaftChan
in theRaft.Monad
module in lieu of the previously necessaryMonadConc
instance. - ๐ API change: Removed the
MonadConc
constraint on all example monad
transformers and implemented inheritedMonadRaftChan
andMonadRaftAsync
instances - ๐ API change: Removed the
MonadConc
const - ๐ API change: Renamed the old
Raft.Monad
module toRaft.Transtion
and moved the
RaftT
monad transformer fromRaft.hs
to theRaft.Monad
module - ๐ Improvement: Rework example monad
RaftExampleT
for simplicity
- API change:
-
v0.2.1 Changes
February 07, 2019๐ 0.2.1 Release
- ๐ Fix
extra-src-files
to fix Stackage compilation.
- ๐ Fix
-
v0.2 Changes
February 07, 20190.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
- ๐ Feature: Client requests are now cached by the current leader such that duplicate
-
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