X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/6e75a4451fc2ca6aac51b58ad48aa73e4e629816..942403e6b9f188e603af205ea2fbd156aac95627:/Ganeti/HTools/Node.hs diff --git a/Ganeti/HTools/Node.hs b/Ganeti/HTools/Node.hs index 7694c6d..8dffd58 100644 --- a/Ganeti/HTools/Node.hs +++ b/Ganeti/HTools/Node.hs @@ -15,6 +15,8 @@ module Ganeti.HTools.Node , buildPeers , setIdx , setOffline + , setXmem + , setFmem -- * Instance (re)location , removePri , removeSec @@ -38,6 +40,7 @@ import Ganeti.HTools.Utils data Node = Node { t_mem :: Double -- ^ total memory (MiB) , n_mem :: Int -- ^ node memory (MiB) , f_mem :: Int -- ^ free memory (MiB) + , x_mem :: Int -- ^ unaccounted memory (MiB) , t_dsk :: Double -- ^ total disk space (MiB) , f_dsk :: Int -- ^ free disk space (MiB) , plist :: [Int] -- ^ list of primary instance indices @@ -61,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, @@ -79,7 +83,8 @@ 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 } -- | Changes the index. @@ -91,6 +96,18 @@ setIdx t i = t {idx = i} setOffline :: Node -> Bool -> Node setOffline t val = t { offline = val } +-- | Sets the unnaccounted memory +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 = @@ -210,10 +227,15 @@ list mname n t = dp = p_dsk t off = offline t fn = failN1 t + tmem = t_mem t + nmem = n_mem t + xmem = x_mem t + fmem = f_mem t + imem = (truncate tmem) - nmem - xmem - fmem in - printf " %c %-*s %5.0f %5d %5d %5d %5.0f %5d %3d %3d %.5f %.5f" + printf " %c %-*s %5.0f %5d %5d %5d %5d %5d %5.0f %5d %3d %3d %.5f %.5f" (if off then '-' else if fn then '*' else ' ') - mname n (t_mem t) (n_mem t) (f_mem t) (r_mem t) + mname n tmem nmem imem xmem fmem (r_mem t) ((t_dsk t) / 1024) ((f_dsk t) `div` 1024) (length pl) (length sl) mp dp