mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-17 04:24:35 +03:00
5f79b5f102
https://github.com/hasura/graphql-engine-mono/pull/2189 Co-authored-by: hasura-bot <30118761+hasura-bot@users.noreply.github.com> Co-authored-by: Martin Mark <74692114+martin-hasura@users.noreply.github.com> Co-authored-by: Vishnu Bharathi <4211715+scriptnull@users.noreply.github.com> Co-authored-by: Sameer Kolhar <6604943+kolharsam@users.noreply.github.com> Co-authored-by: Antoine Leblanc <1618949+nicuveo@users.noreply.github.com> Co-authored-by: Matt Hardman <28978422+mattshardman@users.noreply.github.com> Co-authored-by: Vijay Prasanna <11921040+vijayprasanna13@users.noreply.github.com> Co-authored-by: Divi <32202683+imperfect-fourth@users.noreply.github.com> GitOrigin-RevId: 97c71571656c6e0c57d06f2d38193833180901c0
44 lines
1.6 KiB
Haskell
44 lines
1.6 KiB
Haskell
module Hasura.Eventing.Common
|
|
( LockedEventsCtx(..)
|
|
, saveLockedEvents
|
|
, removeEventFromLockedEvents
|
|
) where
|
|
|
|
import Hasura.Prelude
|
|
|
|
import Control.Concurrent.STM.TVar
|
|
import Control.Monad.STM
|
|
|
|
import Hasura.RQL.Types.Action (LockedActionEventId)
|
|
import Hasura.RQL.Types.Common
|
|
import Hasura.RQL.Types.Eventing (EventId)
|
|
import Hasura.RQL.Types.ScheduledTrigger (CronEventId, OneOffScheduledEventId)
|
|
|
|
import qualified Data.Set as Set
|
|
|
|
data LockedEventsCtx
|
|
= LockedEventsCtx
|
|
{ leCronEvents :: TVar (Set.Set CronEventId)
|
|
, leOneOffEvents :: TVar (Set.Set OneOffScheduledEventId)
|
|
, leEvents :: TVar (HashMap SourceName (Set.Set EventId))
|
|
, leActionEvents :: TVar (Set.Set LockedActionEventId)
|
|
}
|
|
|
|
-- | After the events are fetched from the DB, we store the locked events
|
|
-- in a hash set(order doesn't matter and look ups are faster) in the
|
|
-- event engine context
|
|
saveLockedEvents :: (MonadIO m) => [EventId] -> TVar (Set.Set EventId) -> m ()
|
|
saveLockedEvents eventIds lockedEvents =
|
|
liftIO $ atomically $ do
|
|
lockedEventsVals <- readTVar lockedEvents
|
|
writeTVar lockedEvents $!
|
|
Set.union lockedEventsVals $ Set.fromList eventIds
|
|
|
|
-- | Remove an event from the 'LockedEventsCtx' after it has been processed
|
|
removeEventFromLockedEvents
|
|
:: MonadIO m => EventId -> TVar (Set.Set EventId) -> m ()
|
|
removeEventFromLockedEvents eventId lockedEvents =
|
|
liftIO $ atomically $ do
|
|
lockedEventsVals <- readTVar lockedEvents
|
|
writeTVar lockedEvents $! Set.delete eventId lockedEventsVals
|