Switch from hand-written monads to a real one
[ganeti-local] / Ganeti / HTools / Node.hs
index cbc2117..8dffd58 100644 (file)
@@ -64,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,
@@ -82,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
     }
 
@@ -101,7 +102,11 @@ setXmem t val = t { x_mem = val }
 
 -- | Sets the free memory
 setFmem :: Node -> Int -> Node
-setFmem t val = t { f_mem = val }
+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