Safe HaskellNone




Implementation of the job queue.


Data types

type Timestamp = (Int, Int)Source

The ganeti queue timestamp type. It represents the time as the pair of seconds since the epoch and microseconds since the beginning of the second.

noTimestamp :: TimestampSource

Missing timestamp type.

fromClockTime :: ClockTime -> TimestampSource

Obtain a Timestamp from a given clock time

currentTimestamp :: IO TimestampSource

Get the current time in the job-queue timestamp format.

advanceTimestamp :: Int -> Timestamp -> TimestampSource

From a given timestamp, obtain the timestamp of the time that is the given number of seconds later.

data InputOpCode Source

An input opcode.


ValidOpCode MetaOpCode

OpCode was parsed successfully

InvalidOpCode JSValue

Invalid opcode


Eq InputOpCode 
Show InputOpCode 
JSON InputOpCode

JSON instance for InputOpCode, trying to parse it and if failing, keeping the original JSValue.

invalidOp :: StringSource

extractOpSummary :: InputOpCode -> StringSource

Tries to extract the opcode summary from an InputOpCode. This duplicates some functionality from the opSummary function in Ganeti.OpCodes.

data QueuedOpCode Source




qoInput :: InputOpCode
qoStatus :: OpStatus
qoResult :: JSValue
qoLog :: [(Int, Timestamp, ELogType, JSValue)]
qoPriority :: Int
qoStartTimestamp :: Maybe Timestamp
qoExecTimestamp :: Maybe Timestamp
qoEndTimestamp :: Maybe Timestamp


toDictQueuedOpCode :: QueuedOpCode -> [(String, JSValue)]Source

data QueuedJob Source


Eq QueuedJob 
Show QueuedJob 
JSON QueuedJob 

loadQueuedJob :: JSValue -> Result QueuedJobSource

toDictQueuedJob :: QueuedJob -> [(String, JSValue)]Source

queuedOpCodeFromMetaOpCode :: MetaOpCode -> QueuedOpCodeSource

Convenience function to obtain a QueuedOpCode from a MetaOpCode

queuedJobFromOpCodes :: Monad m => JobId -> [MetaOpCode] -> m QueuedJobSource

From a job-id and a list of op-codes create a job. This is the pure part of job creation, as allocating a new job id lives in IO.

setReceivedTimestamp :: Timestamp -> QueuedJob -> QueuedJobSource

Attach a received timestamp to a Queued Job.

extendJobReasonTrail :: QueuedJob -> QueuedJobSource

Append an element to the reason trail of all the OpCodes of a queued job.

changeOpCodePriority :: Int -> QueuedOpCode -> QueuedOpCodeSource

Change the priority of a QueuedOpCode, if it is not already finalized.

changeJobPriority :: Int -> QueuedJob -> QueuedJobSource

Change the priority of a job, i.e., change the priority of the non-finalized opcodes.

cancelQueuedJob :: Timestamp -> QueuedJob -> QueuedJobSource

Transform a QueuedJob that has not been started into its canceled form.

jobFileName :: JobId -> FilePathSource

Computes the filename for a given job ID.

parseJobFileId :: Monad m => FilePath -> m JobIdSource

liveJobFile :: FilePath -> JobId -> FilePathSource

Computes the full path to a live job.

archivedJobFile :: FilePath -> JobId -> FilePathSource

Computes the full path to an archives job. BROKEN.

calcJobStatus :: QueuedJob -> JobStatusSource

Computes a queued job's status.

jobStarted :: QueuedJob -> BoolSource

Determine if a job has started

jobFinalized :: QueuedJob -> BoolSource

Determine if a job is finalised.

jobArchivable :: Timestamp -> QueuedJob -> BoolSource

Determine if a job is finalized and its timestamp is before a given time.

opStatusFinalized :: OpStatus -> BoolSource

Determine whether an opcode status is finalized.

calcJobPriority :: QueuedJob -> IntSource

Compute a job's priority.

ignoreIOError :: a -> Bool -> String -> IOError -> IO aSource

allArchiveDirs :: FilePath -> IO [FilePath]Source

determineJobDirectories :: FilePath -> Bool -> IO [FilePath]Source

Build list of directories containing job files. Note: compared to the Python version, this doesn't ignore a potential lost+found file.

sequencer :: [Either IOError [JobId]] -> Either IOError [[JobId]]Source

seqFolder :: Either IOError [[JobId]] -> Either IOError [JobId] -> Either IOError [[JobId]]Source

getJobIDs :: [FilePath] -> IO (Either IOError [JobId])Source

Computes the list of all jobs in the given directories.

sortJobIDs :: [JobId] -> [JobId]Source

Sorts the a list of job IDs.

getDirJobIDs :: FilePath -> IO (Either IOError [JobId])Source

readJobDataFromDisk :: FilePath -> Bool -> JobId -> IO (Maybe (String, Bool))Source

noSuchJob :: Result (QueuedJob, Bool)Source

Failed to load job error.

loadJobFromDisk :: FilePath -> Bool -> JobId -> IO (Result (QueuedJob, Bool))Source

Loads a job from disk.

writeJobToDisk :: FilePath -> QueuedJob -> IO (Result ())Source

Write a job to disk.

replicateJob :: FilePath -> [Node] -> QueuedJob -> IO [(Node, ERpcError ())]Source

replicateManyJobs :: FilePath -> [Node] -> [QueuedJob] -> IO ()Source

Replicate many jobs to all master candidates.

readSerialFromDisk :: IO (Result JobId)Source

Read the job serial number from disk.

allocateJobIds :: [Node] -> MVar () -> Int -> IO (Result [JobId])Source

Allocate new job ids. To avoid races while accessing the serial file, the threads synchronize over a lock, as usual provided by an MVar.

allocateJobId :: [Node] -> MVar () -> IO (Result JobId)Source

Allocate one new job id.

isQueueOpen :: IO BoolSource

Decide if job queue is open

startJobs :: [QueuedJob] -> IO ()Source

Start enqueued jobs, currently by handing them over to masterd.

cancelJob :: JobId -> IO (ErrorResult JSValue)Source

Try to cancel a job that has already been handed over to execution, currently by asking masterd to cancel it.

queueDirPermissions :: FilePermissionsSource

Permissions for the archive directories.

archiveSomeJobsUntil :: ([JobId] -> IO ()) -> FilePath -> ClockTime -> Timestamp -> Int -> [JobId] -> [JobId] -> IO (Int, Int)Source



:: ConfigData

cluster configuration

-> Int

time the job has to be in the past in order to be archived

-> Int


-> [JobId]

jobs to consider

-> IO (Int, Int) 

Archive jobs older than the given time, but do not exceed the timeout for carrying out this task.