LGTM, thanks

On Wed, May 21, 2014 at 7:56 PM, 'Klaus Aehlig' via ganeti-devel <
[email protected]> wrote:

> In tiered allocation, instances are put on the cluster, while they
> fit---and once no more instances of the given size can be fit, smaller
> instances are tried next. There is obviously some heuristics involved
> in how to shrink the instance to get a smaller one of suitable
> size. The standard heuristics is to shrink on the resource that
> prevents to most placements. This, however, can lead into missing out
> possible smaller instances, as noted in issue 483. The way to avoid
> this trap was to consider all shrinkings of a single resource to see
> if this leads to new solutions. This patch now changes the order of
> the search: use this single resource look-ahead only if the standard
> heuristics does not yield any progress. While this does not change the
> complexity of the underlying algorithm, it improves search time
> significantly for those cases where the standard heuristics works,
> which should cover a good part of the practically relevant cases.
>
> Signed-off-by: Klaus Aehlig <[email protected]>
> ---
>  src/Ganeti/HTools/Cluster.hs | 20 +++++++++++++-------
>  1 file changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/src/Ganeti/HTools/Cluster.hs b/src/Ganeti/HTools/Cluster.hs
> index 0fd3bd0..4dbfcad 100644
> --- a/src/Ganeti/HTools/Cluster.hs
> +++ b/src/Ganeti/HTools/Cluster.hs
> @@ -1349,14 +1349,20 @@ tieredAlloc nl il limit newinst allocnodes ixes
> cstats =
>                                            . flip (tryAlloc nl' il')
> allocnodes)
>                         newinst
>            bigSteps = filter isJust . map suffShrink . reverse $ sortedErrs
> +          progress (Ok (_, _, _, newil', _)) (Ok (_, _, _, newil, _)) =
> +            length newil' > length newil
> +          progress _ _ = False
>        in if stop then newsol else
> -          case bigSteps of
> -            Just newinst':_ -> tieredAlloc nl' il' newlimit
> -                               newinst' allocnodes ixes' cstats'
> -            _ -> case Instance.shrinkByType newinst . last $ sortedErrs of
> -                   Bad _ -> newsol
> -                   Ok newinst' -> tieredAlloc nl' il' newlimit
> -                                  newinst' allocnodes ixes' cstats'
> +           let newsol' = case Instance.shrinkByType newinst . last
> +                                $ sortedErrs of
> +                 Bad _ -> newsol
> +                 Ok newinst' -> tieredAlloc nl' il' newlimit
> +                                newinst' allocnodes ixes' cstats'
> +           in if progress newsol' newsol then newsol' else
> +                case bigSteps of
> +                  Just newinst':_ -> tieredAlloc nl' il' newlimit
> +                                     newinst' allocnodes ixes' cstats'
> +                  _ -> newsol
>
>  -- * Formatting functions
>
> --
> 1.9.1.423.g4596e3a
>
>


-- 
-- 
Helga Velroyen | Software Engineer | [email protected] |

Google Germany GmbH
Dienerstr. 12
80331 München

Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschäftsführer: Graham Law, Christine Elizabeth Flores

Reply via email to