LGTM, Thanks

On Wed, Dec 4, 2013 at 3:03 PM, Klaus Aehlig <[email protected]> wrote:

> Since luxid handled the scheduling, make luxid also read the queue
> upon restart. In this way, jobs get scheduled in the same way, independent
> of luxid restarts.
>
> Signed-off-by: Klaus Aehlig <[email protected]>
> ---
>  src/Ganeti/JQScheduler.hs | 30 ++++++++++++++++++++++++++++++
>  1 file changed, 30 insertions(+)
>
> diff --git a/src/Ganeti/JQScheduler.hs b/src/Ganeti/JQScheduler.hs
> index 09a8a8e..de800a7 100644
> --- a/src/Ganeti/JQScheduler.hs
> +++ b/src/Ganeti/JQScheduler.hs
> @@ -203,10 +203,40 @@ onTimeWatcher qstate = forever $ do
>    logInfo $ showQueue jobs'
>    scheduleSomeJobs qstate
>
> +-- | Read a single, non-archived, job, specified by its id, from disk.
> +readJobFromDisk :: JobId -> IO (Result JobWithStat)
> +readJobFromDisk jid = do
> +  qdir <- queueDir
> +  let fpath = liveJobFile qdir jid
> +  logDebug $ "Reading " ++ fpath
> +  tryFstat <- try $ getFStat fpath :: IO (Either IOError FStat)
> +  let fstat = either (const nullFStat) id tryFstat
> +  loadResult <- JQ.loadJobFromDisk qdir False jid
> +  return $ liftM (JobWithStat fstat . fst) loadResult
> +
> +-- | Read all non-finalized jobs from disk.
> +readJobsFromDisk :: IO [JobWithStat]
> +readJobsFromDisk = do
> +  logInfo "Loading job queue"
> +  qdir <- queueDir
> +  eitherJids <- JQ.getJobIDs [qdir]
> +  let jids = either (const []) JQ.sortJobIDs eitherJids
> +      jidsstring = commaJoin $ map (show . fromJobId) jids
> +  logInfo $ "Non-archived jobs on disk: " ++ jidsstring
> +  jobs <- mapM readJobFromDisk jids
> +  return $ justOk jobs
> +
>  -- | Set up the job scheduler. This will also start the monitoring
>  -- of changes to the running jobs.
>  initJQScheduler :: JQStatus -> IO ()
>  initJQScheduler qstate = do
> +  alljobs <- readJobsFromDisk
> +  let jobs = filter (not . jobFinalized . jJob) alljobs
> +      (running, queued) = partition (jobStarted . jJob) jobs
> +  modifyJobs qstate (onQueuedJobs (++ queued) . onRunningJobs (++
> running))
> +  jqjobs <- readIORef (jqJobs qstate)
> +  logInfo $ showQueue jqjobs
> +  scheduleSomeJobs qstate
>    logInfo "Starting time-based job queue watcher"
>    _ <- forkIO $ onTimeWatcher qstate
>    return ()
> --
> 1.8.4.1
>
>

Reply via email to