Revision 929b60d8 htools/Ganeti/HTools/Node.hs

b/htools/Ganeti/HTools/Node.hs
266 266
buildPeers t il =
267 267
    let mdata = map
268 268
                (\i_idx -> let inst = Container.find i_idx il
269
                           in (Instance.pNode inst, Instance.mem inst))
269
                               mem = if Instance.auto_balance inst
270
                                     then Instance.mem inst
271
                                     else 0
272
                           in (Instance.pNode inst, mem))
270 273
                (sList t)
271 274
        pmap = P.accumArray (+) mdata
272 275
        new_rmem = computeMaxRes pmap
......
329 332
        new_dsk = fDsk t + Instance.dsk inst
330 333
        old_peers = peers t
331 334
        old_peem = P.find pnode old_peers
332
        new_peem =  old_peem - Instance.mem inst
335
        new_peem =  if Instance.auto_balance inst
336
                    then old_peem - Instance.mem inst
337
                    else old_peem
333 338
        new_peers = if new_peem > 0
334 339
                    then P.add pnode new_peem old_peers
335 340
                    else P.remove pnode old_peers
......
402 407
        old_peers = peers t
403 408
        old_mem = fMem t
404 409
        new_dsk = fDsk t - Instance.dsk inst
405
        new_peem = P.find pdx old_peers + Instance.mem inst
410
        secondary_needed_mem = if Instance.auto_balance inst
411
                               then Instance.mem inst
412
                               else 0
413
        new_peem = P.find pdx old_peers + secondary_needed_mem
406 414
        new_peers = P.add pdx new_peem old_peers
407 415
        new_rmem = max (rMem t) new_peem
408 416
        new_prem = fromIntegral new_rmem / tMem t
......
415 423
    in case () of
416 424
         _ | new_dsk <= 0 -> T.OpFail T.FailDisk
417 425
           | mDsk t > new_dp && strict -> T.OpFail T.FailDisk
418
           | Instance.mem inst >= old_mem && strict -> T.OpFail T.FailMem
426
           | secondary_needed_mem >= old_mem && strict -> T.OpFail T.FailMem
419 427
           | new_failn1 && not (failN1 t) && strict -> T.OpFail T.FailMem
420 428
           | otherwise ->
421 429
               let new_slist = iname:sList t

Also available in: Unified diff