With the introduction of forthcoming instances, htools will
consider two memory states: the memory usage now, and the
future one, when all forthcoming one, when all instances are
created and started. In particular, it is not necessary,
and in fact harmful, to reserve the memory of currently down
instances by subtracting it from the current free memory at
the IAllocator interface. IAllocators are supposed to take future
memory usage into account in the same way as they are supposed
to ensure N+1 redundancy.

Signed-off-by: Klaus Aehlig <[email protected]>
Reviewed-by: Brian Foley <[email protected]>

Cherry-picked-from: eacfdba57f24
Signed-off-by: Klaus Aehlig <[email protected]>
---
 lib/masterd/iallocator.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/masterd/iallocator.py b/lib/masterd/iallocator.py
index 728a02b..a94d880 100644
--- a/lib/masterd/iallocator.py
+++ b/lib/masterd/iallocator.py
@@ -696,9 +696,9 @@ class IAllocator(object):
           i_used_mem = int(node_instances_info[node_uuid]
                            .payload[iinfo.name]["memory"])
         i_mem_diff = beinfo[constants.BE_MAXMEM] - i_used_mem
-        mem_free -= max(0, i_mem_diff)
-
-        if iinfo.admin_state == constants.ADMINST_UP:
+        if iinfo.admin_state == constants.ADMINST_UP \
+            and not iinfo.forthcoming:
+          mem_free -= max(0, i_mem_diff)
           i_p_up_mem += beinfo[constants.BE_MAXMEM]
     return (i_p_mem, i_p_up_mem, mem_free)
 
-- 
2.7.0.rc3.207.g0ac5344

Reply via email to