libraft-0.5.0.0: Raft consensus algorithm

Safe HaskellNone
LanguageHaskell2010

Raft.Client

Contents

Synopsis

Raft Interface

class RaftStateMachinePure sm v => RaftSendClient m sm v where Source #

Interface for Raft nodes to send messages to clients

Methods

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

Instances
(Monad m, RaftSendClient m sm v) => RaftSendClient (RaftPostgresT m) sm v Source # 
Instance details

Defined in Raft.Log.PostgreSQL

(MonadIO m, MonadMask m, RaftSendClient m sm v) => RaftSendClient (RaftPersistFileStoreT m) sm v Source # 
Instance details

Defined in Examples.Raft.FileStore.Persistent

(Monad m, RaftSendClient m sm v) => RaftSendClient (RaftLogFileStoreT m) sm v Source # 
Instance details

Defined in Examples.Raft.FileStore.Log

(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 #

class Show (RaftRecvClientError m v) => RaftRecvClient m v where Source #

Interface for Raft nodes to receive messages from clients

Associated Types

type RaftRecvClientError m v Source #

newtype SerialNum Source #

Constructors

SerialNum Natural 
Instances
Enum SerialNum Source # 
Instance details

Defined in Raft.Types

Eq SerialNum Source # 
Instance details

Defined in Raft.Types

Num SerialNum Source # 
Instance details

Defined in Raft.Types

Ord SerialNum Source # 
Instance details

Defined in Raft.Types

Read SerialNum Source # 
Instance details

Defined in Raft.Types

Show SerialNum Source # 
Instance details

Defined in Raft.Types

Generic SerialNum Source # 
Instance details

Defined in Raft.Types

Associated Types

type Rep SerialNum :: Type -> Type #

Serialize SerialNum Source # 
Instance details

Defined in Raft.Types

type Rep SerialNum Source # 
Instance details

Defined in Raft.Types

type Rep SerialNum = D1 (MetaData "SerialNum" "Raft.Types" "libraft-0.5.0.0-J9sQlo4v2xjSwCkwompQR" True) (C1 (MetaCons "SerialNum" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Natural)))

Client Requests

data ClientRequest v Source #

Representation of a client request coupled with the client id

Constructors

ClientRequest ClientId (ClientReq v) 
Instances
Show v => Show (ClientRequest v) Source # 
Instance details

Defined in Raft.Client

Generic (ClientRequest v) Source # 
Instance details

Defined in Raft.Client

Associated Types

type Rep (ClientRequest v) :: Type -> Type #

Serialize v => Serialize (ClientRequest v) Source # 
Instance details

Defined in Raft.Client

type Rep (ClientRequest v) Source # 
Instance details

Defined in Raft.Client

type Rep (ClientRequest v) = D1 (MetaData "ClientRequest" "Raft.Client" "libraft-0.5.0.0-J9sQlo4v2xjSwCkwompQR" False) (C1 (MetaCons "ClientRequest" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 ClientId) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (ClientReq v))))

data ClientReq v Source #

Representation of a client request

Constructors

ClientReadReq ClientReadReq

Request the latest state of the state machine

ClientWriteReq (ClientWriteReq v)

Write a command

ClientMetricsReq ClientMetricsReq

Request the metrics of a raft node

Instances
Show v => Show (ClientReq v) Source # 
Instance details

Defined in Raft.Client

Generic (ClientReq v) Source # 
Instance details

Defined in Raft.Client

Associated Types

type Rep (ClientReq v) :: Type -> Type #

Methods

from :: ClientReq v -> Rep (ClientReq v) x #

to :: Rep (ClientReq v) x -> ClientReq v #

Serialize v => Serialize (ClientReq v) Source # 
Instance details

Defined in Raft.Client

Methods

put :: Putter (ClientReq v) #

get :: Get (ClientReq v) #

type Rep (ClientReq v) Source # 
Instance details

Defined in Raft.Client

class ClientReqType a v Source #

Typeclass to make it easier to write polymorphic functions over ClientReq types

Instances
ClientReqType ClientMetricsReq v Source # 
Instance details

Defined in Raft.Client

ClientReqType ClientReadReq v Source # 
Instance details

Defined in Raft.Client

ClientReqType (ClientWriteReq v) v Source # 
Instance details

Defined in Raft.Client

data ClientReadReq Source #

Instances
Show ClientReadReq Source # 
Instance details

Defined in Raft.Client

Generic ClientReadReq Source # 
Instance details

Defined in Raft.Client

Associated Types

type Rep ClientReadReq :: Type -> Type #

Serialize ClientReadReq Source # 
Instance details

Defined in Raft.Client

ClientReqType ClientReadReq v Source # 
Instance details

Defined in Raft.Client

type Rep ClientReadReq Source # 
Instance details

Defined in Raft.Client

type Rep ClientReadReq = D1 (MetaData "ClientReadReq" "Raft.Client" "libraft-0.5.0.0-J9sQlo4v2xjSwCkwompQR" False) (C1 (MetaCons "ClientReadEntries" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 ReadEntriesSpec)) :+: C1 (MetaCons "ClientReadStateMachine" PrefixI False) (U1 :: Type -> Type))

data ReadEntriesSpec Source #

Instances
Show ReadEntriesSpec Source # 
Instance details

Defined in Raft.Log

Generic ReadEntriesSpec Source # 
Instance details

Defined in Raft.Log

Associated Types

type Rep ReadEntriesSpec :: Type -> Type #

Serialize ReadEntriesSpec Source # 
Instance details

Defined in Raft.Log

type Rep ReadEntriesSpec Source # 
Instance details

Defined in Raft.Log

data ClientWriteReq v Source #

Constructors

ClientCmdReq SerialNum v

Issue a command to update the state machine

Instances
Show v => Show (ClientWriteReq v) Source # 
Instance details

Defined in Raft.Client

Generic (ClientWriteReq v) Source # 
Instance details

Defined in Raft.Client

Associated Types

type Rep (ClientWriteReq v) :: Type -> Type #

Serialize v => Serialize (ClientWriteReq v) Source # 
Instance details

Defined in Raft.Client

ClientReqType (ClientWriteReq v) v Source # 
Instance details

Defined in Raft.Client

type Rep (ClientWriteReq v) Source # 
Instance details

Defined in Raft.Client

type Rep (ClientWriteReq v) = D1 (MetaData "ClientWriteReq" "Raft.Client" "libraft-0.5.0.0-J9sQlo4v2xjSwCkwompQR" False) (C1 (MetaCons "ClientCmdReq" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 SerialNum) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 v)))

data ClientMetricsReq Source #

Constructors

ClientAllMetricsReq 
Instances
Show ClientMetricsReq Source # 
Instance details

Defined in Raft.Client

Generic ClientMetricsReq Source # 
Instance details

Defined in Raft.Client

Associated Types

type Rep ClientMetricsReq :: Type -> Type #

Serialize ClientMetricsReq Source # 
Instance details

Defined in Raft.Client

ClientReqType ClientMetricsReq v Source # 
Instance details

Defined in Raft.Client

type Rep ClientMetricsReq Source # 
Instance details

Defined in Raft.Client

type Rep ClientMetricsReq = D1 (MetaData "ClientMetricsReq" "Raft.Client" "libraft-0.5.0.0-J9sQlo4v2xjSwCkwompQR" False) (C1 (MetaCons "ClientAllMetricsReq" PrefixI False) (U1 :: Type -> Type))

Client Responses

data ClientResponse sm v Source #

The datatype sent back to the client as an actual response

Constructors

ClientReadResponse (ClientReadResp sm v)

Respond with the latest state of the state machine.

ClientWriteResponse (ClientWriteResp sm v)

Respond with the index of the entry appended to the log

ClientRedirectResponse ClientRedirResp

Respond with the node id of the current leader

ClientMetricsResponse ClientMetricsResp

Respond with the node's current metrics

Instances
(Show sm, Show v, Show (ClientWriteResp sm v)) => Show (ClientResponse sm v) Source # 
Instance details

