fix(jobs): more general no queue same
This commit is contained in:
parent
24491b446b
commit
b1143cb12b
@ -1,3 +1,5 @@
|
||||
{-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns #-}
|
||||
|
||||
module Jobs.Queue
|
||||
( writeJobCtl, writeJobCtlBlock
|
||||
, writeJobCtl', writeJobCtlBlock'
|
||||
@ -18,6 +20,8 @@ import qualified Data.Set as Set
|
||||
import qualified Data.List.NonEmpty as NonEmpty
|
||||
import qualified Data.HashMap.Strict as HashMap
|
||||
|
||||
import qualified Data.Aeson as Aeson
|
||||
|
||||
import Control.Monad.Random (evalRand, mkStdGen, uniform)
|
||||
|
||||
import qualified Data.Conduit.List as C
|
||||
@ -30,6 +34,9 @@ import Control.Monad.Trans.Resource (register)
|
||||
|
||||
import System.Clock (getTime, Clock(Monotonic))
|
||||
|
||||
import qualified Database.Esqueleto.Legacy as E
|
||||
import qualified Database.Esqueleto.Utils as E
|
||||
|
||||
|
||||
data JobQueueException = JobQueuePoolEmpty
|
||||
| JobQueueWorkerNotFound
|
||||
@ -92,7 +99,14 @@ queueJobUnsafe :: Bool -> Job -> YesodDB UniWorX (Maybe QueuedJobId)
|
||||
queueJobUnsafe queuedJobWriteLastExec job = do
|
||||
$logDebugS "queueJob" $ tshow job
|
||||
|
||||
doQueue <- fmap not . and2M (return $ jobNoQueueSame job) $ exists [ QueuedJobContent ==. toJSON job ]
|
||||
doQueue <- maybeT (return True) $ do
|
||||
noQueueSame <- hoistMaybe $ jobNoQueueSame job
|
||||
lift . fmap not . E.selectExists . E.from $ \queuedJob -> case noQueueSame of
|
||||
JobNoQueueSame -> E.where_ $ queuedJob E.^. QueuedJobContent E.==. E.val (toJSON job)
|
||||
JobNoQueueSameTag ->
|
||||
let Aeson.Object obj = toJSON job
|
||||
tag = obj HashMap.! "job"
|
||||
in E.where_ $ (queuedJob E.^. QueuedJobContent) E.->. "job" E.==. E.val tag
|
||||
|
||||
if
|
||||
| doQueue -> Just <$> do
|
||||
|
||||
@ -18,7 +18,7 @@ module Jobs.Types
|
||||
, showWorkerId, newWorkerId
|
||||
, JobQueue, jqInsert, jqDequeue', jqDequeue, jqDepth, jqContents
|
||||
, JobPriority(..), prioritiseJob
|
||||
, jobNoQueueSame, jobMovable
|
||||
, JobNoQueueSame(..), jobNoQueueSame, jobMovable
|
||||
, module Cron
|
||||
) where
|
||||
|
||||
@ -302,21 +302,25 @@ prioritiseJob (JobCtlGenerateHealthReport _) = JobPrioRealtime
|
||||
prioritiseJob JobCtlDetermineCrontab = JobPrioRealtime
|
||||
prioritiseJob _ = JobPrioBatch
|
||||
|
||||
jobNoQueueSame :: Job -> Bool
|
||||
data JobNoQueueSame = JobNoQueueSame | JobNoQueueSameTag
|
||||
deriving (Eq, Ord, Read, Show, Enum, Bounded, Generic, Typeable)
|
||||
deriving anyclass (Universe, Finite)
|
||||
|
||||
jobNoQueueSame :: Job -> Maybe JobNoQueueSame
|
||||
jobNoQueueSame = \case
|
||||
JobSendPasswordReset{} -> True
|
||||
JobTruncateTransactionLog{} -> True
|
||||
JobPruneInvitations{} -> True
|
||||
JobDeleteTransactionLogIPs{} -> True
|
||||
JobSynchroniseLdapUser{} -> True
|
||||
JobChangeUserDisplayEmail{} -> True
|
||||
JobPruneSessionFiles{} -> True
|
||||
JobPruneUnreferencedFiles{} -> True
|
||||
JobInjectFiles{} -> True
|
||||
JobPruneFallbackPersonalisedSheetFilesKeys{} -> True
|
||||
JobRechunkFiles{} -> True
|
||||
JobDetectMissingFiles{} -> True
|
||||
_ -> False
|
||||
JobSendPasswordReset{} -> Just JobNoQueueSame
|
||||
JobTruncateTransactionLog{} -> Just JobNoQueueSame
|
||||
JobPruneInvitations{} -> Just JobNoQueueSame
|
||||
JobDeleteTransactionLogIPs{} -> Just JobNoQueueSame
|
||||
JobSynchroniseLdapUser{} -> Just JobNoQueueSame
|
||||
JobChangeUserDisplayEmail{} -> Just JobNoQueueSame
|
||||
JobPruneSessionFiles{} -> Just JobNoQueueSameTag
|
||||
JobPruneUnreferencedFiles{} -> Just JobNoQueueSameTag
|
||||
JobInjectFiles{} -> Just JobNoQueueSameTag
|
||||
JobPruneFallbackPersonalisedSheetFilesKeys{} -> Just JobNoQueueSameTag
|
||||
JobRechunkFiles{} -> Just JobNoQueueSameTag
|
||||
JobDetectMissingFiles{} -> Just JobNoQueueSameTag
|
||||
_ -> Nothing
|
||||
|
||||
jobMovable :: JobCtl -> Bool
|
||||
jobMovable = isn't _JobCtlTest
|
||||
|
||||
Loading…
Reference in New Issue
Block a user