> > +-- | Compute the result of moving an instance to a different node.
> > +move :: Idx -> Ndx -> (Node.List, Instance.List)
> > +        -> OpResult (Node.List, Instance.List)
> > +move idx new_ndx (nl, il) = do
> > +  let new_node = Container.find new_ndx nl
> > +      inst = Container.find idx il
> > +      old_ndx = Instance.pNode inst
> > +      old_node = Container.find old_ndx nl
> > +  new_node' <- Node.addPriEx True new_node inst
> > +  let old_node' = Node.removePri old_node inst
> > +      inst' = Instance.setPri inst new_ndx
> > +      nl' = Container.addTwo old_ndx old_node' new_ndx new_node' nl
> > +      il' = Container.add idx inst' il
> > +  return (nl', il')
> >
> 
> Are we just "picking" a new node for the instance? What if it doesn't fit?

The Node.addPriEx already verifies memory, disk, CPU, and tags (that's
why it lives in the OpResult monad). In fact, as far as I can see, the
only verification in hail when allocating a non-redundant instance is
also only done by calling Node.addPri (a short form of Node.addPriEx).

Am I missing something?

Best,
Klaus

-- 
Klaus Aehlig
Google Germany GmbH, Dienerstr. 12, 80331 Muenchen
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschaeftsfuehrer: Graham Law, Katherine Stephens

Reply via email to