Before many of them threw just GenericError.
Signed-off-by: Petr Pudlak <[email protected]>
---
src/Ganeti/WConfd/TempRes.hs | 28 ++++++++++++++++------------
1 file changed, 16 insertions(+), 12 deletions(-)
diff --git a/src/Ganeti/WConfd/TempRes.hs b/src/Ganeti/WConfd/TempRes.hs
index effde60..145ca9b 100644
--- a/src/Ganeti/WConfd/TempRes.hs
+++ b/src/Ganeti/WConfd/TempRes.hs
@@ -48,7 +48,6 @@ module Ganeti.WConfd.TempRes
, reserve
, dropReservationsFor
, reserved
- , generate
) where
import Control.Applicative
@@ -127,6 +126,10 @@ $(makeCustomLenses ''TempResState)
-- ** Utility functions
+-- | Issues a reservation error.
+resError :: (MonadError GanetiException m) => String -> m a
+resError = throwError . ReservationError
+
-- | Filter values from the nested map and remove any nested maps
-- that become empty.
filterNested :: (Ord a, Ord b)
@@ -173,7 +176,7 @@ computeDRBDMap :: (MonadError GanetiException m)
computeDRBDMap cfg trs = do
m <- computeDRBDMap' cfg trs
let dups = filterNested ((>= 2) . length) m
- unless (M.null dups) . failError
+ unless (M.null dups) . resError
$ "Duplicate DRBD ports detected: " ++ show (M.toList $ fmap M.toList dups)
return $ fmap (fmap head . M.filter ((== 1) . length)) m
`M.union` (fmap (const mempty) . J.fromContainer . configNodes $
cfg)
@@ -208,10 +211,10 @@ isReserved :: (Ord a, Ord j) => a -> TempRes j a -> Bool
isReserved x = MM.elem x . getTempRes
-- | Tries to reserve a given value for a given job.
-reserve :: (MonadError e m, Error e, Show a, Ord a, Ord j)
+reserve :: (MonadError GanetiException m, Show a, Ord a, Ord j)
=> j -> a -> TempRes j a -> m (TempRes j a)
reserve jobid x tr = do
- when (isReserved x tr) . failError $ "Duplicate reservation for resource '"
+ when (isReserved x tr) . resError $ "Duplicate reservation for resource '"
++ show x ++ "'"
return . TempRes . MM.insert jobid x $ getTempRes tr
@@ -221,7 +224,7 @@ dropReservationsFor jobid = TempRes . MM.deleteAll jobid .
getTempRes
reserved :: (Ord a, Ord j) => TempRes j a -> S.Set a
reserved = MM.values . getTempRes
-generate :: (MonadError e m, Error e, Show a, Ord a, Ord j)
+generate :: (MonadError GanetiException m, Show a, Ord a, Ord j)
=> j -> S.Set a -> m (Maybe a) -> TempRes j a -> m (a, TempRes j a)
generate jobid existing genfn tr = do
let retries = 64
@@ -234,9 +237,10 @@ generate jobid existing genfn tr = do
Just x -> (,) x `liftM` reserve jobid x tr
-- | A variant of 'generate' for randomized computations.
-generateRand :: (MonadError e m, Error e, Show a, Ord a, Ord j, RandomGen g)
- => g -> j -> S.Set a -> (g -> (Maybe a, g)) -> TempRes j a
- -> m (a, TempRes j a)
+generateRand
+ :: (MonadError GanetiException m, Show a, Ord a, Ord j, RandomGen g)
+ => g -> j -> S.Set a -> (g -> (Maybe a, g)) -> TempRes j a
+ -> m (a, TempRes j a)
generateRand rgen jobid existing genfn tr =
evalStateT (generate jobid existing (state genfn) tr) rgen
@@ -264,7 +268,7 @@ dropAllReservations jobId = modify $
-- approach we take is to instead use 'newStdGen' and discard the split
-- generator afterwards.
generateMAC
- :: (RandomGen g, MonadError e m, Error e, Functor m)
+ :: (RandomGen g, MonadError GanetiException m, Functor m)
=> g -> ClientId -> Maybe NetworkUUID -> ConfigData
-> StateT TempResState m MAC
generateMAC rgen jobId netId cd = do
@@ -288,13 +292,13 @@ reserveMAC
reserveMAC jobId mac cd = do
let existing = S.fromList $ getAllMACs cd
when (S.member mac existing)
- $ throwError (ReservationError "MAC already in use")
+ $ resError "MAC already in use"
get >>= traverseOf trsMACsL (reserve jobId mac) >>= put
-- ** DRBD secrets
generateDRBDSecret
- :: (RandomGen g, MonadError e m, Error e, Functor m)
+ :: (RandomGen g, MonadError GanetiException m, Functor m)
=> g -> ClientId -> ConfigData -> StateT TempResState m DRBDSecret
generateDRBDSecret rgen jobId cd = do
let existing = S.fromList $ getAllDrbdSecrets cd
@@ -310,5 +314,5 @@ reserveLV
reserveLV jobId lv cd = do
existing <- toError $ getAllLVs cd
when (S.member lv existing)
- $ throwError (ReservationError "MAC already in use")
+ $ resError "MAC already in use"
get >>= traverseOf trsLVsL (reserve jobId lv) >>= put
--
2.0.0.526.g5318336