Fix integer overflow problem in hbal
authorMichele Tartara <mtartara@google.com>
Thu, 13 Feb 2014 12:39:38 +0000 (13:39 +0100)
committerMichele Tartara <mtartara@google.com>
Thu, 13 Feb 2014 13:52:12 +0000 (14:52 +0100)
waitForJobs in src/Ganeti/Jobs.hs has an integer overflow that (at least on
amd64) causes it to break after waiting for ~10 minutes. This results in hbal
sleeping forever (when compiled with squeeze's ghc 6.12.1) or crashing (when
compiled with precise's ghc 7.4.1) whenever it has to wait ~10 minutes for a
jobset to complete.

Thanks to gjo@google.com for finding the bug and suggesting the fix.

Fixes Issue 717.

Signed-off-by: Michele Tartara <mtartara@google.com>
Reviewed-by: Klaus Aehlig <aehlig@google.com>

src/Ganeti/Jobs.hs

index 179a3a0..c9ac935 100644 (file)
@@ -70,12 +70,12 @@ waitForJobs jids client = waitForJobs' 500000 15000000
     waitForJobs' delay maxdelay = do
       -- TODO: this should use WaitForJobChange once it's available in Haskell
       -- land, instead of a fixed schedule of sleeping intervals.
-      threadDelay $ min delay maxdelay
+      threadDelay delay
       sts <- L.queryJobsStatus client jids
       case sts of
         Bad e -> return . Bad $ "Checking job status: " ++ formatError e
         Ok sts' -> if any (<= JOB_STATUS_RUNNING) sts' then
-                     waitForJobs' (delay * 2) maxdelay
+                     waitForJobs' (min (delay * 2) maxdelay) maxdelay
                    else
                      return . Ok $ zip jids sts'