| Safe Haskell | None | 
|---|---|
| Language | Haskell2010 | 
Raft.Client
Synopsis
- class RaftStateMachinePure sm v => RaftSendClient m sm v where
- sendClient :: ClientId -> ClientResponse sm v -> m ()
 
 - class Show (RaftRecvClientError m v) => RaftRecvClient m v where
- type RaftRecvClientError m v
 - receiveClient :: m (Either (RaftRecvClientError m v) (ClientRequest v))
 
 - newtype SerialNum = SerialNum Natural
 - data ClientRequest v = ClientRequest ClientId (ClientReq v)
 - data ClientReq v
 - class ClientReqType a v
 - data ClientReadReq
 - data ReadEntriesSpec
 - data ClientWriteReq v = ClientCmdReq SerialNum v
 - data ClientMetricsReq = ClientAllMetricsReq
 - data ClientResponse sm v
 - data ClientRespSpec sm v
 - data ClientReadRespSpec sm
 - data ClientWriteRespSpec sm v
 - data ClientReadResp sm v
 - data ClientWriteResp sm v
 - data ClientRedirResp = ClientRedirResp CurrentLeader
 - data ClientMetricsResp = ClientMetricsResp RaftNodeMetrics
 - class Monad m => RaftClientSend m v where
- type RaftClientSendError m v
 - raftClientSend :: NodeId -> ClientRequest v -> m (Either (RaftClientSendError m v) ())
 
 - class Monad m => RaftClientRecv m sm v | m sm -> v where
- type RaftClientRecvError m sm
 - raftClientRecv :: m (Either (RaftClientRecvError m sm) (ClientResponse sm v))
 
 - data RaftClientState = RaftClientState {}
 - data RaftClientEnv = RaftClientEnv {}
 - initRaftClientState :: Set NodeId -> StdGen -> RaftClientState
 - data RaftClientT s v m a
 - runRaftClientT :: Monad m => RaftClientEnv -> RaftClientState -> RaftClientT s v m a -> m a
 - data RaftClientError s v m where
