Revision f87c9f5d

b/htools/Ganeti/HTools/Node.hs
185 185
conflictingPrimaries :: Node -> Int
186 186
conflictingPrimaries (Node { pTags = t }) = Foldable.sum t - Map.size t
187 187

  
188
-- | Helper function to increment a base value depending on the passed
189
-- boolean argument.
190
incIf :: (Num a) => Bool -> a -> a -> a
191
incIf True  base delta = base + delta
192
incIf False base _     = base
193

  
194
-- | Helper function to decrement a base value depending on the passed
195
-- boolean argument.
196
decIf :: (Num a) => Bool -> a -> a -> a
197
decIf True  base delta = base - delta
198
decIf False base _     = base
199

  
188 200
-- * Initialization functions
189 201

  
190 202
-- | Create a new node.
......
336 348
removePri :: Node -> Instance.Instance -> Node
337 349
removePri t inst =
338 350
  let iname = Instance.idx inst
351
      i_online = Instance.instanceNotOffline inst
352
      uses_disk = Instance.usesLocalStorage inst
339 353
      new_plist = delete iname (pList t)
340
      new_mem = Instance.applyIfOnline inst (+ Instance.mem inst) (fMem t)
341
      new_dsk = fDsk t + Instance.dsk inst
354
      new_mem = incIf i_online (fMem t) (Instance.mem inst)
355
      new_dsk = incIf uses_disk (fDsk t) (Instance.dsk inst)
342 356
      new_mp = fromIntegral new_mem / tMem t
343 357
      new_dp = fromIntegral new_dsk / tDsk t
344 358
      new_failn1 = new_mem <= rMem t
345
      new_ucpu = Instance.applyIfOnline inst
346
                 (\x -> x - Instance.vcpus inst) (uCpu t)
359
      new_ucpu = decIf i_online (uCpu t) (Instance.vcpus inst)
347 360
      new_rcpu = fromIntegral new_ucpu / tCpu t
348 361
      new_load = utilLoad t `T.subUtil` Instance.util inst
349 362
  in t { pList = new_plist, fMem = new_mem, fDsk = new_dsk
......
355 368
removeSec :: Node -> Instance.Instance -> Node
356 369
removeSec t inst =
357 370
  let iname = Instance.idx inst
371
      uses_disk = Instance.usesLocalStorage inst
358 372
      cur_dsk = fDsk t
359 373
      pnode = Instance.pNode inst
360 374
      new_slist = delete iname (sList t)
361
      new_dsk = if Instance.usesLocalStorage inst
362
                  then cur_dsk + Instance.dsk inst
363
                  else cur_dsk
375
      new_dsk = incIf uses_disk cur_dsk (Instance.dsk inst)
364 376
      old_peers = peers t
365 377
      old_peem = P.find pnode old_peers
366
      new_peem =  if Instance.usesSecMem inst
367
                    then old_peem - Instance.mem inst
368
                    else old_peem
378
      new_peem = decIf (Instance.usesSecMem inst) old_peem (Instance.mem inst)
369 379
      new_peers = if new_peem > 0
370 380
                    then P.add pnode new_peem old_peers
371 381
                    else P.remove pnode old_peers
......
399 409
                               -- or a failure mode
400 410
addPriEx force t inst =
401 411
  let iname = Instance.idx inst
412
      i_online = Instance.instanceNotOffline inst
402 413
      uses_disk = Instance.usesLocalStorage inst
403 414
      cur_dsk = fDsk t
404
      new_mem = Instance.applyIfOnline inst
405
                (\x -> x - Instance.mem inst) (fMem t)
406
      new_dsk = if uses_disk
407
                  then cur_dsk - Instance.dsk inst
408
                  else cur_dsk
415
      new_mem = decIf i_online (fMem t) (Instance.mem inst)
416
      new_dsk = decIf uses_disk cur_dsk (Instance.dsk inst)
409 417
      new_failn1 = new_mem <= rMem t
410
      new_ucpu = Instance.applyIfOnline inst (+ Instance.vcpus inst) (uCpu t)
418
      new_ucpu = incIf i_online (uCpu t) (Instance.vcpus inst)
411 419
      new_pcpu = fromIntegral new_ucpu / tCpu t
412 420
      new_dp = fromIntegral new_dsk / tDsk t
413 421
      l_cpu = T.iPolicyVcpuRatio $ iPolicy t

Also available in: Unified diff