Revision 18b6444b

b/Ganeti/HTools/Node.hs
114 114
noSecondary :: T.Ndx
115 115
noSecondary = -1
116 116

  
117
-- | No limit value
118
noLimit :: Double
119
noLimit = -1
120

  
117 121
-- * Initialization functions
118 122

  
119 123
-- | Create a new node.
......
146 150
      p_cpu = 0,
147 151
      offline = offline_init,
148 152
      x_mem = 0,
149
      m_dsk = -1,
150
      m_cpu = -1
153
      m_dsk = noLimit,
154
      m_cpu = noLimit
151 155
    }
152 156

  
153 157
-- | Changes the index.
......
228 232
failHealth :: Int -> Int -> Bool
229 233
failHealth new_mem new_dsk = new_mem <= 0 || new_dsk <= 0
230 234

  
235
-- | Given new limits, check if any of them are overtaken
236
failLimits :: Node -> Double -> Double -> Bool
237
failLimits t new_dsk new_cpu =
238
    let l_dsk = m_dsk t
239
        l_cpu = m_cpu t
240
    in (l_dsk > new_dsk) || (l_cpu >= 0 && l_cpu < new_cpu)
241

  
231 242
-- | Removes a primary instance.
232 243
removePri :: Node -> Instance.Instance -> Node
233 244
removePri t inst =
......
276 287
        new_failn1 = computeFailN1 (r_mem t) new_mem new_dsk
277 288
        new_ucpu = (u_cpu t) + (Instance.vcpus inst)
278 289
        new_pcpu = (fromIntegral new_ucpu) / (t_cpu t)
290
        new_dp = (fromIntegral new_dsk) / (t_dsk t)
279 291
    in
280
      if (failHealth new_mem new_dsk) || (new_failn1 && not (failN1 t)) then
292
      if (failHealth new_mem new_dsk) || (new_failn1 && not (failN1 t)) ||
293
         (failLimits t new_dp new_pcpu)
294
      then
281 295
        Nothing
282 296
      else
283 297
        let new_plist = iname:(plist t)
284 298
            new_mp = (fromIntegral new_mem) / (t_mem t)
285
            new_dp = (fromIntegral new_dsk) / (t_dsk t)
286 299
        in
287 300
        Just t {plist = new_plist, f_mem = new_mem, f_dsk = new_dsk,
288 301
                failN1 = new_failn1, p_mem = new_mp, p_dsk = new_dp,
......
299 312
        new_peers = PeerMap.add pdx new_peem old_peers
300 313
        new_rmem = max (r_mem t) new_peem
301 314
        new_prem = (fromIntegral new_rmem) / (t_mem t)
302
        new_failn1 = computeFailN1 new_rmem old_mem new_dsk in
303
    if (failHealth old_mem new_dsk) || (new_failn1 && not (failN1 t)) then
304
        Nothing
305
    else
306
        let new_slist = iname:(slist t)
307
            new_dp = (fromIntegral new_dsk) / (t_dsk t)
308
        in
309
        Just t {slist = new_slist, f_dsk = new_dsk,
310
                peers = new_peers, failN1 = new_failn1,
311
                r_mem = new_rmem, p_dsk = new_dp,
312
                p_rem = new_prem}
315
        new_failn1 = computeFailN1 new_rmem old_mem new_dsk
316
        new_dp = (fromIntegral new_dsk) / (t_dsk t)
317
    in if (failHealth old_mem new_dsk) || (new_failn1 && not (failN1 t)) ||
318
          (failLimits t new_dp noLimit)
319
       then
320
           Nothing
321
       else
322
           let new_slist = iname:(slist t)
323
           in
324
             Just t {slist = new_slist, f_dsk = new_dsk,
325
                     peers = new_peers, failN1 = new_failn1,
326
                     r_mem = new_rmem, p_dsk = new_dp,
327
                     p_rem = new_prem}
313 328

  
314 329
-- * Display functions
315 330

  

Also available in: Unified diff