From 9dc6023f3f671063125e3b6c5e632dfbca4af4aa Mon Sep 17 00:00:00 2001
From: Iustin Pop <iustin@google.com>
Date: Sun, 15 Feb 2009 14:48:39 +0100
Subject: [PATCH] Simplify the checkInstanceMove function

This patch flattens the two folds into one, by simply building the whole
list of moves instead  of the double recursion (nodes and the each
node's moves). This has no functional change, but it's much cleaner.
---
 src/Cluster.hs | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

diff --git a/src/Cluster.hs b/src/Cluster.hs
index be811db1e..1cf515348 100644
--- a/src/Cluster.hs
+++ b/src/Cluster.hs
@@ -397,20 +397,13 @@ checkInstanceMove nodes_idx ini_tbl target =
     let
         opdx = Instance.pnode target
         osdx = Instance.snode target
-        nodes = filter (\idx -> idx /= opdx && idx /= osdx)
-                nodes_idx
+        nodes = filter (\idx -> idx /= opdx && idx /= osdx) nodes_idx
         aft_failover = checkSingleStep ini_tbl target ini_tbl Failover
+        all_moves = concatMap (\idx -> [ReplacePrimary idx,
+                                        ReplaceSecondary idx]) nodes
     in
       -- iterate over the possible nodes for this instance
-      foldl'
-      (\ accu_p new_idx ->
-           let
-               pmoves = [ReplacePrimary new_idx,
-                         ReplaceSecondary new_idx]
-           in
-             foldl' -- while doing both possible moves
-             (checkSingleStep ini_tbl target) accu_p pmoves
-      ) aft_failover nodes
+      foldl' (checkSingleStep ini_tbl target) aft_failover all_moves
 
 -- | Compute the best next move.
 checkMove :: [Int]               -- ^ Allowed target node indices
-- 
GitLab