, buildPeers
, setIdx
, setOffline
+ , setXmem
+ , setFmem
-- * Instance (re)location
, removePri
, removeSec
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
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,
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.
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 =
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