Defined in Raft.Client

Generic (ClientResponse sm v) Source # 
Instance details

Defined in Raft.Client

Associated Types

type Rep (ClientResponse sm v) :: Type -> Type #

Methods

from :: ClientResponse sm v -> Rep (ClientResponse sm v) x #

to :: Rep (ClientResponse sm v) x -> ClientResponse sm v #

(Serialize sm, Serialize v, Serialize (ClientWriteResp sm v)) => Serialize (ClientResponse sm v) Source # 
Instance details

Defined in Raft.Client

Methods

put :: Putter (ClientResponse sm v) #

get :: Get (ClientResponse sm v) #

type Rep (ClientResponse sm v) Source # 
Instance details

Defined in Raft.Client

data ClientRespSpec sm v Source #

Specification for the data inside a ClientResponse

Instances
(Show sm, Show v, Show (RaftStateMachinePureError sm v)) => Show (ClientRespSpec sm v) Source # 
Instance details

Defined in Raft.Client

Generic (ClientRespSpec sm v) Source # 
Instance details

Defined in Raft.Client

Associated Types

type Rep (ClientRespSpec sm v) :: Type -> Type #

Methods

from :: ClientRespSpec sm v -> Rep (ClientRespSpec sm v) x #

to :: Rep (ClientRespSpec sm v) x -> ClientRespSpec sm v #

(Serialize sm, Serialize v, Serialize (RaftStateMachinePureError sm v)) => Serialize (ClientRespSpec sm v) Source # 
Instance details

Defined in Raft.Client

Methods

put :: Putter (ClientRespSpec sm v) #

get :: Get (ClientRespSpec sm v) #

type Rep (ClientRespSpec sm v) Source # 
Instance details

Defined in Raft.Client

data ClientReadRespSpec sm Source #

Instances
Show sm => Show (ClientReadRespSpec sm) Source # 
Instance details

Defined in Raft.Client

Generic (ClientReadRespSpec sm) Source # 
Instance details

Defined in Raft.Client

Associated Types

type Rep (ClientReadRespSpec sm) :: Type -> Type #

Serialize sm => Serialize (ClientReadRespSpec sm) Source # 
Instance details

Defined in Raft.Client

type Rep (ClientReadRespSpec sm) Source # 
Instance details

Defined in Raft.Client

type Rep (ClientReadRespSpec sm) = D1 (MetaData "ClientReadRespSpec" "Raft.Client" "libraft-0.5.0.0-J9sQlo4v2xjSwCkwompQR" False) (C1 (MetaCons "ClientReadRespSpecEntries" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 ReadEntriesSpec)) :+: C1 (MetaCons "ClientReadRespSpecStateMachine" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 sm)))

data ClientWriteRespSpec sm v Source #

Instances
(Show sm, Show v, Show (RaftStateMachinePureError sm v)) => Show (ClientWriteRespSpec sm v) Source # 
Instance details

Defined in Raft.Client

Generic (ClientWriteRespSpec sm v) Source # 
Instance details

Defined in Raft.Client

Associated Types

type Rep (ClientWriteRespSpec sm v) :: Type -> Type #

(Serialize sm, Serialize v, Serialize (RaftStateMachinePureError sm v)) => Serialize (ClientWriteRespSpec sm v) Source # 
Instance details

Defined in Raft.Client

type Rep (ClientWriteRespSpec sm v) Source # 
Instance details

Defined in Raft.Client

data ClientReadResp sm v Source #

Representation of a read response to a client

Instances
(Show sm, Show v) => Show (ClientReadResp sm v) Source # 
Instance details

Defined in Raft.Client

Generic (ClientReadResp sm v) Source # 
Instance details

Defined in Raft.Client

Associated Types

type Rep (ClientReadResp sm v) :: Type -> Type #

Methods

from :: ClientReadResp sm v -> Rep (ClientReadResp sm v) x #

to :: Rep (ClientReadResp sm v) x -> ClientReadResp sm v #

(Serialize sm, Serialize v) => Serialize (ClientReadResp sm v) Source # 
Instance details

