Please add a comment describing what is "sor" somewhere in the Luxi.hs because it's not clear.

Rest LGTM.

On 10/26/2015 03:01 PM, 'Klaus Aehlig' via ganeti-devel wrote:
That is, make the luxi backend not ask for the operational memory,
but only for the backend parameter, if this option is given.

Signed-off-by: Klaus Aehlig <[email protected]>
---
  src/Ganeti/HTools/Backend/Luxi.hs  | 33 ++++++++++++++++++---------------
  src/Ganeti/HTools/ExtLoader.hs     |  2 +-
  src/Ganeti/HTools/Program/Hscan.hs |  2 +-
  src/Ganeti/MaintD/Server.hs        |  2 +-
  4 files changed, 21 insertions(+), 18 deletions(-)

diff --git a/src/Ganeti/HTools/Backend/Luxi.hs 
b/src/Ganeti/HTools/Backend/Luxi.hs
index aeb3fe9..215fd5c 100644
--- a/src/Ganeti/HTools/Backend/Luxi.hs
+++ b/src/Ganeti/HTools/Backend/Luxi.hs
@@ -135,24 +135,25 @@ queryGroups :: L.Client -> IO (Result JSValue)
  queryGroups = liftM errToResult . L.callMethod queryGroupsMsg
-- | Parse a instance list in JSON format.
-getInstances :: NameAssoc
+getInstances :: Bool
+             -> NameAssoc
               -> JSValue
               -> Result [(String, Instance.Instance)]
-getInstances ktn arr = L.extractArray arr >>= mapM (parseInstance ktn)
+getInstances sor ktn arr = L.extractArray arr >>= mapM (parseInstance sor ktn)
-- | Construct an instance from a JSON object.
-parseInstance :: NameAssoc
+parseInstance :: Bool
+              -> NameAssoc
                -> [(JSValue, JSValue)]
                -> Result (String, Instance.Instance)
-parseInstance ktn [ name, disk, mem, vcpus
-                  , status, pnode, snodes, tags, oram
-                  , auto_balance, disk_template, su
-                  , dsizes, dspindles, forthcoming ] = do
+parseInstance sor ktn
+  [ name, disk, mem, vcpus, status, pnode, snodes, tags, oram
+  , auto_balance, disk_template, su, dsizes, dspindles, forthcoming ] = do
    xname <- annotateResult "Parsing new instance" (L.fromJValWithStatus name)
    let convert a = genericConvert "Instance" xname a
    xdisk <- convert "disk_usage" disk
-  xmem <- case oram of -- FIXME: remove the "guessing"
-            (_, JSRational _ _) -> convert "oper_ram" oram
+  xmem <- case (sor, oram) of -- FIXME: remove the "guessing"
+            (False, (_, JSRational _ _)) -> convert "oper_ram" oram
              _ -> convert "be/memory" mem
    xvcpus <- convert "be/vcpus" vcpus
    xpnode <- convert "pnode" pnode >>= lookupNode ktn xname
@@ -174,7 +175,7 @@ parseInstance ktn [ name, disk, mem, vcpus
               xforthcoming
    return (xname, inst)
-parseInstance _ v = fail ("Invalid instance query result: " ++ show v)
+parseInstance _ _ v = fail ("Invalid instance query result: " ++ show v)
-- | Parse a node list in JSON format.
  getNodes :: NameAssoc -> JSValue -> Result [(String, Node.Node)]
@@ -276,20 +277,22 @@ readData master =
-- | Converts the output of 'readData' into the internal cluster
  -- representation.
-parseData :: (Result JSValue, Result JSValue, Result JSValue, Result JSValue)
+parseData :: Bool
+          -> (Result JSValue, Result JSValue, Result JSValue, Result JSValue)
            -> Result ClusterData
-parseData (groups, nodes, instances, cinfo) = do
+parseData sor (groups, nodes, instances, cinfo) = do
    group_data <- groups >>= getGroups
    let (group_names, group_idx) = assignIndices group_data
    node_data <- nodes >>= getNodes group_names
    let (node_names, node_idx) = assignIndices node_data
-  inst_data <- instances >>= getInstances node_names
+  inst_data <- instances >>= getInstances sor node_names
    let (_, inst_idx) = assignIndices inst_data
    (ctags, cpol, master) <- cinfo >>= getClusterData
    node_idx' <- setMaster node_names node_idx master
    return (ClusterData group_idx node_idx' inst_idx ctags cpol)
-- | Top level function for data loading.
-loadData :: String -- ^ Unix socket to use as source
+loadData :: Bool -- ^ use only state-of-record data
+         -> String -- ^ Unix socket to use as source
           -> IO (Result ClusterData)
-loadData = fmap parseData . readData
+loadData sor = fmap (parseData sor) . readData
diff --git a/src/Ganeti/HTools/ExtLoader.hs b/src/Ganeti/HTools/ExtLoader.hs
index b322cb3..64972ef 100644
--- a/src/Ganeti/HTools/ExtLoader.hs
+++ b/src/Ganeti/HTools/ExtLoader.hs
@@ -114,7 +114,7 @@ loadExternalData opts = do
    input_data <-
      case () of
        _ | setRapi -> wrapIO $ Rapi.loadData mhost
-        | setLuxi -> wrapIO . Luxi.loadData $ fromJust lsock
+        | setLuxi -> wrapIO . Luxi.loadData (optSoR opts) $ fromJust lsock
          | setSim -> Simu.loadData simdata
          | setFile -> wrapIO . Text.loadData $ fromJust tfile
          | setIAllocSrc -> wrapIO . IAlloc.loadData $ fromJust iallocsrc
diff --git a/src/Ganeti/HTools/Program/Hscan.hs 
b/src/Ganeti/HTools/Program/Hscan.hs
index 1fb6a55..f7fdaf3 100644
--- a/src/Ganeti/HTools/Program/Hscan.hs
+++ b/src/Ganeti/HTools/Program/Hscan.hs
@@ -163,7 +163,7 @@ main opts clusters = do
           def_socket <- Path.defaultQuerySocket
           let lsock = fromMaybe def_socket (optLuxi opts)
           let name = local
-         input_data <- Luxi.loadData lsock
+         input_data <- Luxi.loadData (optSoR opts) lsock
           result <- writeData nlen name opts input_data
           unless result . exitWith $ ExitFailure 2
diff --git a/src/Ganeti/MaintD/Server.hs b/src/Ganeti/MaintD/Server.hs
index 670d2bb..313b924 100644
--- a/src/Ganeti/MaintD/Server.hs
+++ b/src/Ganeti/MaintD/Server.hs
@@ -107,7 +107,7 @@ loadClusterData :: ResultT String IO ClusterData
  loadClusterData = do
    now <- liftIO getClockTime
    socket <- liftIO Path.defaultQuerySocket
-  either_inp <-  liftIO . tryIOError $ Luxi.loadData socket
+  either_inp <-  liftIO . tryIOError $ Luxi.loadData False socket
    input_data <- mkResultT $ case either_inp of
                    Left e -> do
                      let msg = show e

Reply via email to