On Fri, Apr 17, 2015 at 06:46:36PM +0200, 'Klaus Aehlig' via ganeti-devel wrote:
Add a convenience function to test if an allocation element
yields a globally N+1 redundant situation, i.e., if all nodes
can be evacuated.

Signed-off-by: Klaus Aehlig <[email protected]>
---
src/Ganeti/HTools/GlobalN1.hs | 13 +++++++++++++
1 file changed, 13 insertions(+)

diff --git a/src/Ganeti/HTools/GlobalN1.hs b/src/Ganeti/HTools/GlobalN1.hs
index 3e8135e..bde0c03 100644
--- a/src/Ganeti/HTools/GlobalN1.hs
+++ b/src/Ganeti/HTools/GlobalN1.hs
@@ -34,14 +34,17 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

module Ganeti.HTools.GlobalN1
  ( canEvacuateNode
+  , allocGlobalN1
  ) where

import Control.Monad (foldM)
import qualified Data.IntMap as IntMap
+import qualified Data.Foldable as Foldable
import Data.List (partition)

import Ganeti.BasicTypes (isOk, Result)
import Ganeti.HTools.AlgorithmParams (AlgorithmOptions(..), defaultOptions)
+import qualified Ganeti.HTools.Cluster.AllocationSolution as AllocSol
import qualified Ganeti.HTools.Cluster.Evacuate as Evacuate
import Ganeti.HTools.Cluster.Moves (move)
import qualified Ganeti.HTools.Container as Container
@@ -83,3 +86,13 @@ canEvacuateNode (nl, il) n = isOk $ do
  _ <- foldM (evac (Node.group n') . map Node.idx $ IntMap.elems nl'')
             (nl'',il') sharedIdxs
  return ()
+
+-- | Predicate on wheter an allocation element leads to a globally N+1 
redundant
+-- state.
+allocGlobalN1 :: Node.List -- ^ the original list of nodes
+              -> Instance.List -- ^ the original list of instances
+              -> AllocSol.GenericAllocElement a -> Bool
+allocGlobalN1 nl il alloc =
+  let il' = AllocSol.updateIl il $ Just alloc
+      nl' = AllocSol.extractNl nl il $ Just alloc
+  in Foldable.all (canEvacuateNode (nl', il')) nl'
--
2.2.0.rc0.207.ga3a616c


LGTM

Reply via email to