Revision 4bc33d60 Ganeti/HTools/Cluster.hs
b/Ganeti/HTools/Cluster.hs | ||
---|---|---|
7 | 7 |
|
8 | 8 |
{- |
9 | 9 |
|
10 |
Copyright (C) 2009, 2010 Google Inc. |
|
10 |
Copyright (C) 2009, 2010, 2011 Google Inc.
|
|
11 | 11 |
|
12 | 12 |
This program is free software; you can redistribute it and/or modify |
13 | 13 |
it under the terms of the GNU General Public License as published by |
... | ... | |
58 | 58 |
, tryAlloc |
59 | 59 |
, tryMGAlloc |
60 | 60 |
, tryReloc |
61 |
, tryMGReloc |
|
61 | 62 |
, tryEvac |
62 | 63 |
, collapseFailures |
63 | 64 |
-- * Allocation functions |
... | ... | |
718 | 719 |
\destinations required (" ++ show reqn ++ |
719 | 720 |
"), only one supported" |
720 | 721 |
|
722 |
tryMGReloc :: (Monad m) => |
|
723 |
Group.List -- ^ The group list |
|
724 |
-> Node.List -- ^ The node list |
|
725 |
-> Instance.List -- ^ The instance list |
|
726 |
-> Idx -- ^ The index of the instance to move |
|
727 |
-> Int -- ^ The number of nodes required |
|
728 |
-> [Ndx] -- ^ Nodes which should not be used |
|
729 |
-> m AllocSolution -- ^ Solution list |
|
730 |
tryMGReloc _ mgnl mgil xid ncount ex_ndx = do |
|
731 |
let groups = splitCluster mgnl mgil |
|
732 |
-- TODO: we only relocate inside the group for now |
|
733 |
inst = Container.find xid mgil |
|
734 |
(nl, il) <- case lookup (instancePriGroup mgnl inst) groups of |
|
735 |
Nothing -> fail $ "Cannot find group for instance " ++ |
|
736 |
Instance.name inst |
|
737 |
Just v -> return v |
|
738 |
tryReloc nl il xid ncount ex_ndx |
|
739 |
|
|
721 | 740 |
-- | Try to evacuate a list of nodes. |
722 | 741 |
tryEvac :: (Monad m) => |
723 | 742 |
Node.List -- ^ The node list |
... | ... | |
984 | 1003 |
show pgroup ++ ", secondary " ++ show sgroup) |
985 | 1004 |
else return pgroup |
986 | 1005 |
|
1006 |
-- | Computes the group of an instance per the primary node |
|
1007 |
instancePriGroup :: Node.List -> Instance.Instance -> Gdx |
|
1008 |
instancePriGroup nl i = |
|
1009 |
let pnode = Container.find (Instance.pNode i) nl |
|
1010 |
in Node.group pnode |
|
1011 |
|
|
987 | 1012 |
-- | Compute the list of badly allocated instances (split across node |
988 | 1013 |
-- groups) |
989 | 1014 |
findSplitInstances :: Node.List -> Instance.List -> [Instance.Instance] |
Also available in: Unified diff