Safe HaskellSafe-Infered



Implementation of the iallocator interface.



type IAllocResult = (String, JSValue, List, List)Source

parseNode :: NameAssoc -> String -> JSRecord -> Result (String, Node)Source

parseGroup :: String -> JSRecord -> Result (String, Group)Source

parseData :: ClockTime -> String -> Result ([String], Request)Source

formatResponse :: Bool -> String -> JSValue -> StringSource

formatAllocate :: List -> GenericAllocSolution a -> Result IAllocResultSource

Convert allocation/relocation results into the result format.

formatMultiAlloc :: (List, List, GenericAllocSolutionList a) -> Result IAllocResultSource

Convert multi allocation results into the result format.



:: AlgorithmOptions 
-> List

The group list

-> List

The node list

-> List

The instance list

-> Idx

The index of the instance to move

-> Int

The number of nodes required

-> [Ndx]

Nodes which should not be used

-> Result (List, List, [Ndx])

Solution list

Runs relocate for a single instance.

This is wrapper over the tryNodeEvac function that is run with a single instance (ours), and further it checks that the result it got (in the nodes field) is actually consistent, as tryNodeEvac is designed to output primarily an opcode list, not a node list.

readRequest :: FilePath -> IO RequestSource

Reads the request from the data file(s).

formatIAllocResult :: Result IAllocResult -> (Maybe (List, List), String)Source

Format an IAlloc result to maybe the new cluster and a response.

runIAllocator :: AlgorithmOptions -> Request -> (Maybe (List, List), String)Source

Main iallocator pipeline.



:: FilePath

The path to the file

-> IO (Result ClusterData) 

Load the data from an iallocation request file