@@ -1,18 +1,19 @@
11module Control.Octopod.DeploymentLock
2− ( LockedDeployments
3− , initLockedDeployments
4− , withLockedDeployment
5− , isDeploymentLocked
6− ) where
2+ ( LockedDeployments,
3+ initLockedDeployments,
4+ withLockedDeployment,
5+ isDeploymentLocked,
6+ )
7+where
78
8−import Common.Types
9−import Control.Concurrent.STM
10−import Control.Exception.Lifted
11−import Control.Monad.Base
12−import Control.Monad.Reader
13−import Control.Monad.Trans.Control
14−import Data.Generics.Product.Typed
15−import Data.Set (Set)
9+import Common.Types
10+import Control.Concurrent.STM
11+import Control.Exception.Lifted
12+import Control.Monad.Base
13+import Control.Monad.Reader
14+import Control.Monad.Trans.Control
15+import Data.Generics.Product.Typed
16+import Data.Set (Set)
1617import qualified Data.Set as S
1718
1819newtype LockedDeployments = LockedDeployments (TVar (Set DeploymentName))
@@ -20,19 +21,18 @@ newtype LockedDeployments = LockedDeployments (TVar (Set DeploymentName))
2021initLockedDeployments :: IO LockedDeployments
2122initLockedDeployments = LockedDeployments <$> newTVarIO S.empty
2223
23−withLockedDeployment
24− ::
25− ( MonadReader r m
26− , HasType LockedDeployments r
27− , MonadBaseControl IO m
28− )
29− => DeploymentName
30− -> m a
31− -- ^ The conflict handler. Gets called if the deployment is
32− -- already being processed.
33− -> m a
34− -- ^ The actions to be performed when the deployment is locked.
35− -> m a
24+withLockedDeployment ::
25+ ( MonadReader r m
26+ , HasType LockedDeployments r
27+ , MonadBaseControl IO m
28+ ) =>
29+ DeploymentName ->
30+ -- | The conflict handler. Gets called if the deployment is
31+ -- already being processed.
32+ m a ->
33+ -- | The actions to be performed when the deployment is locked.
34+ m a ->
35+ m a
3636withLockedDeployment dName conflictHandler m = do
3737 (LockedDeployments tvar) <- asks getTyped
3838 proceed <- liftBase . atomically $ do
@@ -46,9 +46,10 @@ withLockedDeployment dName conflictHandler m = do
4646 then finally m $ liftBase . atomically $ modifyTVar tvar (S.delete dName)
4747 else conflictHandler
4848
49−isDeploymentLocked
50− :: (MonadReader r m , HasType LockedDeployments r, MonadBase IO m)
51− => DeploymentName -> m Bool
49+isDeploymentLocked ::
50+ (MonadReader r m, HasType LockedDeployments r, MonadBase IO m) =>
51+ DeploymentName ->
52+ m Bool
5253isDeploymentLocked dName = do
5354 (LockedDeployments tvar) <- asks getTyped
5455 s <- liftBase $ readTVarIO tvar