diff --git a/src/Jobs.hs b/src/Jobs.hs index 494b83c2f..423411dc3 100644 --- a/src/Jobs.hs +++ b/src/Jobs.hs @@ -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 ()