Revision 5714a925
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