Skip to content
Snippets Groups Projects
Commit 31e7ac17 authored by Iustin Pop's avatar Iustin Pop
Browse files

hspace: fix failure handling of tryAlloc results

Currently hspace doesn't handle failures from tryAlloc correctly; this
patch changes the iterateDepth function in hspace to return a Result (…)
so that errors can be propagated correctly.

The patch also changes one output key to be more clear and a typo in
Cluster.hs
parent 478df686
No related branches found
No related tags found
No related merge requests found
......@@ -488,7 +488,7 @@ tryAlloc nl _ inst 1 =
) ([], 0, Nothing) all_nodes
in return sols
tryAlloc _ _ _ reqn = fail $ "Unsupported number of alllocation \
tryAlloc _ _ _ reqn = fail $ "Unsupported number of allocation \
\destinations required (" ++ show reqn ++
"), only two supported"
......
......@@ -198,19 +198,17 @@ iterateDepth :: Node.List
-> Instance.Instance
-> Int
-> [Instance.Instance]
-> ([(FailMode, Int)], Node.List, [Instance.Instance])
-> Result (FailStats, Node.List, [Instance.Instance])
iterateDepth nl il newinst nreq ixes =
let depth = length ixes
newname = printf "new-%d" depth::String
newidx = length (Container.elems il) + depth
newi2 = Instance.setIdx (Instance.setName newinst newname) newidx
sols = Cluster.tryAlloc nl il newi2 nreq::
OpResult Cluster.AllocSolution
in case sols of
OpFail _ -> ([], nl, ixes)
OpGood (errs, _, sols3) ->
in case Cluster.tryAlloc nl il newi2 nreq of
Bad s -> Bad s
Ok (errs, _, sols3) ->
case sols3 of
Nothing -> (Cluster.collapseFailures errs, nl, ixes)
Nothing -> Ok (Cluster.collapseFailures errs, nl, ixes)
Just (_, (xnl, xi, _)) ->
iterateDepth xnl il newinst nreq $! (xi:ixes)
......@@ -239,7 +237,7 @@ printResults fin_nl num_instances allocs sreason = do
printKeys [ ("ALLOC_USAGE", printf "%.8f"
((fromIntegral num_instances::Double) /
fromIntegral fin_instances))
, ("ALLOC_COUNT", printf "%d" allocs)
, ("ALLOC_INSTANCES", printf "%d" allocs)
, ("ALLOC_FAIL_REASON", map toUpper . show . fst $ head sreason)
]
printKeys $ map (\(x, y) -> (printf "ALLOC_%s_CNT" (show x),
......@@ -325,8 +323,13 @@ main = do
newinst = Instance.create "new" (optIMem opts) (optIDsk opts)
(optIVCPUs opts) "ADMIN_down" (-1) (-1)
let (ereason, fin_nl, ixes) = iterateDepth nl il newinst req_nodes []
allocs = length ixes
let result = iterateDepth nl il newinst req_nodes []
(ereason, fin_nl, ixes) <- (case result of
Bad s -> do
hPrintf stderr "Failure: %s\n" s
exitWith $ ExitFailure 1
Ok x -> return x)
let allocs = length ixes
fin_ixes = reverse ixes
ix_namelen = maximum . map (length . Instance.name) $ fin_ixes
sreason = reverse $ sortBy (compare `on` snd) ereason
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment