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