On Tue, Dec 21, 2010 at 16:35, Iustin Pop <ius...@google.com> wrote:

> This patch converts the backends and mergeData to the new ClusterData
> type.
> ---
>  Ganeti/HTools/IAlloc.hs |    2 +-
>  Ganeti/HTools/Loader.hs |    7 +++----
>  Ganeti/HTools/Luxi.hs   |    6 +++---
>  Ganeti/HTools/QC.hs     |    2 +-
>  Ganeti/HTools/Rapi.hs   |    6 +++---
>  Ganeti/HTools/Simu.hs   |   10 +++++-----
>  Ganeti/HTools/Text.hs   |    6 +++---
>  hscan.hs                |    2 +-
>  8 files changed, 20 insertions(+), 21 deletions(-)
>
> diff --git a/Ganeti/HTools/IAlloc.hs b/Ganeti/HTools/IAlloc.hs
> index e55d0e3..903801a 100644
> --- a/Ganeti/HTools/IAlloc.hs
> +++ b/Ganeti/HTools/IAlloc.hs
> @@ -130,7 +130,7 @@ parseData body = do
>   let (kti, il) = assignIndices iobj
>   -- cluster tags
>   ctags <- fromObj "cluster_tags" obj
> -  cdata <- mergeData [] [] [] (gl, nl, il, ctags)
> +  cdata <- mergeData [] [] [] (ClusterData gl nl il ctags)
>   let map_n = cdNodes cdata
>   optype <- fromObj "type" request
>   rqtype <-
> diff --git a/Ganeti/HTools/Loader.hs b/Ganeti/HTools/Loader.hs
> index cddbd9f..42092c2 100644
> --- a/Ganeti/HTools/Loader.hs
> +++ b/Ganeti/HTools/Loader.hs
> @@ -183,10 +183,9 @@ commonSuffix nl il =
>  mergeData :: [(String, DynUtil)]  -- ^ Instance utilisation data
>           -> [String]             -- ^ Exclusion tags
>           -> [String]             -- ^ Untouchable instances
> -          -> (Group.List, Node.List, Instance.List, [String])
> -          -- ^ Data from backends
> +          -> ClusterData          -- ^ Data from backends
>           -> Result ClusterData
> -mergeData um extags exinsts (gl, nl, il2, tags) =
> +mergeData um extags exinsts cdata@(ClusterData _ nl il2 tags) =
>   let il = Container.elems il2
>       il3 = foldl' (\im (name, n_util) ->
>                         case Container.findByName im name of
> @@ -209,7 +208,7 @@ mergeData um extags exinsts (gl, nl, il2, tags) =
>   in if not $ all (`elem` all_inst_names) exinsts
>      then Bad $ "Some of the excluded instances are unknown: " ++
>           show (exinsts \\ all_inst_names)
> -     else Ok (ClusterData gl snl sil tags)
> +     else Ok cdata { cdNodes = snl, cdInstances = sil }
>
>  -- | Checks the cluster data for consistency.
>  checkData :: Node.List -> Instance.List
> diff --git a/Ganeti/HTools/Luxi.hs b/Ganeti/HTools/Luxi.hs
> index 206bcb8..c7479f6 100644
> --- a/Ganeti/HTools/Luxi.hs
> +++ b/Ganeti/HTools/Luxi.hs
> @@ -186,7 +186,7 @@ readData master =
>        )
>
>  parseData :: (Result JSValue, Result JSValue, Result JSValue, Result
> JSValue)
> -          -> Result (Group.List, Node.List, Instance.List, [String])
> +          -> Result ClusterData
>  parseData (groups, nodes, instances, cinfo) = do
>   group_data <- groups >>= getGroups
>   let (group_names, group_idx) = assignIndices group_data
> @@ -195,9 +195,9 @@ parseData (groups, nodes, instances, cinfo) = do
>   inst_data <- instances >>= getInstances node_names
>   let (_, inst_idx) = assignIndices inst_data
>   ctags <- cinfo >>= getClusterTags
> -  return (group_idx, node_idx, inst_idx, ctags)
> +  return (ClusterData group_idx node_idx inst_idx ctags)
>
>  -- | Top level function for data loading
>  loadData :: String -- ^ Unix socket to use as source
> -            -> IO (Result (Group.List, Node.List, Instance.List,
> [String]))
> +         -> IO (Result ClusterData)
>  loadData master = readData master >>= return . parseData
> diff --git a/Ganeti/HTools/QC.hs b/Ganeti/HTools/QC.hs
> index d574bb0..3f9c8fd 100644
> --- a/Ganeti/HTools/QC.hs
> +++ b/Ganeti/HTools/QC.hs
> @@ -850,7 +850,7 @@ prop_Loader_assignIndices nodes =
>  prop_Loader_mergeData ns =
>   let na = Container.fromAssocList $ map (\n -> (Node.idx n, n)) ns
>   in case Loader.mergeData [] [] []
> -         (Container.empty, na, Container.empty, []) of
> +         (Loader.emptyCluster {Loader.cdNodes = na}) of
>     Types.Bad _ -> False
>     Types.Ok (Loader.ClusterData _ nl il _) ->
>       let nodes = Container.elems nl
> diff --git a/Ganeti/HTools/Rapi.hs b/Ganeti/HTools/Rapi.hs
> index 64c6a23..cab5efe 100644
> --- a/Ganeti/HTools/Rapi.hs
> +++ b/Ganeti/HTools/Rapi.hs
> @@ -147,7 +147,7 @@ readData master = do
>
>  -- | Builds the cluster data from the raw Rapi content
>  parseData :: (Result String, Result String, Result String, Result String)
> -          -> Result (Group.List, Node.List, Instance.List, [String])
> +          -> Result ClusterData
>  parseData (group_body, node_body, inst_body, tags_body) = do
>   group_data <- group_body >>= getGroups
>   let (group_names, group_idx) = assignIndices group_data
> @@ -156,9 +156,9 @@ parseData (group_body, node_body, inst_body, tags_body)
> = do
>   inst_data <- inst_body >>= getInstances node_names
>   let (_, inst_idx) = assignIndices inst_data
>   tags_data <- tags_body >>= (fromJResult "Parsing tags data" .
> decodeStrict)
> -  return (group_idx, node_idx, inst_idx, tags_data)
> +  return (ClusterData group_idx node_idx inst_idx tags_data)
>
>  -- | Top level function for data loading
>  loadData :: String -- ^ Cluster or URL to use as source
> -            -> IO (Result (Group.List, Node.List, Instance.List,
> [String]))
> +         -> IO (Result ClusterData)
>  loadData master = readData master >>= return . parseData
> diff --git a/Ganeti/HTools/Simu.hs b/Ganeti/HTools/Simu.hs
> index 84ba18b..0b962f1 100644
> --- a/Ganeti/HTools/Simu.hs
> +++ b/Ganeti/HTools/Simu.hs
> @@ -35,10 +35,10 @@ import Text.Printf (printf)
>
>  import Ganeti.HTools.Utils
>  import Ganeti.HTools.Types
> +import Ganeti.HTools.Loader
>  import qualified Ganeti.HTools.Container as Container
>  import qualified Ganeti.HTools.Group as Group
>  import qualified Ganeti.HTools.Node as Node
> -import qualified Ganeti.HTools.Instance as Instance
>
>  -- | Parse the string description into nodes.
>  parseDesc :: String -> Result (AllocPolicy, Int, Int, Int, Int)
> @@ -74,7 +74,7 @@ createGroup grpIndex spec = do
>
>  -- | Builds the cluster data from node\/instance files.
>  parseData :: [String] -- ^ Cluster description in text format
> -          -> Result (Group.List, Node.List, Instance.List, [String])
> +          -> Result ClusterData
>  parseData ndata = do
>   grpNodeData <- mapM (uncurry createGroup) $ zip [1..] ndata
>   let (groups, nodes) = unzip grpNodeData
> @@ -82,11 +82,11 @@ parseData ndata = do
>   let ktn = map (\(idx, n) -> (idx, Node.setIdx n idx))
>             $ zip [1..length nodes'] nodes'
>       ktg = map (\g -> (Group.idx g, g)) groups
> -  return (Container.fromAssocList ktg,
> -          Container.fromAssocList ktn, Container.empty, [])
> +  return (ClusterData (Container.fromAssocList ktg)
> +                      (Container.fromAssocList ktn) Container.empty [])
>
>  -- | Builds the cluster data from node\/instance files.
>  loadData :: [String] -- ^ Cluster description in text format
> -         -> IO (Result (Group.List, Node.List, Instance.List, [String]))
> +         -> IO (Result ClusterData)
>  loadData = -- IO monad, just for consistency with the other loaders
>   return . parseData
> diff --git a/Ganeti/HTools/Text.hs b/Ganeti/HTools/Text.hs
> index e690a82..11ce84f 100644
> --- a/Ganeti/HTools/Text.hs
> +++ b/Ganeti/HTools/Text.hs
> @@ -169,7 +169,7 @@ readData = readFile
>
>  -- | Builds the cluster data from text input.
>  parseData :: String -- ^ Text data
> -          -> Result (Group.List, Node.List, Instance.List, [String])
> +          -> Result ClusterData
>  parseData fdata = do
>   let flines = lines fdata
>   (glines, nlines, ilines, ctags) <-
> @@ -184,9 +184,9 @@ parseData fdata = do
>   {- instance file: name mem disk status pnode snode -}
>   (_, il) <- loadTabular ilines (loadInst ktn)
>   {- the tags are simply line-based, no processing needed -}
> -  return (gl, nl, il, ctags)
> +  return (ClusterData gl nl il ctags)
>
>  -- | Top level function for data loading
>  loadData :: String -- ^ Path to the text file
> -         -> IO (Result (Group.List, Node.List, Instance.List, [String]))
> +         -> IO (Result ClusterData)
>  loadData afile = readData afile >>= return . parseData
> diff --git a/hscan.hs b/hscan.hs
> index 3c58769..ccea188 100644
> --- a/hscan.hs
> +++ b/hscan.hs
> @@ -90,7 +90,7 @@ fixSlash = map (\x -> if x == '/' then '_' else x)
>
>
>  -- | Generates serialized data from loader input
> -processData :: Result (Group.List, Node.List, Instance.List, [String])
> +processData :: Result ClusterData
>             -> Result (Group.List, Node.List, Instance.List, String)
>  processData input_data = do
>   (ClusterData gl nl il ctags) <- input_data >>= mergeData [] [] []
> --
> 1.7.3.1
>
>
LGTM

Reply via email to