Also, this is lacking tests (if not covered in the rest of the series).

Cheers,
Helga

On Tue, 13 Oct 2015 at 13:04 Helga Velroyen <[email protected]> wrote:

> On Wed, 7 Oct 2015 at 11:03 'Klaus Aehlig' via ganeti-devel <
> [email protected]> wrote:
>
>> The redundancy level of a group is the number of nodes that can
>> sequentially
>> fail while still keeping it possible to have all instances on the cluster.
>> As per our design, we estimate this level by assuming for an N+1 redundant
>> cluster that the worst next failure is that of the biggest node.
>>
>> Signed-off-by: Klaus Aehlig <[email protected]>
>> ---
>>  Makefile.am                          |  1 +
>>  src/Ganeti/HTools/RedundancyLevel.hs | 76
>> ++++++++++++++++++++++++++++++++++++
>>  2 files changed, 77 insertions(+)
>>  create mode 100644 src/Ganeti/HTools/RedundancyLevel.hs
>>
>> diff --git a/Makefile.am b/Makefile.am
>> index a506296..3c8f909 100644
>> --- a/Makefile.am
>> +++ b/Makefile.am
>> @@ -952,6 +952,7 @@ HS_LIB_SRCS = \
>>         src/Ganeti/HTools/Program/Hsqueeze.hs \
>>         src/Ganeti/HTools/Program/Hroller.hs \
>>         src/Ganeti/HTools/Program/Main.hs \
>> +       src/Ganeti/HTools/RedundancyLevel.hs \
>>         src/Ganeti/HTools/Repair.hs \
>>         src/Ganeti/HTools/Tags.hs \
>>         src/Ganeti/HTools/Tags/Constants.hs \
>> diff --git a/src/Ganeti/HTools/RedundancyLevel.hs
>> b/src/Ganeti/HTools/RedundancyLevel.hs
>> new file mode 100644
>> index 0000000..efd6a26
>> --- /dev/null
>> +++ b/src/Ganeti/HTools/RedundancyLevel.hs
>> @@ -0,0 +1,76 @@
>> +{-| Implementation of the computation of the cluster redundancy level
>> +
>> +-}
>> +
>> +{-
>> +
>> +Copyright (C) 2015 Google Inc.
>> +All rights reserved.
>> +
>> +Redistribution and use in source and binary forms, with or without
>> +modification, are permitted provided that the following conditions are
>> +met:
>> +
>> +1. Redistributions of source code must retain the above copyright notice,
>> +this list of conditions and the following disclaimer.
>> +
>> +2. Redistributions in binary form must reproduce the above copyright
>> +notice, this list of conditions and the following disclaimer in the
>> +documentation and/or other materials provided with the distribution.
>> +
>> +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
>> +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
>> +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
>> PARTICULAR
>> +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
>> +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
>> +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
>> +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
>> +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
>> +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
>> +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
>> +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>> +
>> +-}
>> +
>> +module Ganeti.HTools.RedundancyLevel
>> +  ( redundancy
>> +  ) where
>> +
>> +import Control.Applicative (liftA2)
>> +import Control.Arrow ((&&&))
>> +import Data.Function (on)
>> +import qualified Data.IntMap as IntMap
>> +import Data.List (sortBy)
>> +
>> +import Ganeti.BasicTypes (runListHead)
>> +import Ganeti.HTools.AlgorithmParams (AlgorithmOptions)
>> +import Ganeti.HTools.GlobalN1 (redundant)
>> +import qualified Ganeti.HTools.Cluster as Cluster
>> +import qualified Ganeti.HTools.Cluster.Metrics as Metrics
>> +import qualified Ganeti.HTools.Container as Container
>> +import qualified Ganeti.HTools.Instance as Instance
>> +import qualified Ganeti.HTools.Node as Node
>> +import Ganeti.Utils (iterateJust)
>> +
>> +-- | Estimate the level of redundancy of node group given
>> +-- by its nodes and instances.
>> +redundancy :: AlgorithmOptions -> Node.List -> Instance.List -> Int
>> +redundancy _    nl _  | any (liftA2 (&&) Node.offline $ not . null .
>> Node.pList)
>> +                        $ IntMap.elems nl = -1
>> +redundancy opts nl il | not $ redundant opts nl il = 0
>> +redundancy opts nl il =
>> +  let sortedNodes =
>> +        sortBy (compare `on` ((Node.tMem . snd) &&& fst))
>> +        . filter (not . Node.offline . snd)
>> +        $ IntMap.toAscList nl
>> +   in case sortedNodes of
>> +     [] -> 0
>> +     (bidx, bNode):_ ->
>> +       let bNode' = bNode { Node.offline = True }
>> +           nl' = Container.add bidx bNode' nl
>> +           ini_cv = Metrics.compCV nl'
>> +           ini_tbl = Cluster.Table nl' il ini_cv []
>> +           Cluster.Table nl'' il' _ _ =
>> +             runListHead ini_tbl id . reverse
>> +             $ iterateJust (Cluster.tryBalance opts) ini_tbl
>> +       in 1 + redundancy opts nl'' il'
>>
>
> consider using more expressive variables names. It takes quite some time
> to guess what 'bidx', 'nl', 'ini_cv', 'ini_tbl' are supposed to mean.
>
> rest LGTM,
> thanks
>
>
>> --
>> 2.6.0.rc2.230.g3dd15c0
>>
>> --
>
> Helga Velroyen
> Software Engineer
> [email protected]
>
> Google Germany GmbH
> Dienerstraße 12
> 80331 München
>
> Geschäftsführer: Matthew Scott Sucherman, Paul Terence Manicle
> Registergericht und -nummer: Hamburg, HRB 86891
> Sitz der Gesellschaft: Hamburg
>
> Diese E-Mail ist vertraulich. Wenn Sie nicht der richtige Adressat sind,
> leiten Sie diese bitte nicht weiter, informieren Sie den Absender und
> löschen Sie die E-Mail und alle Anhänge. Vielen Dank.
>
> This e-mail is confidential. If you are not the right addressee please do
> not forward it, please inform the sender, and please erase this e-mail
> including any attachments. Thanks.
>
> --

Helga Velroyen
Software Engineer
[email protected]

Google Germany GmbH
Dienerstraße 12
80331 München

Geschäftsführer: Matthew Scott Sucherman, Paul Terence Manicle
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg

Diese E-Mail ist vertraulich. Wenn Sie nicht der richtige Adressat sind,
leiten Sie diese bitte nicht weiter, informieren Sie den Absender und
löschen Sie die E-Mail und alle Anhänge. Vielen Dank.

This e-mail is confidential. If you are not the right addressee please do
not forward it, please inform the sender, and please erase this e-mail
including any attachments. Thanks.

Reply via email to