libraft-0.1.1.0: Raft consensus algorithm

Safe HaskellNone
LanguageHaskell2010

Examples.Raft.Socket.Node

Synopsis

Documentation

newtype RaftSocketT v m a Source #

Constructors

RaftSocketT 
Instances
MonadTrans (RaftSocketT v) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Methods

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

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

Defined in Examples.Raft.Socket.Node

Methods

ask :: RaftSocketT v m (NodeSocketEnv v) #

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

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

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

Defined in Examples.Raft.Socket.Node

Methods

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

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

return :: a -> RaftSocketT v m a #

fail :: String -> RaftSocketT v m a #

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

Defined in Examples.Raft.Socket.Node

Methods

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

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

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

Defined in Examples.Raft.Socket.Node

Methods

fail :: String -> RaftSocketT v m a #

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

Defined in Examples.Raft.Socket.Node

Methods

pure :: a -> RaftSocketT v m a #

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

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

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

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

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

Defined in Examples.Raft.Socket.Node

Methods

empty :: RaftSocketT v m a #

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

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

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

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

Defined in Examples.Raft.Socket.Node

Methods

mzero :: RaftSocketT v m a #

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

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

Defined in Examples.Raft.Socket.Node

Methods

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

MonadConc m => MonadConc (RaftSocketT v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

Associated Types

type STM (RaftSocketT v m) :: Type -> Type #

type MVar (RaftSocketT v m) :: Type -> Type #

type IORef (RaftSocketT v m) :: Type -> Type #

type Ticket (RaftSocketT v m) :: Type -> Type #

type ThreadId (RaftSocketT v m) :: Type #

Methods

forkWithUnmask :: ((forall a. RaftSocketT v m a -> RaftSocketT v m a) -> RaftSocketT v m ()) -> RaftSocketT v m (ThreadId (RaftSocketT v m)) #

forkWithUnmaskN :: String -> ((forall a. RaftSocketT v m a -> RaftSocketT v m a) -> RaftSocketT v m ()) -> RaftSocketT v m (ThreadId (RaftSocketT v m)) #

forkOnWithUnmask :: Int -> ((forall a. RaftSocketT v m a -> RaftSocketT v m a) -> RaftSocketT v m ()) -> RaftSocketT v m (ThreadId (RaftSocketT v m)) #

forkOnWithUnmaskN :: String -> Int -> ((forall a. RaftSocketT v m a -> RaftSocketT v m a) -> RaftSocketT v m ()) -> RaftSocketT v m (ThreadId (RaftSocketT v m)) #

forkOSWithUnmask :: ((forall a. RaftSocketT v m a -> RaftSocketT v m a) -> RaftSocketT v m ()) -> RaftSocketT v m (ThreadId (RaftSocketT v m)) #

forkOSWithUnmaskN :: String -> ((forall a. RaftSocketT v m a -> RaftSocketT v m a) -> RaftSocketT v m ()) -> RaftSocketT v m (ThreadId (RaftSocketT v m)) #

isCurrentThreadBound :: RaftSocketT v m Bool #

getNumCapabilities :: RaftSocketT v m Int #

setNumCapabilities :: Int -> RaftSocketT v m () #

myThreadId :: RaftSocketT v m (ThreadId (RaftSocketT v m)) #

yield :: RaftSocketT v m () #

threadDelay :: Int -> RaftSocketT v m () #

newEmptyMVar :: RaftSocketT v m (MVar (RaftSocketT v m) a) #

newEmptyMVarN :: String -> RaftSocketT v m (MVar (RaftSocketT v m) a) #

putMVar :: MVar (RaftSocketT v m) a -> a -> RaftSocketT v m () #

tryPutMVar :: MVar (RaftSocketT v m) a -> a -> RaftSocketT v m Bool #

readMVar :: MVar (RaftSocketT v m) a -> RaftSocketT v m a #

tryReadMVar :: MVar (RaftSocketT v m) a -> RaftSocketT v m (Maybe a) #

takeMVar :: MVar (RaftSocketT v m) a -> RaftSocketT v m a #

tryTakeMVar :: MVar (RaftSocketT v m) a -> RaftSocketT v m (Maybe a) #

newIORef :: a -> RaftSocketT v m (IORef (RaftSocketT v m) a) #

newIORefN :: String -> a -> RaftSocketT v m (IORef (RaftSocketT v m) a) #

readIORef :: IORef (RaftSocketT v m) a -> RaftSocketT v m a #

atomicModifyIORef :: IORef (RaftSocketT v m) a -> (a -> (a, b)) -> RaftSocketT v m b #

writeIORef :: IORef (RaftSocketT v m) a -> a -> RaftSocketT v m () #

atomicWriteIORef :: IORef (RaftSocketT v m) a -> a -> RaftSocketT v m () #

readForCAS :: IORef (RaftSocketT v m) a -> RaftSocketT v m (Ticket (RaftSocketT v m) a) #

peekTicket' :: Proxy (RaftSocketT v m) -> Ticket (RaftSocketT v m) a -> a #

casIORef :: IORef (RaftSocketT v m) a -> Ticket (RaftSocketT v m) a -> a -> RaftSocketT v m (Bool, Ticket (RaftSocketT v m) a) #

modifyIORefCAS :: IORef (RaftSocketT v m) a -> (a -> (a, b)) -> RaftSocketT v m b #

modifyIORefCAS_ :: IORef (RaftSocketT v m) a -> (a -> a) -> RaftSocketT v m () #

atomically :: STM (RaftSocketT v m) a -> RaftSocketT v m a #

readTVarConc :: TVar (STM (RaftSocketT v m)) a -> RaftSocketT v m a #

throwTo :: Exception e => ThreadId (RaftSocketT v m) -> e -> RaftSocketT v m () #

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

Defined in Examples.Raft.Socket.Node

Methods

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

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

Defined in Examples.Raft.Socket.Node

Methods

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

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

Defined in Examples.Raft.Socket.Node

Methods

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

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

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

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

Defined in Examples.Raft.Socket.Node

Associated Types

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

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

Defined in Examples.Raft.Socket.Node

Methods

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

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

Defined in Examples.Raft.Socket.Node

Associated Types

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

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

Defined in Examples.Raft.Socket.Node

type ThreadId (RaftSocketT v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

type Ticket (RaftSocketT v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

type IORef (RaftSocketT v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

type MVar (RaftSocketT v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

type STM (RaftSocketT v m) Source # 
Instance details

Defined in Examples.Raft.Socket.Node

type STM (RaftSocketT v m) = STM (ReaderT (NodeSocketEnv v) m)
type RaftRecvRPCError (RaftSocketT v m) v Source # 
Instance details

Defined in Examples.Raft.Socket.Node

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

Defined in Examples.Raft.Socket.Node

retryConnection :: (Serialize v, MonadIO m, MonadConc m) => TVar (STM m) (Map NodeId Socket) -> NodeId -> Maybe Socket -> RPCMessage v -> SomeException -> m (Maybe Socket) Source #

Handles connections failures by first trying to reconnect

acceptForkNode :: forall v m. (Serialize v, MonadIO m, MonadConc m) => RaftSocketT v m () Source #

Recursively accept a connection. It keeps trying to accept connections even when a node dies