Revision 5714a925 src/Ganeti/Locking/Locks.hs

b/src/Ganeti/Locking/Locks.hs
30 30
  , GanetiLockAllocation
31 31
  , loadLockAllocation
32 32
  , writeLocksAsyncTask
33
  , LockLevel(..)
34
  , lockLevel
33 35
  ) where
34 36

  
35 37
import Control.Monad ((>=>))
......
106 108
  showJSON = J.JSString . J.toJSString . lockName
107 109
  readJSON = readEitherString >=> lockFromName
108 110

  
111
-- | The levels, the locks belong to.
112
data LockLevel = LevelCluster
113
               | LevelInstance
114
               | LevelNodeAlloc
115
               | LevelNodeGroup
116
               | LevelNode
117
               | LevelNodeRes
118
               | LevelNetwork
119
               deriving (Eq, Show, Enum)
120

  
121
-- | Provide the names of the lock levels.
122
lockLevelName :: LockLevel -> String
123
lockLevelName LevelCluster = "cluster"
124
lockLevelName LevelInstance = "instance"
125
lockLevelName LevelNodeAlloc = "node-alloc"
126
lockLevelName LevelNodeGroup = "node-group"
127
lockLevelName LevelNode = "node"
128
lockLevelName LevelNodeRes = "node-res"
129
lockLevelName LevelNetwork = "network"
130

  
131
-- | Obtain a lock level from its name/
132
lockLevelFromName :: String -> J.Result LockLevel
133
lockLevelFromName "cluster" = return LevelCluster
134
lockLevelFromName "instance" = return LevelInstance
135
lockLevelFromName "node-alloc" = return LevelNodeAlloc
136
lockLevelFromName "node-group" = return LevelNodeGroup
137
lockLevelFromName "node" = return LevelNode
138
lockLevelFromName "node-res" = return LevelNodeRes
139
lockLevelFromName "network" = return LevelNetwork
140
lockLevelFromName n = fail $ "Unknown lock-level name '" ++ n ++ "'"
141

  
142
instance J.JSON LockLevel where
143
  showJSON = J.JSString . J.toJSString . lockLevelName
144
  readJSON = readEitherString >=> lockLevelFromName
145

  
146
-- | For a lock, provide its level.
147
lockLevel :: GanetiLocks -> LockLevel
148
lockLevel BGL = LevelCluster
149
lockLevel ClusterLockSet = LevelCluster
150
lockLevel InstanceLockSet = LevelInstance
151
lockLevel NodeAllocLockSet = LevelNodeAlloc
152
lockLevel NAL = LevelNodeAlloc
153
lockLevel (Instance _) = LevelInstance
154
lockLevel NodeGroupLockSet = LevelNodeGroup
155
lockLevel (NodeGroup _) = LevelNodeGroup
156
lockLevel NodeLockSet = LevelNode
157
lockLevel (Node _) = LevelNode
158
lockLevel NodeResLockSet = LevelNodeRes
159
lockLevel (NodeRes _) = LevelNodeRes
160
lockLevel NetworkLockSet = LevelNetwork
161
lockLevel (Network _) = LevelNetwork
109 162

  
110 163
instance Lock GanetiLocks where
111 164
  lockImplications BGL = []

Also available in: Unified diff