Defined in Raft.Client

Methods

put :: Putter (ClientReadResp sm v) #

get :: Get (ClientReadResp sm v) #

type Rep (ClientReadResp sm v) Source # 
Instance details

Defined in Raft.Client

type Rep (ClientReadResp sm v) = D1 (MetaData "ClientReadResp" "Raft.Client" "libraft-0.5.0.0-J9sQlo4v2xjSwCkwompQR" False) (C1 (MetaCons "ClientReadRespStateMachine" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 sm)) :+: (C1 (MetaCons "ClientReadRespEntry" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Entry v))) :+: C1 (MetaCons "ClientReadRespEntries" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Entries v)))))

data ClientWriteResp sm v Source #

Representation of a write response to a client

Constructors

ClientWriteRespSuccess Index SerialNum

Index of the entry appended to the log due to the previous client request

ClientWriteRespFail SerialNum (RaftStateMachinePureError sm v) 
Instances
(Show sm, Show v, Show (RaftStateMachinePureError sm v)) => Show (ClientWriteResp sm v) Source # 
Instance details

Defined in Raft.Client

Generic (ClientWriteResp sm v) Source # 
Instance details

Defined in Raft.Client

Associated Types

type Rep (ClientWriteResp sm v) :: Type -> Type #

Methods

from :: ClientWriteResp sm v -> Rep (ClientWriteResp sm v) x #

to :: Rep (ClientWriteResp sm v) x -> ClientWriteResp sm v #

(Serialize sm, Serialize v, Serialize (RaftStateMachinePureError sm v)) => Serialize (ClientWriteResp sm v) Source # 
Instance details

Defined in Raft.Client

Methods

put :: Putter (ClientWriteResp sm v) #

get :: Get (ClientWriteResp sm v) #

type Rep (ClientWriteResp sm v) Source # 
Instance details

Defined in Raft.Client

data ClientRedirResp Source #

Representation of a redirect response to a client

Instances
Show ClientRedirResp Source # 
Instance details

Defined in Raft.Client

Generic ClientRedirResp Source # 
Instance details

Defined in Raft.Client

Associated Types

type Rep ClientRedirResp :: Type -> Type #

Serialize ClientRedirResp Source # 
Instance details

Defined in Raft.Client

type Rep ClientRedirResp Source # 
Instance details

Defined in Raft.Client

type Rep ClientRedirResp = D1 (MetaData "ClientRedirResp" "Raft.Client" "libraft-0.5.0.0-J9sQlo4v2xjSwCkwompQR" False) (C1 (MetaCons "ClientRedirResp" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 CurrentLeader)))

data ClientMetricsResp Source #

Instances
Show ClientMetricsResp Source # 
Instance details

Defined in Raft.Client

Generic ClientMetricsResp Source # 
Instance details

Defined in Raft.Client

Associated Types

type Rep ClientMetricsResp :: Type -> Type #

Serialize ClientMetricsResp Source # 
Instance details

Defined in Raft.Client

type Rep ClientMetricsResp Source # 
Instance details

Defined in Raft.Client

type Rep ClientMetricsResp = D1 (MetaData "ClientMetricsResp" "Raft.Client" "libraft-0.5.0.0-J9sQlo4v2xjSwCkwompQR" False) (C1 (MetaCons "ClientMetricsResp" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 RaftNodeMetrics)))

Client Interface

class Monad m => RaftClientSend m v where Source #

Associated Types

type RaftClientSendError m v Source #

class Monad m => RaftClientRecv m sm v | m sm -> v where Source #

Associated Types

type RaftClientRecvError m sm Source #

Instances
RaftClientRecv m s v => RaftClientRecv (RaftClientT s v m) s v Source # 
Instance details

Defined in Raft.Client

Associated Types

type RaftClientRecvError (RaftClientT s v m) s :: Type Source #

(Serialize s, Serialize v, MonadIO m) => RaftClientRecv (RaftClientRespChanT s v m) s v Source # 
Instance details

Defined in Examples.Raft.Socket.Client

