X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/a1c6212ef14e3f597cafd983a1dd8b837e435529..00b157522469058680f231f51880e720ee48d12c:/Ganeti/HTools/Node.hs diff --git a/Ganeti/HTools/Node.hs b/Ganeti/HTools/Node.hs index c18b21b..8dffd58 100644 --- a/Ganeti/HTools/Node.hs +++ b/Ganeti/HTools/Node.hs @@ -16,6 +16,7 @@ module Ganeti.HTools.Node , setIdx , setOffline , setXmem + , setFmem -- * Instance (re)location , removePri , removeSec @@ -63,8 +64,9 @@ The index and the peers maps are empty, and will be need to be update later via the 'setIdx' and 'buildPeers' functions. -} -create :: Double -> Int -> Int -> Double -> Int -> Node -create mem_t_init mem_n_init mem_f_init dsk_t_init dsk_f_init = +create :: Double -> Int -> Int -> Double -> Int -> Bool -> Node +create mem_t_init mem_n_init mem_f_init dsk_t_init dsk_f_init + offline_init = Node { t_mem = mem_t_init, @@ -81,7 +83,7 @@ create mem_t_init mem_n_init mem_f_init dsk_t_init dsk_f_init = p_mem = (fromIntegral mem_f_init) / mem_t_init, p_dsk = (fromIntegral dsk_f_init) / dsk_t_init, p_rem = 0, - offline = False, + offline = offline_init, x_mem = 0 } @@ -98,6 +100,14 @@ setOffline t val = t { offline = val } setXmem :: Node -> Int -> Node setXmem t val = t { x_mem = val } +-- | Sets the free memory +setFmem :: Node -> Int -> Node +setFmem t new_mem = + let new_n1 = computeFailN1 (r_mem t) new_mem (f_dsk t) + new_mp = (fromIntegral new_mem) / (t_mem t) + in + t { f_mem = new_mem, failN1 = new_n1, p_mem = new_mp } + -- | Given the rmem, free memory and disk, computes the failn1 status. computeFailN1 :: Int -> Int -> Int -> Bool computeFailN1 new_rmem new_mem new_dsk =