On Tue, Jan 29, 2013 at 11:33 +0100, Iustin Pop <ius...@google.com> wrote:
> On Mon, Jan 28, 2013 at 07:21:43PM +0000, Dato Simó wrote:
> > Make the duration of the delay configurable with --job-delay; if not zero,
> > avoid inserting the TestDelay opcode entirely.

> "if zero" as opposed to "if not zero"?

Oops, yes; fixed (s/not //).

> > +        let opcodes' = case delay of
> > +              Just d -> OpTestDelay { opDelayDuration = d
> > +                                    , opDelayOnMaster = True
> > +                                    , opDelayOnNodes = []
> > +                                    , opDelayRepeat = fromJust $ 
> > mkNonNegative 0
> > +                                    } : opcodes
> > +              Nothing -> opcodes

> >    -- Third step: create repair jobs for broken instances that are in 
> > ArHealthy.
> >    let maybeRepair c (i, r) = maybe (return i) (repairHealthy c i) r
> > +      jobDelay = optJobDelay opts
> > +      repairDelay = if jobDelay > 0      -- Could use "mfilter (> 0)" after
> > +                      then Just jobDelay -- dropping support for 6.12.
> > +                      else Nothing

> Sounds good, but since the types do allow you to write "Just 0", I'm not
> sure Just/Nothing gains you anything over making the check "> 0"
> directly in doRepair.

Hmm, you're right.

> In any case, up to you, and also many thanks for documenting the
> parameters to the function.

I've changed it to checking "> 0" in doRepair. Interdiff:

--- src/Ganeti/HTools/Program/Harep.hs
+++ src/Ganeti/HTools/Program/Harep.hs
@@ -352,7 +352,7 @@
 
 -- | Perform the suggested repair on an instance if its policy allows it.
 doRepair :: L.Client     -- ^ The Luxi client
-         -> Maybe Double -- ^ Delay to insert before the first repair opcode
+         -> Double       -- ^ Delay to insert before the first repair opcode
          -> InstanceData -- ^ The instance data
          -> (AutoRepairType, [OpCode]) -- ^ The repair job to perform
          -> IO InstanceData -- ^ The updated instance data
@@ -399,13 +399,15 @@
         -- about synchronization, but merely about speeding up the execution of
         -- the harep tool. If this TestDelay opcode is removed, the program is
         -- still correct.)
-        let opcodes' = case delay of
-              Just d -> OpTestDelay { opDelayDuration = d
-                                    , opDelayOnMaster = True
-                                    , opDelayOnNodes = []
-                                    , opDelayRepeat = fromJust $ mkNonNegative 
-                                    } : opcodes
-              Nothing -> opcodes
+        let opcodes' =
+              if delay > 0 then
+                OpTestDelay { opDelayDuration = delay
+                            , opDelayOnMaster = True
+                            , opDelayOnNodes = []
+                            , opDelayRepeat = fromJust $ mkNonNegative 0
+                            } : opcodes
+              else
+                opcodes
 
         uuid <- newUUID
         time <- getClockTime
@@ -453,11 +455,8 @@
   -- Third step: create repair jobs for broken instances that are in ArHealthy.
   let maybeRepair c (i, r) = maybe (return i) (repairHealthy c i) r
       jobDelay = optJobDelay opts
-      repairDelay = if jobDelay > 0      -- Could use "mfilter (> 0)" after
-                      then Just jobDelay -- dropping support for 6.12.
-                      else Nothing
       repairHealthy c i = case arState i of
-                            ArHealthy _ -> doRepair c repairDelay i
+                            ArHealthy _ -> doRepair c jobDelay i
                             _           -> const (return i)
 
   repairDone <- bracket (L.getClient master) L.closeClient $

Thanks,

-- 
Dato Simó | d...@google.com
Corp Fleet Management / Ganeti SRE (Dublin)

-- 
You received this message because you are subscribed to the Google Groups 
"ganeti-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ganeti-devel+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to