ganeti-3.1: Cluster-based virtualization management software
Safe HaskellSafe-Inferred
LanguageHaskell2010

Ganeti.JQueue

Description

Implementation of the job queue.

Synopsis

Documentation

queuedOpCodeFromMetaOpCode :: MetaOpCode -> QueuedOpCode #

Convenience function to obtain a QueuedOpCode from a MetaOpCode

queuedJobFromOpCodes :: MonadFail m => JobId -> [MetaOpCode] -> m QueuedJob #

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.

changeOpCodePriority :: Int -> QueuedOpCode -> QueuedOpCode #

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

changeJobPriority :: Int -> QueuedJob -> QueuedJob #

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

cancelQueuedJob :: Timestamp -> QueuedJob -> QueuedJob #

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

failQueuedJob :: ReasonElem -> Timestamp -> QueuedJob -> QueuedJob #

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

fromClockTime :: ClockTime -> Timestamp #

Obtain a Timestamp from a given clock time

noTimestamp :: Timestamp #

Missing timestamp type.

currentTimestamp :: IO Timestamp #

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

advanceTimestamp :: Int -> Timestamp -> Timestamp #

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

reasonTrailTimestamp :: Timestamp -> Integer #

Build a timestamp in the format expected by the reason trail (nanoseconds) starting from a JQueue Timestamp.

setReceivedTimestamp :: Timestamp -> QueuedJob -> QueuedJob #

Attach a received timestamp to a Queued Job.

extendJobReasonTrail :: QueuedJob -> QueuedJob #

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

getJobDependencies :: QueuedJob -> [JobId] #

From a queued job obtain the list of jobs it depends on.

opStatusFinalized :: OpStatus -> Bool #

Determine whether an opcode status is finalized.

extractOpSummary :: InputOpCode -> String #

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

calcJobStatus :: QueuedJob -> JobStatus #

Computes a queued job's status.

jobStarted :: QueuedJob -> Bool #

Determine if a job has started

jobFinalized :: QueuedJob -> Bool #

Determine if a job is finalised.

jobArchivable :: Timestamp -> QueuedJob -> Bool #

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

calcJobPriority :: QueuedJob -> Int #

Compute a job's priority.

jobFileName :: JobId -> FilePath #

Computes the filename for a given job ID.

liveJobFile :: FilePath -> JobId -> FilePath #

Computes the full path to a live job.

archivedJobFile :: FilePath -> JobId -> FilePath #

Computes the full path to an archives job. BROKEN.

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

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 (GenericResult IOError [JobId]) #

Computes the list of all jobs in the given directories.

sortJobIDs :: [JobId] -> [JobId] #

Sorts the a list of job IDs.

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

Loads a job from disk.

noSuchJob :: Result (QueuedJob, Bool) #

Failed to load job error.

readSerialFromDisk :: IO (Result JobId) #

Read the job serial number from disk.

allocateJobIds :: [Node] -> Lock -> Int -> IO (Result [JobId]) #

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

allocateJobId :: [Node] -> Lock -> IO (Result JobId) #

Allocate one new job id.

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

Write a job to disk.

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

Replicate many jobs to all master candidates.

writeAndReplicateJob :: Error e => ConfigData -> FilePath -> QueuedJob -> ResultT e IO [(Node, ERpcError ())] #

Writes a job to a file and replicates it to master candidates.

isQueueOpen :: IO Bool #

Decide if job queue is open

startJobs #

Arguments

:: Livelock

Luxi's livelock path

-> Lock

lock for forking new processes

-> [QueuedJob]

the list of jobs to start

-> IO [ErrorResult QueuedJob] 

Start enqueued jobs by executing the Python code.

cancelJob #

Arguments

:: Bool

if True, use sigKILL instead of sigTERM

-> Livelock

Luxi's livelock path

-> JobId

the job to cancel

-> IO (ErrorResult (Bool, String)) 

Try to cancel a job that has already been handed over to execution, by terminating the process.

tellJobPriority #

Arguments

:: Livelock

Luxi's livelock path

-> JobId

the job to inform

-> Int

the new priority

-> IO (ErrorResult (Bool, String)) 

Inform a job that it is requested to change its priority. This is done by writing the new priority to a file and sending SIGUSR1.

notifyJob :: ProcessID -> IO (ErrorResult ()) #

Notify a job that something relevant happened, e.g., a lock became available. We do this by sending sigHUP to the process.

waitUntilJobExited #

Arguments

:: Livelock

LuxiD's own livelock

-> QueuedJob

the job to wait for

-> Int

timeout in milliseconds

-> ResultG (Bool, String) 

Waits for a job's process to exit

queueDirPermissions :: FilePermissions #

Permissions for the archive directories.

archiveJobs #

Arguments

:: 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.

