From 92eacdd8cc67655e8e9e3a4ba583808a72d99a38 Mon Sep 17 00:00:00 2001 From: Agata Murawska <agatamurawska@google.com> Date: Tue, 26 Jun 2012 10:28:24 +0200 Subject: [PATCH] Print info about ability to rebalance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As suggested during offline discussion, this patch adds a new bash variable and description field in hcheck, which informs if the rebalance was possible. This is to determine if there are split instances on the cluster, in which case rebalance is impossible. Signed-off-by: Agata Murawska <agatamurawska@google.com> Reviewed-by: RenΓ© Nussbaumer <rn@google.com> --- htools/Ganeti/HTools/Program/Hcheck.hs | 42 +++++++++++++++++--------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/htools/Ganeti/HTools/Program/Hcheck.hs b/htools/Ganeti/HTools/Program/Hcheck.hs index 6ce561fbd..da39d1275 100644 --- a/htools/Ganeti/HTools/Program/Hcheck.hs +++ b/htools/Ganeti/HTools/Program/Hcheck.hs @@ -113,12 +113,24 @@ groupData = commonData ++ [("SCORE", "Group score")] -- | Data showed per cluster. clusterData :: [(String, String)] -clusterData = commonData ++ [("NEED_REBALANCE", "Cluster is not healthy")] +clusterData = commonData ++ + [ ("NEED_REBALANCE", "Cluster is not healthy") + , ("CAN_REBALANCE", "Possible to run rebalance") + ] + -- | Format a list of key, value as a shell fragment. printKeysHTC :: [(String, String)] -> IO () printKeysHTC = printKeys htcPrefix +-- | Prepare string from boolean value. +printBool :: Bool -- ^ Whether the result should be machine readable + -> Bool -- ^ Value to be converted to string + -> String +printBool True True = "1" +printBool True False = "0" +printBool False b = show b + -- | Print all the statistics on a group level. printGroupStats :: Int -> Bool -> Phase -> Gdx -> [Int] -> Double -> IO () printGroupStats _ True phase gidx stats score = do @@ -140,26 +152,27 @@ printGroupStats verbose False phase gidx stats score = do (zip groupData printstats) -- | Print all the statistics on a cluster (global) level. -printClusterStats :: Int -> Bool -> Phase -> [Int] -> IO (Bool) -printClusterStats _ True phase stats = do - let needrebal = sum stats - printstats = map (printf "%d") $ stats ++ [needrebal] - :: [String] +printClusterStats :: Int -> Bool -> Phase -> [Int] -> Bool -> IO (Bool) +printClusterStats _ True phase stats canrebal = do + let needrebal = sum stats > 0 + printstats = map (printf "%d") stats ++ + map (printBool True) [needrebal, canrebal] printkeys = map (printf "%s_%s_%s" (phasePrefix phase) (levelPrefix ClusterLvl)) (map fst clusterData) :: [String] printKeysHTC (zip printkeys printstats) - return $ needrebal > 0 + return needrebal -printClusterStats verbose False phase stats = do - let needrebal = sum stats - printstats = map (printf "%d") stats :: [String] +printClusterStats verbose False phase stats canrebal = do + let needrebal = sum stats > 0 + printstats = map (printf "%d") stats ++ + map (printBool False) [needrebal, canrebal] unless (verbose == 0) $ do printf "\nCluster statistics %s\n" (phaseDescription phase) :: IO () mapM_ (\(a,b) -> printf " %s: %s\n" (snd a) b :: IO ()) - (zip clusterData (printstats ++ [show (needrebal>0)])) - return $ needrebal > 0 + (zip clusterData printstats) + return needrebal {- | Check group for N+1 hapiness, conflicts of primaries on nodes and instances residing on offline nodes. @@ -233,7 +246,8 @@ main opts args = do groupsstats <- mapM (perGroupChecks verbose machineread Initial) splitcluster let clusterstats = map sum (transpose groupsstats) :: [Int] - needrebalance <- printClusterStats verbose machineread Initial clusterstats + canrebalance = length splitinstances == 0 + needrebalance <- printClusterStats verbose machineread Initial clusterstats canrebalance when nosimulation $ do unless (verbose == 0 || machineread) $ @@ -256,6 +270,6 @@ main opts args = do newgroupstats <- mapM (perGroupChecks verbose machineread Rebalanced) rebalancedcluster let newclusterstats = map sum (transpose newgroupstats) :: [Int] - _ <- printClusterStats verbose machineread Rebalanced newclusterstats + _ <- printClusterStats verbose machineread Rebalanced newclusterstats canrebalance printFinalHTC machineread -- GitLab