Revision 18b6444b
b/Ganeti/HTools/Node.hs | ||
---|---|---|
114 | 114 |
noSecondary :: T.Ndx |
115 | 115 |
noSecondary = -1 |
116 | 116 |
|
117 |
-- | No limit value |
|
118 |
noLimit :: Double |
|
119 |
noLimit = -1 |
|
120 |
|
|
117 | 121 |
-- * Initialization functions |
118 | 122 |
|
119 | 123 |
-- | Create a new node. |
... | ... | |
146 | 150 |
p_cpu = 0, |
147 | 151 |
offline = offline_init, |
148 | 152 |
x_mem = 0, |
149 |
m_dsk = -1,
|
|
150 |
m_cpu = -1
|
|
153 |
m_dsk = noLimit,
|
|
154 |
m_cpu = noLimit
|
|
151 | 155 |
} |
152 | 156 |
|
153 | 157 |
-- | Changes the index. |
... | ... | |
228 | 232 |
failHealth :: Int -> Int -> Bool |
229 | 233 |
failHealth new_mem new_dsk = new_mem <= 0 || new_dsk <= 0 |
230 | 234 |
|
235 |
-- | Given new limits, check if any of them are overtaken |
|
236 |
failLimits :: Node -> Double -> Double -> Bool |
|
237 |
failLimits t new_dsk new_cpu = |
|
238 |
let l_dsk = m_dsk t |
|
239 |
l_cpu = m_cpu t |
|
240 |
in (l_dsk > new_dsk) || (l_cpu >= 0 && l_cpu < new_cpu) |
|
241 |
|
|
231 | 242 |
-- | Removes a primary instance. |
232 | 243 |
removePri :: Node -> Instance.Instance -> Node |
233 | 244 |
removePri t inst = |
... | ... | |
276 | 287 |
new_failn1 = computeFailN1 (r_mem t) new_mem new_dsk |
277 | 288 |
new_ucpu = (u_cpu t) + (Instance.vcpus inst) |
278 | 289 |
new_pcpu = (fromIntegral new_ucpu) / (t_cpu t) |
290 |
new_dp = (fromIntegral new_dsk) / (t_dsk t) |
|
279 | 291 |
in |
280 |
if (failHealth new_mem new_dsk) || (new_failn1 && not (failN1 t)) then |
|
292 |
if (failHealth new_mem new_dsk) || (new_failn1 && not (failN1 t)) || |
|
293 |
(failLimits t new_dp new_pcpu) |
|
294 |
then |
|
281 | 295 |
Nothing |
282 | 296 |
else |
283 | 297 |
let new_plist = iname:(plist t) |
284 | 298 |
new_mp = (fromIntegral new_mem) / (t_mem t) |
285 |
new_dp = (fromIntegral new_dsk) / (t_dsk t) |
|
286 | 299 |
in |
287 | 300 |
Just t {plist = new_plist, f_mem = new_mem, f_dsk = new_dsk, |
288 | 301 |
failN1 = new_failn1, p_mem = new_mp, p_dsk = new_dp, |
... | ... | |
299 | 312 |
new_peers = PeerMap.add pdx new_peem old_peers |
300 | 313 |
new_rmem = max (r_mem t) new_peem |
301 | 314 |
new_prem = (fromIntegral new_rmem) / (t_mem t) |
302 |
new_failn1 = computeFailN1 new_rmem old_mem new_dsk in |
|
303 |
if (failHealth old_mem new_dsk) || (new_failn1 && not (failN1 t)) then |
|
304 |
Nothing |
|
305 |
else |
|
306 |
let new_slist = iname:(slist t) |
|
307 |
new_dp = (fromIntegral new_dsk) / (t_dsk t) |
|
308 |
in |
|
309 |
Just t {slist = new_slist, f_dsk = new_dsk, |
|
310 |
peers = new_peers, failN1 = new_failn1, |
|
311 |
r_mem = new_rmem, p_dsk = new_dp, |
|
312 |
p_rem = new_prem} |
|
315 |
new_failn1 = computeFailN1 new_rmem old_mem new_dsk |
|
316 |
new_dp = (fromIntegral new_dsk) / (t_dsk t) |
|
317 |
in if (failHealth old_mem new_dsk) || (new_failn1 && not (failN1 t)) || |
|
318 |
(failLimits t new_dp noLimit) |
|
319 |
then |
|
320 |
Nothing |
|
321 |
else |
|
322 |
let new_slist = iname:(slist t) |
|
323 |
in |
|
324 |
Just t {slist = new_slist, f_dsk = new_dsk, |
|
325 |
peers = new_peers, failN1 = new_failn1, |
|
326 |
r_mem = new_rmem, p_dsk = new_dp, |
|
327 |
p_rem = new_prem} |
|
313 | 328 |
|
314 | 329 |
-- * Display functions |
315 | 330 |
|
Also available in: Unified diff