From 47a8bade4a4ce98320bd655e09ccae54ba8fc3b9 Mon Sep 17 00:00:00 2001
From: Iustin Pop <iustin@google.com>
Date: Sun, 22 Mar 2009 00:12:29 +0100
Subject: [PATCH] Pass actual types to node/instance constructors
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This patch changes the parameters passed to the node and instance
constructors from generic Strings (which are then parsed via β€œread”) to
the actual used types, by converting them earlier in Cluster.loadData.
---
 Ganeti/HTools/Cluster.hs  | 15 ++++++++------
 Ganeti/HTools/Instance.hs | 17 ++++++++--------
 Ganeti/HTools/Node.hs     | 41 +++++++++++++++++----------------------
 3 files changed, 36 insertions(+), 37 deletions(-)

diff --git a/Ganeti/HTools/Cluster.hs b/Ganeti/HTools/Cluster.hs
index 93a5ce506..31b9e4ec8 100644
--- a/Ganeti/HTools/Cluster.hs
+++ b/Ganeti/HTools/Cluster.hs
@@ -750,16 +750,19 @@ loadData :: String -- ^ Node data in text format
              String, NameList, NameList)
 loadData ndata idata =
     let
-    {- node file: name mem disk -}
+    {- node file: name t_mem f_mem t_disk f_disk -}
         (ktn, nl) = loadTabular ndata
-                    (\ (i:jt:jf:kt:kf:[]) -> (i, Node.create jt jf kt kf))
+                    (\ (name:tm:fm:td:fd:[]) ->
+                         (name,
+                          Node.create (read tm) (read fm) (read td) (read fd)))
                     Node.setIdx
     {- instance file: name mem disk pnode snode -}
         (kti, il) = loadTabular idata
-                    (\ (i:j:k:l:m:[]) -> (i,
-                                           Instance.create j k
-                                               (fromJust $ lookup l ktn)
-                                               (fromJust $ lookup m ktn)))
+                    (\ (name:mem:dsk:pnode:snode:[]) ->
+                         (name,
+                          Instance.create (read mem) (read dsk)
+                              (fromJust $ lookup pnode ktn)
+                              (fromJust $ lookup snode ktn)))
                     Instance.setIdx
         nl2 = fixNodes nl il
         il3 = Container.fromAssocList il
diff --git a/Ganeti/HTools/Instance.hs b/Ganeti/HTools/Instance.hs
index 0e5d965cb..4dcb28d4d 100644
--- a/Ganeti/HTools/Instance.hs
+++ b/Ganeti/HTools/Instance.hs
@@ -13,14 +13,15 @@ data Instance = Instance { mem :: Int   -- ^ memory of the instance
                          , idx :: Int   -- ^ internal index for book-keeping
                          } deriving (Show)
 
-create :: String -> String -> Int -> Int -> Instance
-create mem_init dsk_init pn sn = Instance {
-                              mem = read mem_init,
-                              dsk = read dsk_init,
-                              pnode = pn,
-                              snode = sn,
-                              idx = -1
-                            }
+create :: Int -> Int -> Int -> Int -> Instance
+create mem_init dsk_init pn sn =
+    Instance {
+          mem = mem_init,
+          dsk = dsk_init,
+          pnode = pn,
+          snode = sn,
+          idx = -1
+        }
 
 -- | Changes the primary node of the instance.
 setPri :: Instance  -- ^ the original instance
diff --git a/Ganeti/HTools/Node.hs b/Ganeti/HTools/Node.hs
index e667ce31a..52197781e 100644
--- a/Ganeti/HTools/Node.hs
+++ b/Ganeti/HTools/Node.hs
@@ -59,30 +59,25 @@ The index and the peers maps are empty, and will be need to be update
 later via the 'setIdx' and 'buildPeers' functions.
 
 -}
-create :: String -> String -> String -> String -> Node
+create :: Double -> Int -> Double -> Int -> Node
 create mem_t_init mem_f_init dsk_t_init dsk_f_init =
-    let mem_t = read mem_t_init
-        mem_f = read mem_f_init
-        dsk_t = read dsk_t_init
-        dsk_f = read dsk_f_init
-    in
-      Node
-      {
-       t_mem = read mem_t_init,
-       f_mem = read mem_f_init,
-       t_dsk = read dsk_t_init,
-       f_dsk = read dsk_f_init,
-       plist = [],
-       slist = [],
-       failN1 = True,
-       idx = -1,
-       peers = PeerMap.empty,
-       r_mem = 0,
-       p_mem = (fromIntegral mem_f) / (fromIntegral mem_t),
-       p_dsk = (fromIntegral dsk_f) / (fromIntegral dsk_t),
-       p_rem = 0,
-       offline = False
-      }
+    Node
+    {
+      t_mem = mem_t_init,
+      f_mem = mem_f_init,
+      t_dsk = dsk_t_init,
+      f_dsk = dsk_f_init,
+      plist = [],
+      slist = [],
+      failN1 = True,
+      idx = -1,
+      peers = PeerMap.empty,
+      r_mem = 0,
+      p_mem = (fromIntegral mem_f_init) / mem_t_init,
+      p_dsk = (fromIntegral dsk_f_init) / dsk_t_init,
+      p_rem = 0,
+      offline = False
+    }
 
 -- | Changes the index.
 -- This is used only during the building of the data structures.
-- 
GitLab