Associated Types

type RaftClientRecvError (RaftClientRespChanT s v m) s :: Type Source #

data RaftClientState Source #

Each client may have at most one command outstanding at a time and commands must be dispatched in serial number order.

Instances
Monad m => MonadState RaftClientState (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

data RaftClientEnv Source #

Constructors

RaftClientEnv 
Instances
Monad m => MonadReader RaftClientEnv (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

Methods

ask :: RaftClientT s v m RaftClientEnv #

local :: (RaftClientEnv -> RaftClientEnv) -> RaftClientT s v m a -> RaftClientT s v m a #

reader :: (RaftClientEnv -> a) -> RaftClientT s v m a #

data RaftClientT s v m a Source #

Instances
MonadBase IO m => MonadBase IO (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

Methods

liftBase :: IO α -> RaftClientT s v m α #

MonadBaseControl IO m => MonadBaseControl IO (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

Associated Types

type StM (RaftClientT s v m) a :: Type #

Methods

liftBaseWith :: (RunInBase (RaftClientT s v m) IO -> IO a) -> RaftClientT s v m a #

restoreM :: StM (RaftClientT s v m) a -> RaftClientT s v m a #

Monad m => MonadState RaftClientState (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

Monad m => MonadReader RaftClientEnv (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

Methods

ask :: RaftClientT s v m RaftClientEnv #

local :: (RaftClientEnv -> RaftClientEnv) -> RaftClientT s v m a -> RaftClientT s v m a #

reader :: (RaftClientEnv -> a) -> RaftClientT s v m a #

MonadTrans (RaftClientT s v) Source # 
Instance details

Defined in Raft.Client

Methods

lift :: Monad m => m a -> RaftClientT s v m a #

MonadTransControl (RaftClientT s v) Source # 
Instance details

Defined in Raft.Client

Associated Types

type StT (RaftClientT s v) a :: Type #

Methods

liftWith :: Monad m => (Run (RaftClientT s v) -> m a) -> RaftClientT s v m a #

restoreT :: Monad m => m (StT (RaftClientT s v) a) -> RaftClientT s v m a #

Monad m => Monad (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

Methods

(>>=) :: RaftClientT s v m a -> (a -> RaftClientT s v m b) -> RaftClientT s v m b #

(>>) :: RaftClientT s v m a -> RaftClientT s v m b -> RaftClientT s v m b #

return :: a -> RaftClientT s v m a #

fail :: String -> RaftClientT s v m a #

Functor m => Functor (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

Methods

fmap :: (a -> b) -> RaftClientT s v m a -> RaftClientT s v m b #

(<$) :: a -> RaftClientT s v m b -> RaftClientT s v m a #

MonadFail m => MonadFail (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

Methods

fail :: String -> RaftClientT s v m a #

Monad m => Applicative (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

Methods

pure :: a -> RaftClientT s v m a #

(<*>) :: RaftClientT s v m (a -> b) -> RaftClientT s v m a -> RaftClientT s v m b #

liftA2 :: (a -> b -> c) -> RaftClientT s v m a -> RaftClientT s v m b -> RaftClientT s v m c #

(*>) :: RaftClientT s v m a -> RaftClientT s v m b -> RaftClientT s v m b #

(<*) :: RaftClientT s v m a -> RaftClientT s v m b -> RaftClientT s v m a #

MonadPlus m => Alternative (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

Methods

empty :: RaftClientT s v m a #

(<|>) :: RaftClientT s v m a -> RaftClientT s v m a -> RaftClientT s v m a #

some :: RaftClientT s v m a -> RaftClientT s v m [a] #

many :: RaftClientT s v m a -> RaftClientT s v m [a] #

MonadPlus m => MonadPlus (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

Methods

mzero :: RaftClientT s v m a #

mplus :: RaftClientT s v m a -> RaftClientT s v m a -> RaftClientT s v m a #

MonadIO m => MonadIO (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

Methods

liftIO :: IO a -> RaftClientT s v m a #

MonadThrow m => MonadThrow (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

Methods

throwM :: Exception e => e -> RaftClientT s v m a #

MonadCatch m => MonadCatch (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

Methods

catch :: Exception e => RaftClientT s v m a -> (e -> RaftClientT s v m a) -> RaftClientT s v m a #

MonadMask m => MonadMask (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

Methods

mask :: ((forall a. RaftClientT s v m a -> RaftClientT s v m a) -> RaftClientT s v m b) -> RaftClientT s v m b #

uninterruptibleMask :: ((forall a. RaftClientT s v m a -> RaftClientT s v m a) -> RaftClientT s v m b) -> RaftClientT s v m b #

generalBracket :: RaftClientT s v m a -> (a -> ExitCase b -> RaftClientT s v m c) -> (a -> RaftClientT s v m b) -> RaftClientT s v m (b, c) #

MonadException m => MonadException (RaftClientT s v m) Source # 
Instance details

Defined in Raft.Client

Methods

controlIO :: (RunIO (RaftClientT s v m) -> IO (RaftClientT s v m a)) -> RaftClientT s v m a #

RaftClientSend m v => RaftClientSend (RaftClientT s v m) v Source # 
Instance details

Defined in Raft.Client

Associated Types

type RaftClientSendError (RaftClientT s v m) v :: Type Source #

RaftClientRecv m s v => RaftClientRecv (RaftClientT s v m) s v Source # 
Instance details

Defined in Raft.Client

Associated Types

type RaftClientRecvError (RaftClientT s v m) s :: Type Source #

type StT (RaftClientT s v) a Source # 
Instance details

Defined in Raft.Client

type StM (RaftClientT s v m) a Source # 
Instance details

Defined in Raft.Client

type StM (RaftClientT s v m) a = ComposeSt (RaftClientT s v) m a
type RaftClientRecvError (RaftClientT s v m) s Source # 
Instance details

Defined in Raft.Client

type RaftClientSendError (RaftClientT s v m) v Source # 
Instance details

Defined in Raft.Client

clientRead :: (RaftClientSend m v, RaftClientRecv m s v) => ClientReadReq -> RaftClientT s v m (Either (RaftClientError s v m) (ClientReadResp s v)) Source #

Send a read request to the curent leader and wait for a response

clientReadFrom :: (RaftClientSend m v, RaftClientRecv m s v) => NodeId -> ClientReadReq -> RaftClientT s v m (Either (RaftClientError s v m) (ClientReadResp s v)) Source #

Send a read request to a specific raft node, regardless of leader, and wait for a response.

clientWrite :: (RaftClientSend m v, RaftClientRecv m s v) => v -> RaftClientT s v m (Either (RaftClientError s v m) (ClientWriteResp s v)) Source #

Send a write request to the current leader and wait for a response

clientWriteTo :: (RaftClientSend m v, RaftClientRecv m s v) => NodeId -> v -> RaftClientT s v m (Either (RaftClientError s v m) (ClientWriteResp s v)) Source #

Send a read request to a specific raft node, regardless of leader, and wait for a response.

clientSendRead :: RaftClientSend m v => ClientReadReq -> RaftClientT s v m (Either (RaftClientSendError m v) ()) Source #

Send a read request to the current leader. Nonblocking.

clientSendWrite :: RaftClientSend m v => v -> RaftClientT s v m (Either (RaftClientSendError m v) ()) Source #

Send a write request to the current leader. Nonblocking.

clientSend :: RaftClientSend m v => ClientReq v -> RaftClientT s v m (Either (RaftClientSendError m v) ()) Source #

Send a request to the current leader. Nonblocking.

clientRecv :: RaftClientRecv m s v => RaftClientT s v m (Either (RaftClientRecvError m s) (ClientResponse s v)) Source #

Wait for a response from the current leader. This function handles leader changes and write request serial numbers.

retryOnRedirect :: MonadBaseControl IO m => RaftClientT s v m (Either (RaftClientError s v m) r) -> RaftClientT s v m (Either (RaftClientError s v m) r) Source #

Given a blocking client send/receive, retry if the received value is not expected