From 80b27509edc657fcebe20d7c86ef8f0fb1200bb4 Mon Sep 17 00:00:00 2001
From: Iustin Pop <iustin@google.com>
Date: Tue, 6 Mar 2012 22:32:40 +0200
Subject: [PATCH] Rework evacDrbdSecondaryInner to take the imove

Instead of hard-coding the instance move operation, let's accept is as
a parameter from the caller. This is the single thing that makes this
DRBD-specific, so removing it will help for future
patches. Furthermore, this abstract the imove op type into a single
place instead of two (the inner function and the nodeEvacInstance).

Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>
---
 htools/Ganeti/HTools/Cluster.hs | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/htools/Ganeti/HTools/Cluster.hs b/htools/Ganeti/HTools/Cluster.hs
index 92a1e629c..0b1617a80 100644
--- a/htools/Ganeti/HTools/Cluster.hs
+++ b/htools/Ganeti/HTools/Cluster.hs
@@ -898,13 +898,14 @@ nodeEvacInstance nl il ChangeSecondary
                  inst@(Instance.Instance {Instance.diskTemplate = DTDrbd8})
                  gdx avail_nodes =
   do
+    let op_fn = ReplaceSecondary
     (nl', inst', _, ndx) <- annotateResult "Can't find any good node" $
                             eitherToResult $
-                            foldl' (evacDrbdSecondaryInner nl inst gdx)
+                            foldl' (evacDrbdSecondaryInner nl inst gdx op_fn)
                             (Left "no nodes available") avail_nodes
     let idx = Instance.idx inst
         il' = Container.add idx inst' il
-        ops = iMoveToJob nl' il' idx (ReplaceSecondary ndx)
+        ops = iMoveToJob nl' il' idx (op_fn ndx)
     return (nl', il', ops)
 
 -- The algorithm for ChangeAll is as follows:
@@ -956,11 +957,12 @@ nodeEvacInstance nl il ChangeAll
 evacDrbdSecondaryInner :: Node.List -- ^ Cluster node list
                        -> Instance.Instance -- ^ Instance being evacuated
                        -> Gdx -- ^ The group index of the instance
+                       -> (Ndx -> IMove) -- ^ Operation constructor
                        -> EvacInnerState  -- ^ Current best solution
                        -> Ndx  -- ^ Node we're evaluating as new secondary
                        -> EvacInnerState -- ^ New best solution
-evacDrbdSecondaryInner nl inst gdx accu ndx =
-  case applyMove nl inst (ReplaceSecondary ndx) of
+evacDrbdSecondaryInner nl inst gdx op_fn accu ndx =
+  case applyMove nl inst (op_fn ndx) of
     OpFail fm ->
       case accu of
         Right _ -> accu
-- 
GitLab