Fix rollover condition in xenload
authorKlaus Aehlig <aehlig@google.com>
Fri, 24 Jul 2015 11:25:25 +0000 (13:25 +0200)
committerKlaus Aehlig <aehlig@google.com>
Fri, 24 Jul 2015 11:34:58 +0000 (13:34 +0200)
The Xen CPU data collector gets as raw data accumulated CPU usage
since an arbitrary start date. If the value gets too large, the
counter rolls over. The XenCpuLoad collector is aware of this
happening and adjusts the observed values accordingly. However,
the condition for detecting a rollover was wrong: on an rollover,
the value strictly goes down. The value can stay the same over
an interval, e.g., for very idle guests; not that the accuracy
of the reported accumulated value can be as coarse as a whole
CPU second.

Signed-off-by: Klaus Aehlig <aehlig@google.com>
Reviewed-by: Helga Velroyen <helgav@google.com>

src/Ganeti/DataCollectors/XenCpuLoad.hs

index 2a66513..10c39cd 100644 (file)
@@ -115,7 +115,7 @@ combineWithRollover new old | Seq.null new || Seq.null old = new Seq.>< old
 combineWithRollover new old =
   let (t2, x2) = Seq.index new $ Seq.length new - 1
       (t1, x1) = Seq.index old 0
-  in if x2 > x1
+  in if x2 >= x1
        then new Seq.>< old
        else let delta_t = diffClockTimes t2 t1
                 deltax = x2 - x1