HAppS-State-0.9.2: Event-based distributed state.Source codeContentsIndex
HAppS.State.Transaction
Synopsis
getTime :: Integral epochTime => AnyEv epochTime
getEventClockTime :: AnyEv ClockTime
getEventId :: Integral txId => AnyEv txId
type TypeString = String
data EventHandler where
UpdateHandler :: UpdateEvent ev res => (Maybe TxContext -> ev -> IO res) -> (Object -> ev) -> EventHandler
QueryHandler :: QueryEvent ev res => (ev -> IO res) -> (Object -> ev) -> EventHandler
type EventMap = Map TypeString EventHandler
data EmitInternal = EmitInternal EventMap
emitRef :: IORef EmitInternal
emitFunc :: (Serialize ev, Typeable res) => EventMap -> TypeString -> ev -> IO res
emitEvent' :: (Serialize ev, Typeable res) => TypeString -> ev -> IO res
emitEvent :: (Serialize ev, Typeable res) => ev -> IO res
initEventMap :: (Methods st, Component st) => MVar TxControl -> Proxy st -> IO ()
createEventMap :: (Methods st, Component st) => MVar TxControl -> Proxy st -> IO EventMap
extraEvents :: Serialize st => TxRun st -> EventMap
allStateTypes :: (Methods a, Component a) => Proxy a -> [TypeString]
componentIO :: (Methods a, Component a) => Proxy a -> [IO ()]
createNewTxRun :: IO (TxRun st)
setNewState :: TypeString -> ByteString -> IO ()
getState :: TypeString -> IO ByteString
data SetNewState st = SetNewState ByteString
data GetState st = GetState
update :: (MonadIO m, UpdateEvent ev res) => ev -> m res
query :: (MonadIO m, QueryEvent ev res) => ev -> m res
quickQuery' :: Serialize st => TxRun st -> HR st -> IO ()
type Runner ev res = IO (IO ev, res -> IO ())
type EH i o = i -> IO o
data Event = forall ev . Serialize ev => Event ev
data IHR st = forall ev . Serialize ev => IHR TxContext ev (RunHandler st ev)
data HR st = forall ev . Serialize ev => HR ev (RunHandler st ev)
type RunHandler st ev = TxContext -> st -> IO (Maybe st, IO ())
data Res a
= Ok a
| Error Exception
type EventQueue st = TChan (HR st)
type ProcessQueue st = TChan (IHR st)
data TxRun st = TxRun {
txEventQueue :: !EventQueue st
txProcessQueue :: !ProcessQueue st
txLastTxContext :: !TVar TxContext
}
type EvLoaders' st = Map String (ProcessQueue st -> ByteString -> IO (TxId, ByteString))
type EvLoaders = Map String (ByteString -> IO (TxId, ByteString))
setEvLoadersQueue :: ProcessQueue st -> EvLoaders' st -> EvLoaders
runColdEvent :: TxContext -> Object -> IO ()
runColdEventFunc :: TxContext -> Object -> EventMap -> IO ()
eventTString :: Serialize ev => ev -> TypeString
handleEvent :: (st -> Env -> Ev m res -> STM intermediate) -> (st -> intermediate -> IO (Maybe st, res)) -> (res -> IO ()) -> Ev m res -> RunHandler st ev
handleQuery :: (res -> IO ()) -> Query st res -> RunHandler st ev
handleUpdate :: (res -> IO ()) -> Update st res -> RunHandler st ev
checkDiff :: a -> a -> IO (Maybe a)
processEvent :: Serialize ev => TxRun st -> ev -> (RunHandler st ev) -> IO ()
getEpochMilli :: IO EpochMilli
newTxContext :: STM TxContext
addTxId :: TxRun st -> TxContext -> STM TxContext
globalRandomGen :: MVar StdGen
data TxConfig = TxConfig {
txcCheckpointSeconds :: Seconds
txcOperationMode :: OperationMode
txcClusterSize :: Int
txcClusterPort :: Int
txcCommitFrequency :: Int
}
data TxControl = TxControl {
ctlSaver :: Saver
ctlEventSaver :: MVar (WriterStream EventLogEntry)
ctlAllComponents :: [String]
ctlChildren :: [(ThreadId, MVar ())]
}
data EventLogEntry = EventLogEntry TxContext Object
data OperationMode
= SingleMode
| ClusterMode String
nullTxConfig :: TxConfig
runTxLoop :: MVar (WriterStream EventLogEntry) -> ProcessQueue st -> st -> IO ()
Documentation
getTime :: Integral epochTime => AnyEv epochTimeSource
getEventClockTime :: AnyEv ClockTimeSource
getEventId :: Integral txId => AnyEv txIdSource
type TypeString = StringSource
data EventHandler whereSource
Constructors
UpdateHandler :: UpdateEvent ev res => (Maybe TxContext -> ev -> IO res) -> (Object -> ev) -> EventHandler
QueryHandler :: QueryEvent ev res => (ev -> IO res) -> (Object -> ev) -> EventHandler
type EventMap = Map TypeString EventHandlerSource
data EmitInternal Source
Constructors
EmitInternal EventMap
emitRef :: IORef EmitInternalSource
emitFunc :: (Serialize ev, Typeable res) => EventMap -> TypeString -> ev -> IO resSource
emitEvent' :: (Serialize ev, Typeable res) => TypeString -> ev -> IO resSource
emitEvent :: (Serialize ev, Typeable res) => ev -> IO resSource
initEventMap :: (Methods st, Component st) => MVar TxControl -> Proxy st -> IO ()Source
createEventMap :: (Methods st, Component st) => MVar TxControl -> Proxy st -> IO EventMapSource
extraEvents :: Serialize st => TxRun st -> EventMapSource
allStateTypes :: (Methods a, Component a) => Proxy a -> [TypeString]Source
componentIO :: (Methods a, Component a) => Proxy a -> [IO ()]Source
createNewTxRun :: IO (TxRun st)Source
setNewState :: TypeString -> ByteString -> IO ()Source
getState :: TypeString -> IO ByteStringSource
data SetNewState st Source
Constructors
SetNewState ByteString
show/hide Instances
data GetState st Source
Constructors
GetState
show/hide Instances
update :: (MonadIO m, UpdateEvent ev res) => ev -> m resSource
Schedule an update and wait for it to complete. When this function returns, you're guaranteed the update will be persistent.
query :: (MonadIO m, QueryEvent ev res) => ev -> m resSource
Emit a state query and wait for the result.
quickQuery' :: Serialize st => TxRun st -> HR st -> IO ()Source
type Runner ev res = IO (IO ev, res -> IO ())Source
type EH i o = i -> IO oSource
data Event Source
Constructors
forall ev . Serialize ev => Event ev
data IHR st Source
Constructors
forall ev . Serialize ev => IHR TxContext ev (RunHandler st ev)
data HR st Source
Constructors
forall ev . Serialize ev => HR ev (RunHandler st ev)
type RunHandler st ev = TxContext -> st -> IO (Maybe st, IO ())Source
data Res a Source
Constructors
Ok a
Error Exception
type EventQueue st = TChan (HR st)Source
type ProcessQueue st = TChan (IHR st)Source
data TxRun st Source
Constructors
TxRun
txEventQueue :: !EventQueue st
txProcessQueue :: !ProcessQueue st
txLastTxContext :: !TVar TxContext
type EvLoaders' st = Map String (ProcessQueue st -> ByteString -> IO (TxId, ByteString))Source
type EvLoaders = Map String (ByteString -> IO (TxId, ByteString))Source
setEvLoadersQueue :: ProcessQueue st -> EvLoaders' st -> EvLoadersSource
runColdEvent :: TxContext -> Object -> IO ()Source
runColdEventFunc :: TxContext -> Object -> EventMap -> IO ()Source
eventTString :: Serialize ev => ev -> TypeStringSource
handleEvent :: (st -> Env -> Ev m res -> STM intermediate) -> (st -> intermediate -> IO (Maybe st, res)) -> (res -> IO ()) -> Ev m res -> RunHandler st evSource
handleQuery :: (res -> IO ()) -> Query st res -> RunHandler st evSource
handleUpdate :: (res -> IO ()) -> Update st res -> RunHandler st evSource
checkDiff :: a -> a -> IO (Maybe a)Source
processEvent :: Serialize ev => TxRun st -> ev -> (RunHandler st ev) -> IO ()Source
getEpochMilli :: IO EpochMilliSource
newTxContext :: STM TxContextSource
addTxId :: TxRun st -> TxContext -> STM TxContextSource
globalRandomGen :: MVar StdGenSource
data TxConfig Source
Constructors
TxConfig
txcCheckpointSeconds :: SecondsPerform checkpoint at least every N seconds.
txcOperationMode :: OperationMode
txcClusterSize :: IntNumber of active nodes in the cluster (not counting this node).
txcClusterPort :: Int
txcCommitFrequency :: IntCommits per second. Only applies to cluster mode.
data TxControl Source
Constructors
TxControl
ctlSaver :: SaverSaver given by the user.
ctlEventSaver :: MVar (WriterStream EventLogEntry)
ctlAllComponents :: [String]Types of each component used.
ctlChildren :: [(ThreadId, MVar ())]
data EventLogEntry Source
Constructors
EventLogEntry TxContext Object
show/hide Instances
data OperationMode Source
Constructors
SingleMode
ClusterMode String
nullTxConfig :: TxConfigSource
runTxLoop :: MVar (WriterStream EventLogEntry) -> ProcessQueue st -> st -> IO ()Source
Produced by Haddock version 2.1.0