Commit d6c76bd5 authored by Iustin Pop's avatar Iustin Pop

tryAlloc: restrict valid node pairs to same-group

This is a cheap way to make capacity calculation work well with
multi-group clusters.

There are two alternatives in implementing this:

- we can split the cluster into groups, run individual group
  allocation, and then try to recombine the groups; but this doesn't
  represent the allocation as it would happen in real life, when
  groups are not filled in succession, and would complicate TSPECS
  ordering
- or add this "hack" which does the allocation look at all node pairs
  (per group) at each step, which makes it correct from the point of
  view of ordering of allocations w.r.t. groups

For now, we take the second choice, with the future possibility of
revisiting the first one.
Signed-off-by: default avatarIustin Pop <iustin@google.com>
Reviewed-by: default avatarMichael Hanselmann <hansmi@google.com>
Reviewed-by: default avatarGuido Trotter <ultrotter@google.com>
parent 40ee14bc
......@@ -624,7 +624,8 @@ tryAlloc :: (Monad m) =>
tryAlloc nl _ inst 2 =
let all_nodes = getOnline nl
all_pairs = liftM2 (,) all_nodes all_nodes
ok_pairs = filter (\(x, y) -> Node.idx x /= Node.idx y) all_pairs
ok_pairs = filter (\(x, y) -> Node.idx x /= Node.idx y &&
Node.group x == Node.group y) all_pairs
sols = foldl' (\cstate (p, s) ->
concatAllocs cstate $ allocateOnPair nl inst p s
) emptySolution ok_pairs
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment