Revision 825f8cee src/Ganeti/HTools/Node.hs
b/src/Ganeti/HTools/Node.hs | ||
---|---|---|
251 | 251 |
, peers = P.empty |
252 | 252 |
, rMem = 0 |
253 | 253 |
, pMem = fromIntegral mem_f_init / mem_t_init |
254 |
, pDsk = computePDsk dsk_f_init dsk_t_init |
|
254 |
, pDsk = if excl_stor |
|
255 |
then computePDsk spindles_f_init $ fromIntegral spindles_t_init |
|
256 |
else computePDsk dsk_f_init dsk_t_init |
|
255 | 257 |
, pRem = 0 |
256 | 258 |
, pCpu = 0 |
257 | 259 |
, offline = offline_init |
... | ... | |
399 | 401 |
where old_load = utilLoad t |
400 | 402 |
|
401 | 403 |
-- | Computes the new 'pDsk' value, handling nodes without local disk |
402 |
-- storage (we consider all their disk used). |
|
404 |
-- storage (we consider all their disk unused).
|
|
403 | 405 |
computePDsk :: Int -> Double -> Double |
404 | 406 |
computePDsk _ 0 = 1 |
405 |
computePDsk used total = fromIntegral used / total |
|
407 |
computePDsk free total = fromIntegral free / total |
|
408 |
|
|
409 |
-- | Computes the new 'pDsk' value, handling the exclusive storage state. |
|
410 |
computeNewPDsk :: Node -> Int -> Int -> Double |
|
411 |
computeNewPDsk node new_free_sp new_free_dsk = |
|
412 |
if exclStorage node |
|
413 |
then computePDsk new_free_sp . fromIntegral $ tSpindles node |
|
414 |
else computePDsk new_free_dsk $ tDsk node |
|
406 | 415 |
|
407 | 416 |
-- * Update functions |
408 | 417 |
|
... | ... | |
425 | 434 |
new_free_sp = calcNewFreeSpindles False t inst |
426 | 435 |
new_inst_sp = calcSpindleUse False t inst |
427 | 436 |
new_mp = fromIntegral new_mem / tMem t |
428 |
new_dp = computePDsk new_dsk (tDsk t)
|
|
437 |
new_dp = computeNewPDsk t new_free_sp new_dsk
|
|
429 | 438 |
new_failn1 = new_mem <= rMem t |
430 | 439 |
new_ucpu = decIf i_online (uCpu t) (Instance.vcpus inst) |
431 | 440 |
new_rcpu = fromIntegral new_ucpu / tCpu t |
... | ... | |
460 | 469 |
else computeMaxRes new_peers |
461 | 470 |
new_prem = fromIntegral new_rmem / tMem t |
462 | 471 |
new_failn1 = fMem t <= new_rmem |
463 |
new_dp = computePDsk new_dsk (tDsk t)
|
|
472 |
new_dp = computeNewPDsk t new_free_sp new_dsk
|
|
464 | 473 |
old_load = utilLoad t |
465 | 474 |
new_load = old_load { T.dskWeight = T.dskWeight old_load - |
466 | 475 |
T.dskWeight (Instance.util inst) } |
... | ... | |
496 | 505 |
new_failn1 = new_mem <= rMem t |
497 | 506 |
new_ucpu = incIf i_online (uCpu t) (Instance.vcpus inst) |
498 | 507 |
new_pcpu = fromIntegral new_ucpu / tCpu t |
499 |
new_dp = computePDsk new_dsk (tDsk t)
|
|
508 |
new_dp = computeNewPDsk t new_free_sp new_dsk
|
|
500 | 509 |
l_cpu = T.iPolicyVcpuRatio $ iPolicy t |
501 | 510 |
new_load = utilLoad t `T.addUtil` Instance.util inst |
502 | 511 |
inst_tags = Instance.exclTags inst |
... | ... | |
505 | 514 |
in case () of |
506 | 515 |
_ | new_mem <= 0 -> Bad T.FailMem |
507 | 516 |
| uses_disk && new_dsk <= 0 -> Bad T.FailDisk |
508 |
| uses_disk && mDsk t > new_dp && strict -> Bad T.FailDisk
|
|
517 |
| uses_disk && new_dsk < loDsk t && strict -> Bad T.FailDisk
|
|
509 | 518 |
| uses_disk && exclStorage t && new_free_sp < 0 -> Bad T.FailSpindles |
510 | 519 |
| uses_disk && new_inst_sp > hiSpindles t && strict -> Bad T.FailDisk |
511 | 520 |
| new_failn1 && not (failN1 t) && strict -> Bad T.FailMem |
... | ... | |
545 | 554 |
new_rmem = max (rMem t) new_peem |
546 | 555 |
new_prem = fromIntegral new_rmem / tMem t |
547 | 556 |
new_failn1 = old_mem <= new_rmem |
548 |
new_dp = computePDsk new_dsk (tDsk t)
|
|
557 |
new_dp = computeNewPDsk t new_free_sp new_dsk
|
|
549 | 558 |
old_load = utilLoad t |
550 | 559 |
new_load = old_load { T.dskWeight = T.dskWeight old_load + |
551 | 560 |
T.dskWeight (Instance.util inst) } |
... | ... | |
553 | 562 |
in case () of |
554 | 563 |
_ | not (Instance.hasSecondary inst) -> Bad T.FailDisk |
555 | 564 |
| new_dsk <= 0 -> Bad T.FailDisk |
556 |
| mDsk t > new_dp && strict -> Bad T.FailDisk
|
|
565 |
| new_dsk < loDsk t && strict -> Bad T.FailDisk
|
|
557 | 566 |
| exclStorage t && new_free_sp < 0 -> Bad T.FailSpindles |
558 | 567 |
| new_inst_sp > hiSpindles t && strict -> Bad T.FailDisk |
559 | 568 |
| secondary_needed_mem >= old_mem && strict -> Bad T.FailMem |
Also available in: Unified diff