- RaftClientSendError :: RaftClientSendError m v -> RaftClientError s v m
 - RaftClientRecvError :: RaftClientRecvError m s -> RaftClientError s v m
 - RaftClientTimeout :: Text -> RaftClientError s v m
 - RaftClientUnexpectedReadResp :: ClientReadResp s v -> RaftClientError s v m
 - RaftClientUnexpectedWriteResp :: ClientWriteResp s v -> RaftClientError s v m
 - RaftClientUnexpectedMetricsResp :: ClientMetricsResp -> RaftClientError s v m
 - RaftClientUnexpectedRedirect :: ClientRedirResp -> RaftClientError s v m
 
 - clientRead :: (RaftClientSend m v, RaftClientRecv m s v) => ClientReadReq -> RaftClientT s v m (Either (RaftClientError s v m) (ClientReadResp s v))
 - clientReadFrom :: (RaftClientSend m v, RaftClientRecv m s v) => NodeId -> ClientReadReq -> RaftClientT s v m (Either (RaftClientError s v m) (ClientReadResp s v))
 - clientReadTimeout :: (MonadBaseControl IO m, RaftClientSend m v, RaftClientRecv m s v) => Int -> ClientReadReq -> RaftClientT s v m (Either (RaftClientError s v m) (ClientReadResp s v))
 - clientWrite :: (RaftClientSend m v, RaftClientRecv m s v) => v -> RaftClientT s v m (Either (RaftClientError s v m) (ClientWriteResp s v))
 - clientWriteTo :: (RaftClientSend m v, RaftClientRecv m s v) => NodeId -> v -> RaftClientT s v m (Either (RaftClientError s v m) (ClientWriteResp s v))
 - clientWriteTimeout :: (MonadBaseControl IO m, RaftClientSend m v, RaftClientRecv m s v) => Int -> v -> RaftClientT s v m (Either (RaftClientError s v m) (ClientWriteResp s v))
 - clientQueryNodeMetrics :: (MonadBaseControl IO m, RaftClientSend m v, RaftClientRecv m s v) => NodeId -> RaftClientT s v m (Either (RaftClientError s v m) ClientMetricsResp)
 - clientQueryNodeMetricsTimeout :: (MonadBaseControl IO m, RaftClientSend m v, RaftClientRecv m s v) => Int -> NodeId -> RaftClientT s v m (Either (RaftClientError s v m) ClientMetricsResp)
 - clientSendRead :: RaftClientSend m v => ClientReadReq -> RaftClientT s v m (Either (RaftClientSendError m v) ())
 - clientSendWrite :: RaftClientSend m v => v -> RaftClientT s v m (Either (RaftClientSendError m v) ())
 - clientSendMetricsReqTo :: RaftClientSend m v => NodeId -> RaftClientT s v m (Either (RaftClientSendError m v) ())
 - clientSend :: RaftClientSend m v => ClientReq v -> RaftClientT s v m (Either (RaftClientSendError m v) ())
 - clientRecv :: RaftClientRecv m s v => RaftClientT s v m (Either (RaftClientRecvError m s) (ClientResponse s v))
 - clientTimeout :: (MonadBaseControl IO m, RaftClientSend m v, RaftClientRecv m s v) => Text -> Int -> RaftClientT s v m (Either (RaftClientError s v m) r) -> RaftClientT s v m (Either (RaftClientError s v m) r)
 - retryOnRedirect :: MonadBaseControl IO m => RaftClientT s v m (Either (RaftClientError s v m) r) -> RaftClientT s v m (Either (RaftClientError s v m) r)
 - clientAddNode :: Monad m => NodeId -> RaftClientT s v m ()
 - clientGetNodes :: Monad m => RaftClientT s v m (Set NodeId)
 
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 # | |
Defined in Raft.Log.PostgreSQL Methods sendClient :: ClientId -> ClientResponse sm v -> RaftPostgresT m () Source #  | |
| (MonadIO m, MonadMask m, RaftSendClient m sm v) => RaftSendClient (RaftPersistFileStoreT m) sm v Source # | |
Defined in Examples.Raft.FileStore.Persistent Methods sendClient :: ClientId -> ClientResponse sm v -> RaftPersistFileStoreT m () Source #  | |
| (Monad m, RaftSendClient m sm v) => RaftSendClient (RaftLogFileStoreT m) sm v Source # | |
Defined in Examples.Raft.FileStore.Log Methods sendClient :: ClientId -> ClientResponse sm v -> RaftLogFileStoreT m () Source #  | |
| (RaftStateMachinePure sm v, MonadMask m, MonadCatch m, MonadIO m, Serialize sm, Serialize v) => RaftSendClient (RaftSocketT sm v m) sm v Source # | |
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 #
Methods
receiveClient :: m (Either (RaftRecvClientError m v) (ClientRequest v)) Source #
Instances
Instances
| Enum SerialNum Source # | |
Defined in Raft.Types Methods succ :: SerialNum -> SerialNum # pred :: SerialNum -> SerialNum # fromEnum :: SerialNum -> Int # enumFrom :: SerialNum -> [SerialNum] # enumFromThen :: SerialNum -> SerialNum -> [SerialNum] # enumFromTo :: SerialNum -> SerialNum -> [SerialNum] # enumFromThenTo :: SerialNum -> SerialNum -> SerialNum -> [SerialNum] #  | |
| Eq SerialNum Source # | |
| Num SerialNum Source # | |
| Ord SerialNum Source # | |
| Read SerialNum Source # | |
| Show SerialNum Source # | |
| Generic SerialNum Source # | |
| Serialize SerialNum Source # | |
| type Rep SerialNum Source # | |
Defined in Raft.Types  | |
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 # | |
Defined in Raft.Client Methods showsPrec :: Int -> ClientRequest v -> ShowS # show :: ClientRequest v -> String # showList :: [ClientRequest v] -> ShowS #  | |
| Generic (ClientRequest v) Source # | |
Defined in Raft.Client Associated Types type Rep (ClientRequest v) :: Type -> Type # Methods from :: ClientRequest v -> Rep (ClientRequest v) x # to :: Rep (ClientRequest v) x -> ClientRequest v #  | |
| Serialize v => Serialize (ClientRequest v) Source # | |
Defined in Raft.Client  | |
| type Rep (ClientRequest v) Source # | |
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))))  | |
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 # | |
| Generic (ClientReq v) Source # | |
| Serialize v => Serialize (ClientReq v) Source # | |
| type Rep (ClientReq v) Source # | |
Defined in Raft.Client type Rep (ClientReq v) = D1 (MetaData "ClientReq" "Raft.Client" "libraft-0.5.0.0-J9sQlo4v2xjSwCkwompQR" False) (C1 (MetaCons "ClientReadReq" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 ClientReadReq)) :+: (C1 (MetaCons "ClientWriteReq" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (ClientWriteReq v))) :+: C1 (MetaCons "ClientMetricsReq" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 ClientMetricsReq))))  | |
class ClientReqType a v Source #
Typeclass to make it easier to write polymorphic functions over ClientReq types
Instances
| ClientReqType ClientMetricsReq v Source # | |
Defined in Raft.Client  | |
| ClientReqType ClientReadReq v Source # | |
Defined in Raft.Client  | |
| ClientReqType (ClientWriteReq v) v Source # | |
Defined in Raft.Client  | |
data ClientReadReq Source #
Constructors
| ClientReadEntries ReadEntriesSpec | |
| ClientReadStateMachine | 
Instances
| Show ClientReadReq Source # | |
Defined in Raft.Client Methods showsPrec :: Int -> ClientReadReq -> ShowS # show :: ClientReadReq -> String # showList :: [ClientReadReq] -> ShowS #  | |
| Generic ClientReadReq Source # | |
Defined in Raft.Client Associated Types type Rep ClientReadReq :: Type -> Type #  | |
| Serialize ClientReadReq Source # | |
Defined in Raft.Client  | |
| ClientReqType ClientReadReq v Source # | |
Defined in Raft.Client  | |
| type Rep ClientReadReq Source # | |
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 # | |
Defined in Raft.Log Methods showsPrec :: Int -> ReadEntriesSpec -> ShowS # show :: ReadEntriesSpec -> String # showList :: [ReadEntriesSpec] -> ShowS #  | |
| Generic ReadEntriesSpec Source # | |
Defined in Raft.Log Associated Types type Rep ReadEntriesSpec :: Type -> Type # Methods from :: ReadEntriesSpec -> Rep ReadEntriesSpec x # to :: Rep ReadEntriesSpec x -> ReadEntriesSpec #  | |
| Serialize ReadEntriesSpec Source # | |
Defined in Raft.Log  | |
| type Rep ReadEntriesSpec Source # | |
Defined in Raft.Log type Rep ReadEntriesSpec = D1 (MetaData "ReadEntriesSpec" "Raft.Log" "libraft-0.5.0.0-J9sQlo4v2xjSwCkwompQR" False) (C1 (MetaCons "ByIndex" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Index)) :+: C1 (MetaCons "ByIndices" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 IndexInterval)))  | |
data ClientWriteReq v Source #
Constructors
| ClientCmdReq SerialNum v | Issue a command to update the state machine  | 
Instances
data ClientMetricsReq Source #
Constructors
| ClientAllMetricsReq | 
Instances
| Show ClientMetricsReq Source # | |
Defined in Raft.Client Methods showsPrec :: Int -> ClientMetricsReq -> ShowS # show :: ClientMetricsReq -> String # showList :: [ClientMetricsReq] -> ShowS #  | |
| Generic ClientMetricsReq Source # | |
Defined in Raft.Client Associated Types type Rep ClientMetricsReq :: Type -> Type # Methods from :: ClientMetricsReq -> Rep ClientMetricsReq x # to :: Rep ClientMetricsReq x -> ClientMetricsReq #  | |
| Serialize ClientMetricsReq Source # | |
Defined in Raft.Client  | |
| ClientReqType ClientMetricsReq v Source # | |
Defined in Raft.Client  | |
| type Rep ClientMetricsReq Source # | |
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
data ClientRespSpec sm v Source #
Specification for the data inside a ClientResponse
Constructors
| ClientReadRespSpec (ClientReadRespSpec sm) | |
| ClientWriteRespSpec (ClientWriteRespSpec sm v) | |
| ClientRedirRespSpec CurrentLeader | |
| ClientMetricsRespSpec RaftNodeMetrics | 
Instances
data ClientReadRespSpec sm Source #
Instances
data ClientWriteRespSpec sm v Source #
Constructors
| ClientWriteRespSpecSuccess Index SerialNum | |
| ClientWriteRespSpecFail SerialNum (RaftStateMachinePureError sm v) | 
Instances
data ClientReadResp sm v Source #
Representation of a read response to a client
Constructors
| ClientReadRespStateMachine sm | |
| ClientReadRespEntry (Entry v) | |
| ClientReadRespEntries (Entries v) | 
Instances
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
data ClientRedirResp Source #
Representation of a redirect response to a client
Constructors
| ClientRedirResp CurrentLeader | 
Instances
| Show ClientRedirResp Source # | |
Defined in Raft.Client Methods showsPrec :: Int -> ClientRedirResp -> ShowS # show :: ClientRedirResp -> String # showList :: [ClientRedirResp] -> ShowS #  | |
| Generic ClientRedirResp Source # | |
Defined in Raft.Client Associated Types type Rep ClientRedirResp :: Type -> Type # Methods from :: ClientRedirResp -> Rep ClientRedirResp x # to :: Rep ClientRedirResp x -> ClientRedirResp #  | |
| Serialize ClientRedirResp Source # | |
Defined in Raft.Client  | |
| type Rep ClientRedirResp Source # | |
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 #
Constructors
| ClientMetricsResp RaftNodeMetrics | 
Instances
| Show ClientMetricsResp Source # | |
Defined in Raft.Client Methods showsPrec :: Int -> ClientMetricsResp -> ShowS # show :: ClientMetricsResp -> String # showList :: [ClientMetricsResp] -> ShowS #  | |
| Generic ClientMetricsResp Source # | |
Defined in Raft.Client Associated Types type Rep ClientMetricsResp :: Type -> Type # Methods from :: ClientMetricsResp -> Rep ClientMetricsResp x # to :: Rep ClientMetricsResp x -> ClientMetricsResp #  | |
| Serialize ClientMetricsResp Source # | |
Defined in Raft.Client  | |
| type Rep ClientMetricsResp Source # | |
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 #
Methods
raftClientSend :: NodeId -> ClientRequest v -> m (Either (RaftClientSendError m v) ()) Source #
Instances
| RaftClientSend m v => RaftClientSend (RaftClientT s v m) v Source # | |
Defined in Raft.Client Associated Types type RaftClientSendError (RaftClientT s v m) v :: Type Source # Methods raftClientSend :: NodeId -> ClientRequest v -> RaftClientT s v m (Either (RaftClientSendError (RaftClientT s v m) v) ()) Source #  | |
| (Serialize s, Serialize v, Serialize (RaftStateMachinePureError s v), MonadIO m) => RaftClientSend (RaftClientRespChanT s v m) v Source # | |
Defined in Examples.Raft.Socket.Client Associated Types type RaftClientSendError (RaftClientRespChanT s v m) v :: Type Source # Methods raftClientSend :: NodeId -> ClientRequest v -> RaftClientRespChanT s v m (Either (RaftClientSendError (RaftClientRespChanT s v m) v) ()) Source #  | |
class Monad m => RaftClientRecv m sm v | m sm -> v where Source #
Associated Types
type RaftClientRecvError m sm Source #
Methods
raftClientRecv :: m (Either (RaftClientRecvError m sm) (ClientResponse sm v)) Source #
Instances
| RaftClientRecv m s v => RaftClientRecv (RaftClientT s v m) s v Source # | |
Defined in Raft.Client Associated Types type RaftClientRecvError (RaftClientT s v m) s :: Type Source # Methods raftClientRecv :: RaftClientT s v m (Either (RaftClientRecvError (RaftClientT s v m) s) (ClientResponse s v)) Source #  | |
| (Serialize s, Serialize v, MonadIO m) => RaftClientRecv (RaftClientRespChanT s v m) s v Source # | |
Defined in Examples.Raft.Socket.Client Associated Types type RaftClientRecvError (RaftClientRespChanT s v m) s :: Type Source # Methods raftClientRecv :: RaftClientRespChanT s v m (Either (RaftClientRecvError (RaftClientRespChanT s v m) s) (ClientResponse s v)) 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.
Constructors
| RaftClientState | |
Instances
| Monad m => MonadState RaftClientState (RaftClientT s v m) Source # | |
Defined in Raft.Client Methods get :: RaftClientT s v m RaftClientState # put :: RaftClientState -> RaftClientT s v m () # state :: (RaftClientState -> (a, RaftClientState)) -> RaftClientT s v m a #  | |
data RaftClientEnv Source #
Constructors
| RaftClientEnv | |
Fields  | |
Instances
| Monad m => MonadReader RaftClientEnv (RaftClientT s v m) Source # | |
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 #  | |
initRaftClientState :: Set NodeId -> StdGen -> RaftClientState Source #
data RaftClientT s v m a Source #
Instances
runRaftClientT :: Monad m => RaftClientEnv -> RaftClientState -> RaftClientT s v m a -> m a Source #
data RaftClientError s v m where Source #
Constructors
| RaftClientSendError :: RaftClientSendError m v -> RaftClientError s v m | |
| RaftClientRecvError :: RaftClientRecvError m s -> RaftClientError s v m | |
| RaftClientTimeout :: Text -> RaftClientError s v m | |
| RaftClientUnexpectedReadResp :: ClientReadResp s v -> RaftClientError s v m | |
| RaftClientUnexpectedWriteResp :: ClientWriteResp s v -> RaftClientError s v m | |
| RaftClientUnexpectedMetricsResp :: ClientMetricsResp -> RaftClientError s v m | |
| RaftClientUnexpectedRedirect :: ClientRedirResp -> RaftClientError s v m | 
Instances
| (Show s, Show v, Show (RaftClientSendError m v), Show (RaftClientRecvError m s), Show (RaftStateMachinePureError s v)) => Show (RaftClientError s v m) Source # | |
Defined in Raft.Client Methods showsPrec :: Int -> RaftClientError s v m -> ShowS # show :: RaftClientError s v m -> String # showList :: [RaftClientError s v m] -> ShowS #  | |
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.
clientReadTimeout :: (MonadBaseControl IO m, RaftClientSend m v, RaftClientRecv m s v) => Int -> ClientReadReq -> RaftClientT s v m (Either (RaftClientError s v m) (ClientReadResp s v)) Source #
clientRead but with a timeout
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.
clientWriteTimeout :: (MonadBaseControl IO m, RaftClientSend m v, RaftClientRecv m s v) => Int -> v -> RaftClientT s v m (Either (RaftClientError s v m) (ClientWriteResp s v)) Source #
clientQueryNodeMetrics :: (MonadBaseControl IO m, RaftClientSend m v, RaftClientRecv m s v) => NodeId -> RaftClientT s v m (Either (RaftClientError s v m) ClientMetricsResp) Source #
clientQueryNodeMetricsTimeout :: (MonadBaseControl IO m, RaftClientSend m v, RaftClientRecv m s v) => Int -> NodeId -> RaftClientT s v m (Either (RaftClientError s v m) ClientMetricsResp) Source #
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.
clientSendMetricsReqTo :: RaftClientSend m v => NodeId -> RaftClientT s v m (Either (RaftClientSendError m v) ()) Source #
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.
clientTimeout :: (MonadBaseControl IO m, RaftClientSend m v, RaftClientRecv m s v) => Text -> Int -> RaftClientT s v m (Either (RaftClientError s v m) r) -> RaftClientT s v m (Either (RaftClientError s v m) r) Source #
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
clientAddNode :: Monad m => NodeId -> RaftClientT s v m () Source #
clientGetNodes :: Monad m => RaftClientT s v m (Set NodeId) Source #