Safe Haskell | None |
---|
Implementation of the job queue.
- type Timestamp = (Int, Int)
- noTimestamp :: Timestamp
- fromClockTime :: ClockTime -> Timestamp
- currentTimestamp :: IO Timestamp
- advanceTimestamp :: Int -> Timestamp -> Timestamp
- data InputOpCode
- = ValidOpCode MetaOpCode
- | InvalidOpCode JSValue
- invalidOp :: String
- extractOpSummary :: InputOpCode -> String
- data QueuedOpCode = QueuedOpCode {
- qoInput :: InputOpCode
- qoStatus :: OpStatus
- qoResult :: JSValue
- qoLog :: [(Int, Timestamp, ELogType, JSValue)]
- qoPriority :: Int
- qoStartTimestamp :: Maybe Timestamp
- qoExecTimestamp :: Maybe Timestamp
- qoEndTimestamp :: Maybe Timestamp
- loadQueuedOpCode :: JSValue -> Result QueuedOpCode
- saveQueuedOpCode :: QueuedOpCode -> JSValue
- toDictQueuedOpCode :: QueuedOpCode -> [(String, JSValue)]
- data QueuedJob = QueuedJob {
- qjId :: JobId
- qjOps :: [QueuedOpCode]
- qjReceivedTimestamp :: Maybe Timestamp
- qjStartTimestamp :: Maybe Timestamp
- qjEndTimestamp :: Maybe Timestamp
- loadQueuedJob :: JSValue -> Result QueuedJob
- saveQueuedJob :: QueuedJob -> JSValue
- toDictQueuedJob :: QueuedJob -> [(String, JSValue)]
- queuedOpCodeFromMetaOpCode :: MetaOpCode -> QueuedOpCode
- queuedJobFromOpCodes :: Monad m => JobId -> [MetaOpCode] -> m QueuedJob
- setReceivedTimestamp :: Timestamp -> QueuedJob -> QueuedJob
- reasonTrailTimestamp :: Timestamp -> Integer
- extendInputOpCodeReasonTrail :: JobId -> Timestamp -> Int -> InputOpCode -> InputOpCode
- extendOpCodeReasonTrail :: JobId -> Timestamp -> Int -> QueuedOpCode -> QueuedOpCode
- extendJobReasonTrail :: QueuedJob -> QueuedJob
- changeOpCodePriority :: Int -> QueuedOpCode -> QueuedOpCode
- cancelOpCode :: Timestamp -> QueuedOpCode -> QueuedOpCode
- changeJobPriority :: Int -> QueuedJob -> QueuedJob
- cancelQueuedJob :: Timestamp -> QueuedJob -> QueuedJob
- jobFilePrefix :: String
- jobFileName :: JobId -> FilePath
- parseJobFileId :: Monad m => FilePath -> m JobId
- liveJobFile :: FilePath -> JobId -> FilePath
- archivedJobFile :: FilePath -> JobId -> FilePath
- opStatusToJob :: OpStatus -> JobStatus
- calcJobStatus :: QueuedJob -> JobStatus
- jobStarted :: QueuedJob -> Bool
- jobFinalized :: QueuedJob -> Bool
- jobArchivable :: Timestamp -> QueuedJob -> Bool
- opStatusFinalized :: OpStatus -> Bool
- calcJobPriority :: QueuedJob -> Int
- ignoreIOError :: a -> Bool -> String -> IOError -> IO a
- allArchiveDirs :: FilePath -> IO [FilePath]
- determineJobDirectories :: FilePath -> Bool -> IO [FilePath]
- sequencer :: [Either IOError [JobId]] -> Either IOError [[JobId]]
- seqFolder :: Either IOError [[JobId]] -> Either IOError [JobId] -> Either IOError [[JobId]]
- getJobIDs :: [FilePath] -> IO (Either IOError [JobId])
- sortJobIDs :: [JobId] -> [JobId]
- getDirJobIDs :: FilePath -> IO (Either IOError [JobId])
- readJobDataFromDisk :: FilePath -> Bool -> JobId -> IO (Maybe (String, Bool))
- noSuchJob :: Result (QueuedJob, Bool)
- loadJobFromDisk :: FilePath -> Bool -> JobId -> IO (Result (QueuedJob, Bool))
- writeJobToDisk :: FilePath -> QueuedJob -> IO (Result ())
- replicateJob :: FilePath -> [Node] -> QueuedJob -> IO [(Node, ERpcError ())]
- replicateManyJobs :: FilePath -> [Node] -> [QueuedJob] -> IO ()
- readSerialFromDisk :: IO (Result JobId)
- allocateJobIds :: [Node] -> MVar () -> Int -> IO (Result [JobId])
- allocateJobId :: [Node] -> MVar () -> IO (Result JobId)
- isQueueOpen :: IO Bool
- startJobs :: [QueuedJob] -> IO ()
- cancelJob :: JobId -> IO (ErrorResult JSValue)
- queueDirPermissions :: FilePermissions
- archiveSomeJobsUntil :: ([JobId] -> IO ()) -> FilePath -> ClockTime -> Timestamp -> Int -> [JobId] -> [JobId] -> IO (Int, Int)
- archiveJobs :: ConfigData -> Int -> Int -> [JobId] -> IO (Int, Int)
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 |
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
QueuedOpCode | |
|
Eq QueuedOpCode | |
Show QueuedOpCode | |
JSON QueuedOpCode |
loadQueuedOpCode :: JSValue -> Result QueuedOpCodeSource
saveQueuedOpCode :: QueuedOpCode -> JSValueSource
toDictQueuedOpCode :: QueuedOpCode -> [(String, JSValue)]Source
QueuedJob | |
|
loadQueuedJob :: JSValue -> Result QueuedJobSource
saveQueuedJob :: QueuedJob -> JSValueSource
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.
reasonTrailTimestamp :: Timestamp -> IntegerSource
extendInputOpCodeReasonTrail :: JobId -> Timestamp -> Int -> InputOpCode -> InputOpCodeSource
extendOpCodeReasonTrail :: JobId -> Timestamp -> Int -> QueuedOpCode -> QueuedOpCodeSource
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.
jobFilePrefix :: StringSource
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.
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
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.
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 | timeout |
-> [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.