htools: Use the spindle usage in the algorithms
authorRené Nussbaumer <rn@google.com>
Wed, 14 Mar 2012 10:38:21 +0000 (11:38 +0100)
committerRené Nussbaumer <rn@google.com>
Thu, 15 Mar 2012 10:29:54 +0000 (11:29 +0100)
In the same transition also do a simple refactor of the caculation

Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>

htools/Ganeti/HTools/Node.hs

index 91befe9..cb61ee0 100644 (file)
@@ -315,6 +315,11 @@ buildPeers t il =
       new_prem = fromIntegral new_rmem / tMem t
   in t {peers=pmap, failN1 = new_failN1, rMem = new_rmem, pRem = new_prem}
 
+-- | Calculate the new spindle usage
+calcSpindleUsage :: Node -> Instance.Instance -> Double
+calcSpindleUsage n i = incIf (Instance.usesLocalStorage i) (instSpindles n)
+                         (fromIntegral $ Instance.spindleUsage i)
+
 -- | Assigns an instance to a node as primary and update the used VCPU
 -- count, utilisation data and tags map.
 setPri :: Node -> Instance.Instance -> Node
@@ -323,23 +328,19 @@ setPri t inst = t { pList = Instance.idx inst:pList t
                   , pCpu = fromIntegral new_count / tCpu t
                   , utilLoad = utilLoad t `T.addUtil` Instance.util inst
                   , pTags = addTags (pTags t) (Instance.tags inst)
-                  , instSpindles = new_spindles
+                  , instSpindles = calcSpindleUsage t inst
                   }
   where new_count = Instance.applyIfOnline inst (+ Instance.vcpus inst)
                     (uCpu t )
-        new_spindles = instSpindles t + if Instance.usesLocalStorage inst
-                                          then 1 else 0
 
 -- | Assigns an instance to a node as secondary without other updates.
 setSec :: Node -> Instance.Instance -> Node
 setSec t inst = t { sList = Instance.idx inst:sList t
                   , utilLoad = old_load { T.dskWeight = T.dskWeight old_load +
                                           T.dskWeight (Instance.util inst) }
-                  , instSpindles = new_spindles
+                  , instSpindles = calcSpindleUsage t inst
                   }
   where old_load = utilLoad t
-        new_spindles = instSpindles t + if Instance.usesLocalStorage inst
-                                          then 1 else 0
 
 -- | Computes the new 'pDsk' value, handling nodes without local disk
 -- storage (we consider all their disk used).