In the presence of shared storage, global N+1 redundancy has
to be checked. Therefore, make hcheck report the number of nodes
with instances that cannot immediately be restarted in case
of node failure.

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

diff --git a/src/Ganeti/HTools/Program/Hcheck.hs 
b/src/Ganeti/HTools/Program/Hcheck.hs
index c6ce982..9c93bd4 100644
--- a/src/Ganeti/HTools/Program/Hcheck.hs
+++ b/src/Ganeti/HTools/Program/Hcheck.hs
@@ -39,6 +39,7 @@ module Ganeti.HTools.Program.Hcheck
   ) where
 
 import Control.Monad
+import qualified Data.IntMap as IntMap
 import Data.List (transpose)
 import System.Exit
 import Text.Printf (printf)
@@ -48,6 +49,7 @@ import qualified Ganeti.HTools.Container as Container
 import qualified Ganeti.HTools.Cluster as Cluster
 import qualified Ganeti.HTools.Cluster.Metrics as Metrics
 import qualified Ganeti.HTools.Cluster.Utils as ClusterUtils
+import qualified Ganeti.HTools.GlobalN1 as GlobalN1
 import qualified Ganeti.HTools.Group as Group
 import qualified Ganeti.HTools.Node as Node
 import qualified Ganeti.HTools.Instance as Instance
@@ -120,6 +122,7 @@ commonData =[ ("N1_FAIL", "Nodes not N+1 happy")
             , ("CONFLICT_TAGS", "Nodes with conflicting instances")
             , ("OFFLINE_PRI", "Instances having the primary node offline")
             , ("OFFLINE_SEC", "Instances having a secondary node offline")
+            , ("GN1_FAIL", "Nodes not directly evacuateable")
             ]
 
 -- | Data showed per group.
@@ -251,6 +254,8 @@ perGroupChecks gl (gidx, (nl, il)) =
   let grp = Container.find gidx gl
       offnl = filter Node.offline (Container.elems nl)
       n1violated = length . fst $ Cluster.computeBadItems nl il
+      gn1fail = length . filter (not . GlobalN1.canEvacuateNode (nl, il))
+                  $ IntMap.elems nl
       conflicttags = length $ filter (>0)
                      (map Node.conflictingPrimaries (Container.elems nl))
       offline_pri = sum . map length $ map Node.pList offnl
@@ -260,6 +265,7 @@ perGroupChecks gl (gidx, (nl, il)) =
                    , conflicttags
                    , offline_pri
                    , offline_sec
+                   , gn1fail
                    ]
   in ((grp, score), groupstats)
 
-- 
2.2.0.rc0.207.ga3a616c

Reply via email to