type Timestamp = (Int, Int) #

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.

data InputOpCode #

An input opcode.

Constructors

ValidOpCode MetaOpCode

OpCode was parsed successfully

InvalidOpCode JSValue

Invalid opcode

Instances

Instances details
Show InputOpCode # 
Instance details

Defined in Ganeti.JQueue.Objects

Methods

showsPrec :: Int -> InputOpCode -> ShowS

show :: InputOpCode -> String

showList :: [InputOpCode] -> ShowS

Eq InputOpCode # 
Instance details

Defined in Ganeti.JQueue.Objects

Methods

(==) :: InputOpCode -> InputOpCode -> Bool

(/=) :: InputOpCode -> InputOpCode -> Bool

Ord InputOpCode # 
Instance details

Defined in Ganeti.JQueue.Objects

JSON InputOpCode #

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

Instance details

Defined in Ganeti.JQueue.Objects

Methods

readJSON :: JSValue -> Result InputOpCode

showJSON :: InputOpCode -> JSValue

readJSONs :: JSValue -> Result [InputOpCode]

showJSONs :: [InputOpCode] -> JSValue

data QueuedOpCode #

Constructors

QueuedOpCode 

Fields

Instances

Instances details
Show QueuedOpCode # 
Instance details

Defined in Ganeti.JQueue.Objects

Methods

showsPrec :: Int -> QueuedOpCode -> ShowS

show :: QueuedOpCode -> String

showList :: [QueuedOpCode] -> ShowS

ArrayObject QueuedOpCode # 
Instance details

Defined in Ganeti.JQueue.Objects

Methods

toJSArray :: QueuedOpCode -> [JSValue] #

fromJSArray :: [JSValue] -> Result QueuedOpCode #

DictObject QueuedOpCode # 
Instance details

Defined in Ganeti.JQueue.Objects

Methods

toDict :: QueuedOpCode -> [(String, JSValue)] #

fromDictWKeys :: [(String, JSValue)] -> WriterT UsedKeys Result QueuedOpCode #

fromDict :: [(String, JSValue)] -> Result QueuedOpCode #

Eq QueuedOpCode # 
Instance details

Defined in Ganeti.JQueue.Objects

Methods

(==) :: QueuedOpCode -> QueuedOpCode -> Bool

(/=) :: QueuedOpCode -> QueuedOpCode -> Bool

Ord QueuedOpCode # 
Instance details

Defined in Ganeti.JQueue.Objects

JSON QueuedOpCode # 
Instance details

Defined in Ganeti.JQueue.Objects

Methods

readJSON :: JSValue -> Result QueuedOpCode

showJSON :: QueuedOpCode -> JSValue

readJSONs :: JSValue -> Result [QueuedOpCode]

showJSONs :: [QueuedOpCode] -> JSValue

data QueuedJob #

Constructors

QueuedJob 

Fields

Instances

Instances details
Show QueuedJob # 
Instance details

Defined in Ganeti.JQueue.Objects

Methods

showsPrec :: Int -> QueuedJob -> ShowS

show :: QueuedJob -> String

showList :: [QueuedJob] -> ShowS

ArrayObject QueuedJob # 
Instance details

Defined in Ganeti.JQueue.Objects

Methods

toJSArray :: QueuedJob -> [JSValue] #

fromJSArray :: [JSValue] -> Result QueuedJob #

DictObject QueuedJob # 
Instance details

Defined in Ganeti.JQueue.Objects

Methods

toDict :: QueuedJob -> [(String, JSValue)] #

fromDictWKeys :: [(String, JSValue)] -> WriterT UsedKeys Result QueuedJob #

fromDict :: [(String, JSValue)] -> Result QueuedJob #

Eq QueuedJob # 
Instance details

Defined in Ganeti.JQueue.Objects

Methods

(==) :: QueuedJob -> QueuedJob -> Bool

(/=) :: QueuedJob -> QueuedJob -> Bool

Ord QueuedJob # 
Instance details

Defined in Ganeti.JQueue.Objects

Methods

compare :: QueuedJob -> QueuedJob -> Ordering

(<) :: QueuedJob -> QueuedJob -> Bool

(<=) :: QueuedJob -> QueuedJob -> Bool

(>) :: QueuedJob -> QueuedJob -> Bool

(>=) :: QueuedJob -> QueuedJob -> Bool

max :: QueuedJob -> QueuedJob -> QueuedJob

min :: QueuedJob -> QueuedJob -> QueuedJob

JSON QueuedJob # 
Instance details

Defined in Ganeti.JQueue.Objects

Methods

readJSON :: JSValue -> Result QueuedJob

showJSON :: QueuedJob -> JSValue

readJSONs :: JSValue -> Result [QueuedJob]

showJSONs :: [QueuedJob] -> JSValue