libraft-0.5.0.0: Raft consensus algorithm

Safe HaskellNone
LanguageHaskell2010

Examples.Raft.Socket.Node

Documentation

data ResponseSignal sm v Source #

Constructors

OkResponse (ClientResponse sm v)

we managed to write a valid response to the TMVar

DeadResponse

if we get overlapping requests coming in with the same client id, we "kill" one of them

data NodeSocketEnv sm v Source #

Constructors

NodeSocketEnv 

Fields

  • nsMsgQueue :: TChan (RPCMessage v)

    Queue of RPC messages to be processed by event handlers

  • nsClientReqQueue :: TChan (ClientRequest v)

    Queue of client request messages to be processed by event handlers

  • nsClientReqResps :: TVar (Map ClientId (TMVar (ResponseSignal sm v)))

    Map of variables to which responses to a request are written. N.B.: this assumes a client id uniquely identifies a request; A client will never send a request without having either 1) given up on the a previous request because of a timeout, or 2) received a response to each previous request issued.

Instances
Monad m => MonadReader (NodeSocketEnv sm v) (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Methods

ask :: RaftSocketT sm v m (NodeSocketEnv sm v) #

local :: (NodeSocketEnv sm v -> NodeSocketEnv sm v) -> RaftSocketT sm v m a -> RaftSocketT sm v m a #

reader :: (NodeSocketEnv sm v -> a) -> RaftSocketT sm v m a #

newtype RaftSocketT sm v m a Source #

Constructors

RaftSocketT 

Fields

Instances
MonadRaftChan v m => MonadRaftChan v (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Associated Types

type RaftEventChan v (RaftSocketT sm v m) :: Type Source #

MonadTrans (RaftSocketT sm v) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Methods

lift :: Monad m => m a -> RaftSocketT sm v m a #

Monad m => MonadReader (NodeSocketEnv sm v) (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Methods

ask :: RaftSocketT sm v m (NodeSocketEnv sm v) #

local :: (NodeSocketEnv sm v -> NodeSocketEnv sm v) -> RaftSocketT sm v m a -> RaftSocketT sm v m a #

reader :: (NodeSocketEnv sm v -> a) -> RaftSocketT sm v m a #

Monad m => Monad (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Methods

(>>=) :: RaftSocketT sm v m a -> (a -> RaftSocketT sm v m b) -> RaftSocketT sm v m b #

(>>) :: RaftSocketT sm v m a -> RaftSocketT sm v m b -> RaftSocketT sm v m b #

return :: a -> RaftSocketT sm v m a #

fail :: String -> RaftSocketT sm v m a #

Functor m => Functor (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Methods

fmap :: (a -> b) -> RaftSocketT sm v m a -> RaftSocketT sm v m b #

(<$) :: a -> RaftSocketT sm v m b -> RaftSocketT sm v m a #

MonadFail m => MonadFail (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Methods

fail :: String -> RaftSocketT sm v m a #

Applicative m => Applicative (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Methods

pure :: a -> RaftSocketT sm v m a #

(<*>) :: RaftSocketT sm v m (a -> b) -> RaftSocketT sm v m a -> RaftSocketT sm v m b #

liftA2 :: (a -> b -> c) -> RaftSocketT sm v m a -> RaftSocketT sm v m b -> RaftSocketT sm v m c #

(*>) :: RaftSocketT sm v m a -> RaftSocketT sm v m b -> RaftSocketT sm v m b #

(<*) :: RaftSocketT sm v m a -> RaftSocketT sm v m b -> RaftSocketT sm v m a #

Alternative m => Alternative (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Methods

empty :: RaftSocketT sm v m a #

(<|>) :: RaftSocketT sm v m a -> RaftSocketT sm v m a -> RaftSocketT sm v m a #

some :: RaftSocketT sm v m a -> RaftSocketT sm v m [a] #

many :: RaftSocketT sm v m a -> RaftSocketT sm v m [a] #

MonadPlus m => MonadPlus (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Methods

mzero :: RaftSocketT sm v m a #

mplus :: RaftSocketT sm v m a -> RaftSocketT sm v m a -> RaftSocketT sm v m a #

MonadIO m => MonadIO (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Methods

liftIO :: IO a -> RaftSocketT sm v m a #

MonadThrow m => MonadThrow (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Methods

throwM :: Exception e => e -> RaftSocketT sm v m a #

MonadCatch m => MonadCatch (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Methods

catch :: Exception e => RaftSocketT sm v m a -> (e -> RaftSocketT sm v m a) -> RaftSocketT sm v m a #

MonadMask m => MonadMask (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Methods

mask :: ((forall a. RaftSocketT sm v m a -> RaftSocketT sm v m a) -> RaftSocketT sm v m b) -> RaftSocketT sm v m b #

uninterruptibleMask :: ((forall a. RaftSocketT sm v m a -> RaftSocketT sm v m a) -> RaftSocketT sm v m b) -> RaftSocketT sm v m b #

generalBracket :: RaftSocketT sm v m a -> (a -> ExitCase b -> RaftSocketT sm v m c) -> (a -> RaftSocketT sm v m b) -> RaftSocketT sm v m (b, c) #

(MonadIO m, RaftPersist m) => RaftPersist (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Associated Types

type RaftPersistError (RaftSocketT sm v m) :: Type Source #

(MonadIO m, MonadRaftFork m) => MonadRaftFork (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Associated Types

type RaftThreadId (RaftSocketT sm v m) :: Type Source #

Methods

raftFork :: RaftThreadRole -> RaftSocketT sm v m () -> RaftSocketT sm v m (RaftThreadId (RaftSocketT sm v m)) Source #

RaftReadLog m v => RaftReadLog (RaftSocketT sm v m) v Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Associated Types

type RaftReadLogError (RaftSocketT sm v m) :: Type Source #

RaftDeleteLog m v => RaftDeleteLog (RaftSocketT sm v m) v Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Associated Types

type RaftDeleteLogError (RaftSocketT sm v m) :: Type Source #

RaftWriteLog m v => RaftWriteLog (RaftSocketT sm v m) v Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Associated Types

type RaftWriteLogError (RaftSocketT sm v m) :: Type Source #

(MonadIO m, RaftInitLog m v) => RaftInitLog (RaftSocketT sm v m) v Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Associated Types

type RaftInitLogError (RaftSocketT sm v m) :: Type Source #

(MonadIO m, Show v) => RaftRecvRPC (RaftSocketT sm v m) v Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Associated Types

type RaftRecvRPCError (RaftSocketT sm v m) v :: Type Source #

(MonadCatch m, MonadMask m, MonadIO m, Serialize v, Show v) => RaftSendRPC (RaftSocketT sm v m) v Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Methods

sendRPC :: NodeId -> RPCMessage v -> RaftSocketT sm v m () Source #

(MonadIO m, Serialize v) => RaftRecvClient (RaftSocketT sm v m) v Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Associated Types

type RaftRecvClientError (RaftSocketT sm v m) v :: Type Source #

RaftStateMachine m sm v => RaftStateMachine (RaftSocketT sm v m) sm v Source # 
Instance details

Defined in Examples.Raft.Socket.Node

(RaftStateMachinePure sm v, MonadMask m, MonadCatch m, MonadIO m, Serialize sm, Serialize v) => RaftSendClient (RaftSocketT sm v m) sm v Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Methods

sendClient :: ClientId -> ClientResponse sm v -> RaftSocketT sm v m () Source #

type RaftEventChan v (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

type RaftPersistError (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

type RaftReadLogError (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

type RaftDeleteLogError (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

type RaftWriteLogError (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

type RaftInitLogError (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

type RaftThreadId (RaftSocketT sm v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

type RaftRecvRPCError (RaftSocketT sm v m) v Source # 
Instance details

Defined in Examples.Raft.Socket.Node

type RaftRecvClientError (RaftSocketT sm v m) v Source # 
Instance details

Defined in Examples.Raft.Socket.Node

runRaftSocketT :: MonadIO m => NodeSocketEnv sm v -> RaftSocketT sm v m a -> m a Source #