more serializition

This commit is contained in:
Gregor Kleen 2018-10-01 20:39:13 +02:00
parent 1f833ca7fb
commit 5869cb226b

View File

@ -69,9 +69,7 @@ jLocked :: QueuedJobId -> (QueuedJob -> Handler a) -> Handler a
jLocked jId act = do
hasLock <- liftIO $ newTVarIO False
val <- runDB $ do
[executeQQ|
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
|]
setSerializable
j@QueuedJob{..} <- maybe (throwM $ JNonexistant jId) return =<< get jId
maybe (return ()) throwM $ JLocked <$> pure jId <*> queuedJobLockInstance <*> queuedJobLockTime
case fromJSON queuedJobContent :: Aeson.Result Job of
@ -89,9 +87,15 @@ jLocked jId act = do
act val `finally` whenM (liftIO . atomically $ readTVar hasLock) jUnlock
where
jUnlock :: Handler ()
jUnlock = runDB $ update jId [ QueuedJobLockInstance =. Nothing
, QueuedJobLockTime =. Nothing
]
jUnlock = runDB $ do
setSerializable
update jId [ QueuedJobLockInstance =. Nothing
, QueuedJobLockTime =. Nothing
]
setSerializable = [executeQQ|
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
|]
writeJobCtl :: (MonadHandler m, HandlerSite m ~ UniWorX) => JobCtl -> m ()