From d7339c999b51631afd0cf50d65925d0f1dde78d7 Mon Sep 17 00:00:00 2001 From: Iustin Pop <iustin@google.com> Date: Fri, 23 Sep 2011 14:47:05 +0900 Subject: [PATCH] Abstract comparison of AllocElements This is moved outside of the concatAllocs as it will be needed in another place in the future. Signed-off-by: Iustin Pop <iustin@google.com> Reviewed-by: Agata Murawska <agatamurawska@google.com> --- htools/Ganeti/HTools/Cluster.hs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/htools/Ganeti/HTools/Cluster.hs b/htools/Ganeti/HTools/Cluster.hs index bb00ce141..d8c2713f7 100644 --- a/htools/Ganeti/HTools/Cluster.hs +++ b/htools/Ganeti/HTools/Cluster.hs @@ -600,21 +600,25 @@ collapseFailures flst = map (\k -> (k, foldl' (\a e -> if e == k then a + 1 else a) 0 flst)) [minBound..maxBound] +-- | Compares two Maybe AllocElement and chooses the besst score. +bestAllocElement :: Maybe Node.AllocElement + -> Maybe Node.AllocElement + -> Maybe Node.AllocElement +bestAllocElement a Nothing = a +bestAllocElement Nothing b = b +bestAllocElement a@(Just (_, _, _, ascore)) b@(Just (_, _, _, bscore)) = + if ascore < bscore then a else b + -- | Update current Allocation solution and failure stats with new -- elements. concatAllocs :: AllocSolution -> OpResult Node.AllocElement -> AllocSolution concatAllocs as (OpFail reason) = as { asFailures = reason : asFailures as } -concatAllocs as (OpGood ns@(_, _, _, nscore)) = +concatAllocs as (OpGood ns) = let -- Choose the old or new solution, based on the cluster score cntok = asAllocs as osols = asSolution as - nsols = case osols of - Nothing -> Just ns - Just (_, _, _, oscore) -> - if oscore < nscore - then osols - else Just ns + nsols = bestAllocElement osols (Just ns) nsuc = cntok + 1 -- Note: we force evaluation of nsols here in order to keep the -- memory profile low - we know that we will need nsols for sure -- GitLab